make tests windows compatible

This commit is contained in:
Gambhiro 2017-01-20 14:14:23 +00:00
parent 05ec8ae92e
commit 0bebd9e07f
5 changed files with 74 additions and 513 deletions

View File

@ -1,5 +1,3 @@
title = "mdBook Documentation" title = "mdBook Documentation"
description = "Create books from markdown files. Like Gitbook but implemented in Rust." description = "Create books from markdown files. Like Gitbook but implemented in Rust."
author = "Mathieu David"
[[authors]]
name = "Mathieu David"

View File

@ -1,2 +1,2 @@
title = "An Empty Canvas" title = "The Title"
author = "The Author" author = "The Author"

View File

@ -38,7 +38,22 @@ fn it_renders_multilanguage_book() {
assert!(s.contains("<html lang=\"en\">")); assert!(s.contains("<html lang=\"en\">"));
assert!(s.contains("<h1>The Pool of Tears</h1>")); assert!(s.contains("<h1>The Pool of Tears</h1>"));
assert!(s.contains("<base href=\"../\">")); assert!(s.contains("<base href=\"../\">"));
assert!(s.contains("li><a href=\"en/tears.html\" class=\"active\"><strong>2.</strong> The Pool of Tears</a></li>"));
let does_it_contain = |check_str: &str, fmt_str: &str, path_parts: Vec<&str>| -> bool {
let mut p = PathBuf::from("");
for i in path_parts.iter() {
p = p.join(i);
}
let ps = p.to_str().unwrap();
// Handmade formatting with replace. For anything more, it'll need Handlebars.
let text = fmt_str.replace("{}", ps);
check_str.contains(&text)
};
assert!(does_it_contain(
&s, "<li><a href=\"{}\" class=\"active\"><strong>2.</strong> The Pool of Tears</a></li>",
vec!["en", "tears.html"]
));
book_path = proj.translations.get("fr").unwrap().config.get_dest(); book_path = proj.translations.get("fr").unwrap().config.get_dest();
chapter_path = book_path.join("tears.html"); chapter_path = book_path.join("tears.html");
@ -63,9 +78,10 @@ fn it_renders_multilanguage_book() {
book_path = proj.translations.get("hu").unwrap().config.get_dest(); book_path = proj.translations.get("hu").unwrap().config.get_dest();
chapter_path = book_path.join("tarka-farka.html"); chapter_path = book_path.join("tarka-farka.html");
s = utils::fs::file_to_string(&chapter_path).unwrap(); s = utils::fs::file_to_string(&chapter_path).unwrap();
assert!(s.contains("<a href=\"en/index.html\">en</a>"));
assert!(s.contains("<a href=\"hu/index.html\">hu</a>")); assert!(does_it_contain(&s, "<a href=\"{}\">en</a>", vec!["en", "index.html"]));
assert!(s.contains("<a href=\"fr/index.html\">fr</a>")); assert!(does_it_contain(&s, "<a href=\"{}\">hu</a>", vec!["hu", "index.html"]));
assert!(does_it_contain(&s, "<a href=\"{}\">fr</a>", vec!["fr", "index.html"]));
// Test if translation links are found // Test if translation links are found
@ -73,21 +89,24 @@ fn it_renders_multilanguage_book() {
chapter_path = book_path.join("rabbit-hole.html"); chapter_path = book_path.join("rabbit-hole.html");
s = utils::fs::file_to_string(&chapter_path).unwrap(); s = utils::fs::file_to_string(&chapter_path).unwrap();
assert!(s.contains("<a href=\"en/rabbit-hole.html\">en</a>"));
assert!(s.contains("<a href=\"hu/nyuszi.html\">hu</a>")); assert!(does_it_contain(&s, "<a href=\"{}\">en</a>", vec!["en", "rabbit-hole.html"]));
assert!(s.contains("<a href=\"fr/terrier.html\">fr</a>")); assert!(does_it_contain(&s, "<a href=\"{}\">hu</a>", vec!["hu", "nyuszi.html"]));
assert!(does_it_contain(&s, "<a href=\"{}\">fr</a>", vec!["fr", "terrier.html"]));
chapter_path = book_path.join("tears.html"); chapter_path = book_path.join("tears.html");
s = utils::fs::file_to_string(&chapter_path).unwrap(); s = utils::fs::file_to_string(&chapter_path).unwrap();
assert!(s.contains("<a href=\"en/tears.html\">en</a>"));
assert!(s.contains("<a href=\"fr/tears.html\">fr</a>")); assert!(does_it_contain(&s, "<a href=\"{}\">en</a>", vec!["en", "tears.html"]));
assert!(s.contains("<a href=\"hu/tears.html\">hu</a>")); assert!(does_it_contain(&s, "<a href=\"{}\">fr</a>", vec!["fr", "tears.html"]));
assert!(does_it_contain(&s, "<a href=\"{}\">hu</a>", vec!["hu", "tears.html"]));
chapter_path = book_path.join("long-tale.html"); chapter_path = book_path.join("long-tale.html");
s = utils::fs::file_to_string(&chapter_path).unwrap(); s = utils::fs::file_to_string(&chapter_path).unwrap();
assert!(s.contains("<a href=\"en/long-tale.html\">en</a>"));
assert!(s.contains("<a href=\"fr/cocasse.html\">fr</a>")); assert!(does_it_contain(&s, "<a href=\"{}\">en</a>", vec!["en", "long-tale.html"]));
assert!(s.contains("<a href=\"hu/tarka-farka.html\">hu</a>")); assert!(does_it_contain(&s, "<a href=\"{}\">fr</a>", vec!["fr", "cocasse.html"]));
assert!(does_it_contain(&s, "<a href=\"{}\">hu</a>", vec!["hu", "tarka-farka.html"]));
// Test if print.html is produced for each translations // Test if print.html is produced for each translations

View File

@ -54,14 +54,11 @@ fn it_copies_local_assets_when_found() {
let path = PathBuf::from(".").join("src").join("tests").join("book-minimal-with-assets"); let path = PathBuf::from(".").join("src").join("tests").join("book-minimal-with-assets");
let renderer = HtmlHandlebars::new(); let renderer = HtmlHandlebars::new();
if let Err(e) = renderer.build(&path, &None) {
println!("{:#?}", e);
}
let mut proj = MDBook::new(&path);
proj.read_config();
proj.parse_books();
let proj = match renderer.build(&path, &None) {
Ok(x) => x,
Err(e) => { panic!("{:#?}", e); },
};
let book_path: &Path = proj.translations.get("en").unwrap().config.get_dest(); let book_path: &Path = proj.translations.get("en").unwrap().config.get_dest();
@ -72,6 +69,8 @@ fn it_copies_local_assets_when_found() {
assert!(s.contains("The Library of Babel")); assert!(s.contains("The Library of Babel"));
assert_eq!(book_path.join("css").join("book.css").exists(), true); assert_eq!(book_path.join("css").join("book.css").exists(), true);
assert_eq!(book_path.join("css").join("highlight.css").exists(), false);
// we left this out from the local assets for testing
assert_eq!(book_path.join("css").join("font-awesome.min.css").exists(), false);
} }

View File

@ -1,5 +1,8 @@
#![cfg(test)] #![cfg(test)]
use std::path::PathBuf;
use book::toc::TocItem;
use parse::summary::parse_level; use parse::summary::parse_level;
#[test] #[test]
@ -29,494 +32,36 @@ fn it_parses_summary_to_tocitems() {
[Contributors](misc/contributors.md) [Contributors](misc/contributors.md)
"#; "#;
let result = parse_level(&mut text.split('\n').collect(), 0, vec![0], true).unwrap(); let result: Vec<TocItem> = parse_level(&mut text.split('\n').collect(), 0, vec![0], true).unwrap();
let expected = r#"[ assert_eq!(result.iter().count(), 7);
Unnumbered(
TocContent {
chapter: Chapter {
title: "Introduction",
content: None,
src_path: Some(
"misc/introduction.md"
),
dest_path: Some(
"index.html"
),
translation_links: None,
translation_id: None,
authors: None,
translators: None,
description: None,
css_class: None
},
sub_items: None,
section: None
}
),
Numbered(
TocContent {
chapter: Chapter {
title: "mdBook",
content: None,
src_path: Some(
"README.md"
),
dest_path: Some(
"README.html"
),
translation_links: None,
translation_id: None,
authors: None,
translators: None,
description: None,
css_class: None
},
sub_items: None,
section: Some(
[
1
]
)
}
),
Numbered(
TocContent {
chapter: Chapter {
title: "Command Line Tool",
content: None,
src_path: Some(
"cli/cli-tool.md"
),
dest_path: Some(
"cli/cli-tool.html"
),
translation_links: None,
translation_id: None,
authors: None,
translators: None,
description: None,
css_class: None
},
sub_items: Some(
[
Numbered(
TocContent {
chapter: Chapter {
title: "init",
content: None,
src_path: Some(
"cli/init.md"
),
dest_path: Some(
"cli/init.html"
),
translation_links: None,
translation_id: None,
authors: None,
translators: None,
description: None,
css_class: None
},
sub_items: None,
section: Some(
[
2,
1
]
)
}
),
Numbered(
TocContent {
chapter: Chapter {
title: "build",
content: None,
src_path: Some(
"cli/build.md"
),
dest_path: Some(
"cli/build.html"
),
translation_links: None,
translation_id: None,
authors: None,
translators: None,
description: None,
css_class: None
},
sub_items: None,
section: Some(
[
2,
2
]
)
}
),
Numbered(
TocContent {
chapter: Chapter {
title: "watch",
content: None,
src_path: Some(
"cli/watch.md"
),
dest_path: Some(
"cli/watch.html"
),
translation_links: None,
translation_id: None,
authors: None,
translators: None,
description: None,
css_class: None
},
sub_items: None,
section: Some(
[
2,
3
]
)
}
),
Numbered(
TocContent {
chapter: Chapter {
title: "serve",
content: None,
src_path: Some(
"cli/serve.md"
),
dest_path: Some(
"cli/serve.html"
),
translation_links: None,
translation_id: None,
authors: None,
translators: None,
description: None,
css_class: None
},
sub_items: None,
section: Some(
[
2,
4
]
)
}
),
Numbered(
TocContent {
chapter: Chapter {
title: "test",
content: None,
src_path: Some(
"cli/test.md"
),
dest_path: Some(
"cli/test.html"
),
translation_links: None,
translation_id: None,
authors: None,
translators: None,
description: None,
css_class: None
},
sub_items: None,
section: Some(
[
2,
5
]
)
}
)
]
),
section: Some(
[
2
]
)
}
),
Numbered(
TocContent {
chapter: Chapter {
title: "Format",
content: None,
src_path: Some(
"format/format.md"
),
dest_path: Some(
"format/format.html"
),
translation_links: None,
translation_id: None,
authors: None,
translators: None,
description: None,
css_class: None
},
sub_items: Some(
[
Numbered(
TocContent {
chapter: Chapter {
title: "SUMMARY.md",
content: None,
src_path: Some(
"format/summary.md"
),
dest_path: Some(
"format/summary.html"
),
translation_links: None,
translation_id: None,
authors: None,
translators: None,
description: None,
css_class: None
},
sub_items: None,
section: Some(
[
3,
1
]
)
}
),
Numbered(
TocContent {
chapter: Chapter {
title: "Configuration",
content: None,
src_path: Some(
"format/config.md"
),
dest_path: Some(
"format/config.html"
),
translation_links: None,
translation_id: None,
authors: None,
translators: None,
description: None,
css_class: None
},
sub_items: None,
section: Some(
[
3,
2
]
)
}
),
Numbered(
TocContent {
chapter: Chapter {
title: "Theme",
content: None,
src_path: Some(
"format/theme/theme.md"
),
dest_path: Some(
"format/theme/theme.html"
),
translation_links: None,
translation_id: None,
authors: None,
translators: None,
description: None,
css_class: None
},
sub_items: Some(
[
Numbered(
TocContent {
chapter: Chapter {
title: "index.hbs",
content: None,
src_path: Some(
"format/theme/index-hbs.md"
),
dest_path: Some(
"format/theme/index-hbs.html"
),
translation_links: None,
translation_id: None,
authors: None,
translators: None,
description: None,
css_class: None
},
sub_items: None,
section: Some(
[
3,
3,
1
]
)
}
),
Numbered(
TocContent {
chapter: Chapter {
title: "Syntax highlighting",
content: None,
src_path: Some(
"format/theme/syntax-highlighting.md"
),
dest_path: Some(
"format/theme/syntax-highlighting.html"
),
translation_links: None,
translation_id: None,
authors: None,
translators: None,
description: None,
css_class: None
},
sub_items: None,
section: Some(
[
3,
3,
2
]
)
}
)
]
),
section: Some(
[
3,
3
]
)
}
),
Numbered(
TocContent {
chapter: Chapter {
title: "MathJax Support",
content: None,
src_path: Some(
"format/mathjax.md"
),
dest_path: Some(
"format/mathjax.html"
),
translation_links: None,
translation_id: None,
authors: None,
translators: None,
description: None,
css_class: None
},
sub_items: None,
section: Some(
[
3,
4
]
)
}
),
Numbered(
TocContent {
chapter: Chapter {
title: "Rust code specific features",
content: None,
src_path: Some(
"format/rust.md"
),
dest_path: Some(
"format/rust.html"
),
translation_links: None,
translation_id: None,
authors: None,
translators: None,
description: None,
css_class: None
},
sub_items: None,
section: Some(
[
3,
5
]
)
}
)
]
),
section: Some(
[
3
]
)
}
),
Numbered(
TocContent {
chapter: Chapter {
title: "Rust Library",
content: None,
src_path: Some(
"lib/lib.md"
),
dest_path: Some(
"lib/lib.html"
),
translation_links: None,
translation_id: None,
authors: None,
translators: None,
description: None,
css_class: None
},
sub_items: None,
section: Some(
[
4
]
)
}
),
Spacer,
Unnumbered(
TocContent {
chapter: Chapter {
title: "Contributors",
content: None,
src_path: Some(
"misc/contributors.md"
),
dest_path: Some(
"misc/contributors.html"
),
translation_links: None,
translation_id: None,
authors: None,
translators: None,
description: None,
css_class: None
},
sub_items: None,
section: None
}
)
]"#;
assert_eq!(expected, format!("{:#?}", result)); {
let a = match result[0].clone() {
TocItem::Unnumbered(x) => x,
_ => { panic!("{:#?}", result[0]); },
};
assert_eq!(a.chapter.title, "Introduction".to_string());
assert_eq!(a.chapter.get_src_path().unwrap().as_os_str(),
PathBuf::from("misc").join("introduction.md").as_os_str());
}
{
let a = match result[2].clone() {
TocItem::Numbered(x) => x,
_ => { panic!("{:#?}", result[0]); },
};
assert_eq!(a.chapter.title, "Command Line Tool".to_string());
assert_eq!(a.chapter.get_src_path().unwrap().as_os_str(),
PathBuf::from("cli").join("cli-tool.md").as_os_str());
let b = match a.sub_items {
Some(x) => x,
None => { panic!("No sub items! {:#?}", a); }
};
assert_eq!(b.iter().count(), 5);
}
} }