文件
chen 301194963b
一些检查失败了
automerge / automerge (push) Has been cancelled
react-native-android-build-apk / AssembleRelease (push) Has been cancelled
Build macOS M1 / Main (push) Has been cancelled
Joplin Continuous Integration / Main (macos-15-intel) (push) Has been cancelled
Joplin Continuous Integration / Main (ubuntu-22.04) (push) Has been cancelled
Joplin Continuous Integration / Main (ubuntu-22.04-arm) (push) Has been cancelled
Joplin Continuous Integration / Main (windows-11-vs2026-arm) (push) Has been cancelled
Joplin Continuous Integration / Main (windows-2025) (push) Has been cancelled
Joplin Continuous Integration / ServerDockerImage (ubuntu-22.04) (push) Has been cancelled
Joplin Continuous Integration / ServerDockerImage (ubuntu-22.04-arm) (push) Has been cancelled
Joplin UI tests / Main (ubuntu-22.04) (push) Has been cancelled
Joplin UI tests / Main (windows-2025) (push) Has been cancelled
Joplin UI tests / Mobile (push) Has been cancelled
Close stale issues / ProcessStaleIssues (push) Has been cancelled
feat: Initial clean release of CHM
2026-11-04 11:29:39 +08:00

169 行
4.6 KiB
Rust

use renderer::convert;
use std::fs;
use std::path::PathBuf;
struct TestResources {
output_dir: PathBuf,
test_data_dir: PathBuf,
}
fn setup(test_id: &str) -> TestResources {
let output_dir = PathBuf::from("./test-output").join(test_id);
if output_dir.exists() {
fs::remove_dir_all(&output_dir).unwrap();
}
fs::create_dir_all(&output_dir).unwrap();
let test_data_dir = PathBuf::from("../test-data/");
assert!(test_data_dir.exists());
TestResources {
output_dir: fs::canonicalize(output_dir).unwrap(),
test_data_dir: fs::canonicalize(test_data_dir).unwrap(),
}
}
#[test]
fn convert_web_export() {
let TestResources {
output_dir,
test_data_dir,
} = setup("web_export");
let test_data_dir = test_data_dir.join("single-page");
convert(
&test_data_dir.join("Untitled Section.one").to_string_lossy(),
&output_dir.to_string_lossy(),
&test_data_dir.to_string_lossy(),
)
.unwrap();
// Should create a table of contents file
assert!(output_dir.join("Untitled Section.html").exists());
// Should convert the input page to an HTML file
assert!(
output_dir
.join("Untitled Section")
.join("test.html")
.exists()
);
}
#[test]
fn convert_desktop_export() {
let TestResources {
output_dir,
test_data_dir,
} = setup("desktop_export");
let test_data_dir = test_data_dir.join("onenote-2016");
convert(
&test_data_dir.join("OneWithFileData.one").to_string_lossy(),
&output_dir.to_string_lossy(),
&test_data_dir.to_string_lossy(),
)
.unwrap();
// Should create a table of contents file
assert!(output_dir.join("OneWithFileData.html").exists());
// Should convert the input page to an HTML file
assert!(
output_dir
.join("OneWithFileData")
.join("Untitled Page 1.html")
.exists()
);
}
#[test]
fn convert_page_versions() {
let TestResources {
output_dir,
test_data_dir,
} = setup("page_versions");
convert(
&test_data_dir.join("Page versions.one").to_string_lossy(),
&output_dir.to_string_lossy(),
&test_data_dir.to_string_lossy(),
)
.unwrap();
// Should create a table of contents file
assert!(output_dir.join("Page versions.html").exists());
// Should convert the input page to an HTML file
assert!(output_dir.join("Page versions").join("Test!.html").exists());
}
#[test]
fn convert_ink() {
let TestResources {
output_dir,
test_data_dir,
} = setup("ink");
convert(
&test_data_dir.join("ink.one").to_string_lossy(),
&output_dir.to_string_lossy(),
&test_data_dir.to_string_lossy(),
)
.unwrap();
// Should create a table of contents file
assert!(output_dir.join("ink.html").exists());
// Should convert the input page to an HTML file
let content_file = output_dir.join("ink").join("Testing….html");
assert!(content_file.exists());
// Should render at least one SVG
let rendered_file = fs::read_to_string(content_file).expect("should read the content file");
assert!(rendered_file.contains("<svg style"));
}
#[test]
fn convert_printout() {
let TestResources {
output_dir,
test_data_dir,
} = setup("printout");
convert(
&test_data_dir.join("Printout.one").to_string_lossy(),
&output_dir.to_string_lossy(),
&test_data_dir.to_string_lossy(),
)
.unwrap();
// Should create a table of contents file
assert!(output_dir.join("Printout.html").exists());
// Should convert the input page to an HTML file
let content_file = output_dir.join("Printout").join("Test.html");
assert!(content_file.exists());
let rendered_file = fs::read_to_string(content_file).expect("should read the content file");
// Should correctly detect the file extension:
assert!(
!rendered_file.contains("<img src=\"test4_1.pdf\""),
"should not use the PDF extension for printout pages"
);
assert!(
rendered_file.contains("<img src=\"test4_1.pdf.png\""),
"should import as a PNG"
);
// Should correctly create the PNG
let png_data =
fs::read(output_dir.join("Printout").join("test4_1.pdf.png")).expect("should read the PNG");
assert_eq!(
png_data[0..4],
[0x89, 0x50, 0x4E, 0x47],
"PNG should have the correct initial bytes"
);
assert_eq!(
png_data.len(),
14_005,
"PNG should have the correct byte length"
);
}