package com.github.sommeri.less4j.compiler; import static org.junit.Assert.fail; import java.util.ArrayList; import java.util.Arrays; import java.util.List; import java.util.Set; import org.junit.Test; import com.github.sommeri.less4j.core.parser.LessParser; public class TokenNamesForErrorReportingTest { private static final List<String> TECHNICAL_ANTLR = Arrays.asList("<invalid>", "<EOR>", "<DOWN>", "<UP>"); private static final List<String> FICTIONAL = Arrays.asList("IMPORT_OPTIONS", "ARGUMENT_DECLARATION", "VARIABLE_DECLARATION", "ARGUMENT_COLLECTOR", "EXPRESSION", "DECLARATION", "VARIABLE_REFERENCE", "RULESET", "NESTED_APPENDER", "EXTENDED_SELECTOR", "SELECTOR", "SIMPLE_SELECTOR", "ESCAPED_SELECTOR", "EXPRESSION_PARENTHESES", "ESCAPED_VALUE", "STYLE_SHEET", "EMPTY_SEPARATOR", "ELEMENT_NAME", "CSS_CLASS", "NTH", "PSEUDO", "ATTRIBUTE", "ID_SELECTOR", "ELEMENT_SUBSEQUENT", "CHARSET_DECLARATION", "TERM_FUNCTION", "TERM", "MEDIUM_DECLARATION", "FIXED_MEDIA_EXPRESSION", "MEDIA_QUERY", "MEDIUM_TYPE", "BODY", "MIXIN_REFERENCE", "NAMESPACE_REFERENCE", "REUSABLE_STRUCTURE", "MIXIN_PATTERN", "GUARD_IN_PARENTHESIS", "GUARD_CONDITION", "GUARD", "DUMMY_MEANINGFULL_WHITESPACE", "KEYFRAMES", "DOCUMENT_DECLARATION", "REUSABLE_STRUCTURE_NAME", "VIEWPORT"); private static final List<String> TECHNICAL_LESS4J = Arrays.asList("COMMENT_CONTENT", "SEMI_SPLIT_MIXIN_DECLARATION_ARGUMENTS", "SEMI_SPLIT_MIXIN_REFERENCE_ARGUMENTS", "UNICODE_RANGE_HEX","TERM_FUNCTION_NAME", "NMSTART", "NMCHAR", "NAME", "A", "B", "C", "D", "E", "F", "G", "H", "I", "J", "K", "L", "M", "N", "O", "P", "Q", "R", "S", "T", "U", "V", "W", "X", "Y", "Z"); @Test public void allReevantTokensHaveNames() { String[] tokenNames = LessParser.tokenNames; Set<String> coveredTokens = LessParser.ALTERNATIVE_NAMES_FOR_ERROR_REPORTING.keySet(); List<String> missing = new ArrayList<String>(Arrays.asList(tokenNames)); missing.removeAll(coveredTokens); missing.removeAll(TECHNICAL_ANTLR); missing.removeAll(FICTIONAL); missing.removeAll(TECHNICAL_LESS4J); if (!missing.isEmpty()) { for (String string : missing) { System.err.println(string); } fail("Some tokens are missing alternative error names."); } } @Test public void noOldTokensRenaimedNames() { String[] tokenNames = LessParser.tokenNames; Set<String> coveredTokens = LessParser.ALTERNATIVE_NAMES_FOR_ERROR_REPORTING.keySet(); List<String> additional = new ArrayList<String>(coveredTokens); additional.removeAll(Arrays.asList(tokenNames)); if (!additional.isEmpty()) { for (String string : additional) { System.err.println(string); } fail("Removed tokens remained in alternatives names set."); } } }