Migrate check_link_target_js to BookTest
This commit is contained in:
parent
20f71af4cb
commit
5f2453e446
2 changed files with 16 additions and 38 deletions
|
|
@ -120,28 +120,6 @@ fn entry_ends_with(entry: &DirEntry, ending: &str) -> bool {
|
||||||
entry.file_name().to_string_lossy().ends_with(ending)
|
entry.file_name().to_string_lossy().ends_with(ending)
|
||||||
}
|
}
|
||||||
|
|
||||||
/// Read the TOC (`book/toc.js`) nested HTML and expose it as a DOM which we
|
|
||||||
/// can search with the `select` crate
|
|
||||||
fn toc_js_html() -> Result<Document> {
|
|
||||||
let temp = DummyBook::new()
|
|
||||||
.build()
|
|
||||||
.with_context(|| "Couldn't create the dummy book")?;
|
|
||||||
MDBook::load(temp.path())?
|
|
||||||
.build()
|
|
||||||
.with_context(|| "Book building failed")?;
|
|
||||||
|
|
||||||
let toc_path = temp.path().join("book").join("toc.js");
|
|
||||||
let html = fs::read_to_string(toc_path).with_context(|| "Unable to read index.html")?;
|
|
||||||
for line in html.lines() {
|
|
||||||
if let Some(left) = line.strip_prefix(" this.innerHTML = '") {
|
|
||||||
if let Some(html) = left.strip_suffix("';") {
|
|
||||||
return Ok(Document::from(html));
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
panic!("cannot find toc in file")
|
|
||||||
}
|
|
||||||
|
|
||||||
/// Read the TOC fallback (`book/toc.html`) HTML and expose it as a DOM which we
|
/// Read the TOC fallback (`book/toc.html`) HTML and expose it as a DOM which we
|
||||||
/// can search with the `select` crate
|
/// can search with the `select` crate
|
||||||
fn toc_fallback_html() -> Result<Document> {
|
fn toc_fallback_html() -> Result<Document> {
|
||||||
|
|
@ -157,21 +135,6 @@ fn toc_fallback_html() -> Result<Document> {
|
||||||
Ok(Document::from(html.as_str()))
|
Ok(Document::from(html.as_str()))
|
||||||
}
|
}
|
||||||
|
|
||||||
// don't use target="_parent" in JS
|
|
||||||
#[test]
|
|
||||||
fn check_link_target_js() {
|
|
||||||
let doc = toc_js_html().unwrap();
|
|
||||||
|
|
||||||
let num_parent_links = doc
|
|
||||||
.find(
|
|
||||||
Class("chapter")
|
|
||||||
.descendant(Name("li"))
|
|
||||||
.descendant(Name("a").and(Attr("target", "_parent"))),
|
|
||||||
)
|
|
||||||
.count();
|
|
||||||
assert_eq!(num_parent_links, 0);
|
|
||||||
}
|
|
||||||
|
|
||||||
// don't use target="_parent" in IFRAME
|
// don't use target="_parent" in IFRAME
|
||||||
#[test]
|
#[test]
|
||||||
fn check_link_target_fallback() {
|
fn check_link_target_fallback() {
|
||||||
|
|
|
||||||
|
|
@ -2,7 +2,7 @@
|
||||||
|
|
||||||
use crate::prelude::*;
|
use crate::prelude::*;
|
||||||
use select::document::Document;
|
use select::document::Document;
|
||||||
use select::predicate::{Class, Name, Predicate};
|
use select::predicate::{Attr, Class, Name, Predicate};
|
||||||
|
|
||||||
const TOC_TOP_LEVEL: &[&str] = &[
|
const TOC_TOP_LEVEL: &[&str] = &[
|
||||||
"1. With Readme",
|
"1. With Readme",
|
||||||
|
|
@ -95,3 +95,18 @@ fn check_spacers() {
|
||||||
.count();
|
.count();
|
||||||
assert_eq!(num_spacers, should_be);
|
assert_eq!(num_spacers, should_be);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// don't use target="_parent" in JS
|
||||||
|
#[test]
|
||||||
|
fn check_link_target_js() {
|
||||||
|
let doc = toc_js_html();
|
||||||
|
|
||||||
|
let num_parent_links = doc
|
||||||
|
.find(
|
||||||
|
Class("chapter")
|
||||||
|
.descendant(Name("li"))
|
||||||
|
.descendant(Name("a").and(Attr("target", "_parent"))),
|
||||||
|
)
|
||||||
|
.count();
|
||||||
|
assert_eq!(num_parent_links, 0);
|
||||||
|
}
|
||||||
|
|
|
||||||
Loading…
Add table
Reference in a new issue