From 7bc7306afb89738f56c7a847ab5e1bfbc1bf7c20 Mon Sep 17 00:00:00 2001 From: Max Brunsfeld Date: Fri, 10 May 2019 14:38:43 -0700 Subject: [PATCH] Add a unit test for local variable tracking in syntax highlighting --- cli/src/tests/highlight_test.rs | 61 +++++++++++++++++++++++++++++++++ 1 file changed, 61 insertions(+) diff --git a/cli/src/tests/highlight_test.rs b/cli/src/tests/highlight_test.rs index c2f5924c..2da9bcf1 100644 --- a/cli/src/tests/highlight_test.rs +++ b/cli/src/tests/highlight_test.rs @@ -152,6 +152,67 @@ fn test_highlighting_multiline_nodes_to_html() { ); } +#[test] +fn test_highlighting_with_local_variable_tracking() { + let source = vec![ + "module.exports = function a(b) {", + " const module = c;", + " console.log(module, b);", + "}", + "", + ] + .join("\n"); + + assert_eq!( + &to_token_vector(&source, get_language("javascript"), &JS_SHEET).unwrap(), + &[ + vec![ + ("module", vec![Highlight::VariableBuiltin]), + (".", vec![Highlight::PunctuationDelimiter]), + ("exports", vec![Highlight::Property]), + (" ", vec![]), + ("=", vec![Highlight::Operator]), + (" ", vec![]), + ("function", vec![Highlight::Keyword]), + (" ", vec![]), + ("a", vec![Highlight::Function]), + ("(", vec![Highlight::PunctuationBracket]), + ("b", vec![Highlight::VariableParameter]), + (")", vec![Highlight::PunctuationBracket]), + (" ", vec![]), + ("{", vec![Highlight::PunctuationBracket]) + ], + vec![ + (" ", vec![]), + ("const", vec![Highlight::Keyword]), + (" ", vec![]), + ("module", vec![Highlight::Variable]), + (" ", vec![]), + ("=", vec![Highlight::Operator]), + (" ", vec![]), + ("c", vec![Highlight::Variable]), + (";", vec![Highlight::PunctuationDelimiter]) + ], + vec![ + (" ", vec![]), + ("console", vec![Highlight::VariableBuiltin]), + (".", vec![Highlight::PunctuationDelimiter]), + ("log", vec![Highlight::Function]), + ("(", vec![Highlight::PunctuationBracket]), + // Not a builtin, because `module` was defined as a variable above. + ("module", vec![Highlight::Variable]), + (",", vec![Highlight::PunctuationDelimiter]), + (" ", vec![]), + // A parameter, because `b` was defined as a parameter above. + ("b", vec![Highlight::VariableParameter]), + (")", vec![Highlight::PunctuationBracket]), + (";", vec![Highlight::PunctuationDelimiter]), + ("}", vec![Highlight::PunctuationBracket]) + ] + ], + ); +} + #[test] fn test_highlighting_empty_lines() { let source = vec![