use oak_markdown::{MarkdownLanguage, MarkdownLexer};
#[test]
fn test_feature_flags() {
let mut config = MarkdownLanguage::default();
let source = "$a^2 + b^2 = c^2$";
config.allow_math = true;
let lexer = MarkdownLexer::new(&config);
let tokens = lexer.lex_internal(&source);
assert!(tokens.result.as_ref().unwrap().iter().any(|t| t.kind == oak_markdown::MarkdownTokenType::MathInline));
config.allow_math = false;
let lexer = MarkdownLexer::new(&config);
let tokens = lexer.lex_internal(&source);
assert!(!tokens.result.as_ref().unwrap().iter().any(|t| t.kind == oak_markdown::MarkdownTokenType::MathInline))
}
#[test]
fn test_front_matter() {
let mut config = MarkdownLanguage::default();
let source = "---\ntitle: test\n---\nContent";
config.allow_front_matter = true;
let lexer = MarkdownLexer::new(&config);
let tokens = lexer.lex_internal(&source);
assert!(tokens.result.as_ref().unwrap().iter().any(|t| t.kind == oak_markdown::MarkdownTokenType::FrontMatter));
config.allow_front_matter = false;
let lexer = MarkdownLexer::new(&config);
let tokens = lexer.lex_internal(&source);
assert!(!tokens.result.as_ref().unwrap().iter().any(|t| t.kind == oak_markdown::MarkdownTokenType::FrontMatter))
}
#[test]
fn test_footnotes() {
let mut config = MarkdownLanguage::default();
let source = "Refer[^1]\n\n[^1]: Note";
config.allow_footnotes = true;
let lexer = MarkdownLexer::new(&config);
let tokens = lexer.lex_internal(&source);
assert!(tokens.result.as_ref().unwrap().iter().any(|t| t.kind == oak_markdown::MarkdownTokenType::FootnoteReference));
assert!(tokens.result.as_ref().unwrap().iter().any(|t| t.kind == oak_markdown::MarkdownTokenType::FootnoteDefinition));
config.allow_footnotes = false;
let lexer = MarkdownLexer::new(&config);
let tokens = lexer.lex_internal(&source);
assert!(!tokens.result.as_ref().unwrap().iter().any(|t| t.kind == oak_markdown::MarkdownTokenType::FootnoteReference))
}
#[test]
fn test_indented_code_blocks() {
let mut config = MarkdownLanguage::default();
let source = " code block";
config.allow_indented_code_blocks = true;
let lexer = MarkdownLexer::new(&config);
let tokens = lexer.lex_internal(&source);
assert!(tokens.result.as_ref().unwrap().iter().any(|t| t.kind == oak_markdown::MarkdownTokenType::CodeBlock));
config.allow_indented_code_blocks = false;
let lexer = MarkdownLexer::new(&config);
let tokens = lexer.lex_internal(&source);
assert!(!tokens.result.as_ref().unwrap().iter().any(|t| t.kind == oak_markdown::MarkdownTokenType::CodeBlock))
}
#[test]
fn test_headings() {
let mut config = MarkdownLanguage::default();
let source = "# Heading";
config.allow_headings = true;
let lexer = MarkdownLexer::new(&config);
let tokens = lexer.lex_internal(&source);
assert!(tokens.result.as_ref().unwrap().iter().any(|t| matches!(t.kind, oak_markdown::MarkdownTokenType::Heading1)));
config.allow_headings = false;
let lexer = MarkdownLexer::new(&config);
let tokens = lexer.lex_internal(&source);
assert!(!tokens.result.as_ref().unwrap().iter().any(|t| matches!(t.kind, oak_markdown::MarkdownTokenType::Heading1)))
}
#[test]
fn test_blockquotes() {
let mut config = MarkdownLanguage::default();
let source = "> Quote";
config.allow_blockquotes = true;
let lexer = MarkdownLexer::new(&config);
let tokens = lexer.lex_internal(&source);
assert!(tokens.result.as_ref().unwrap().iter().any(|t| t.kind == oak_markdown::MarkdownTokenType::BlockquoteMarker));
config.allow_blockquotes = false;
let lexer = MarkdownLexer::new(&config);
let tokens = lexer.lex_internal(&source);
assert!(!tokens.result.as_ref().unwrap().iter().any(|t| t.kind == oak_markdown::MarkdownTokenType::BlockquoteMarker))
}
#[test]
fn test_html_tags() {
let mut config = MarkdownLanguage::default();
let source = "<div>content</div>";
config.allow_html = true;
let lexer = MarkdownLexer::new(&config);
let tokens = lexer.lex_internal(&source);
assert!(tokens.result.as_ref().unwrap().iter().any(|t| t.kind == oak_markdown::MarkdownTokenType::HtmlTag));
config.allow_html = false;
let lexer = MarkdownLexer::new(&config);
let tokens = lexer.lex_internal(&source);
assert!(!tokens.result.as_ref().unwrap().iter().any(|t| t.kind == oak_markdown::MarkdownTokenType::HtmlTag))
}
#[test]
fn test_xml_tags() {
let mut config = MarkdownLanguage::default();
let source = "<xml>content</xml>";
config.allow_html = false;
config.allow_xml = true;
let lexer = MarkdownLexer::new(&config);
let tokens = lexer.lex_internal(&source);
assert!(tokens.result.as_ref().unwrap().iter().any(|t| t.kind == oak_markdown::MarkdownTokenType::XmlTag));
config.allow_xml = false;
let lexer = MarkdownLexer::new(&config);
let tokens = lexer.lex_internal(&source);
assert!(!tokens.result.as_ref().unwrap().iter().any(|t| t.kind == oak_markdown::MarkdownTokenType::XmlTag))
}