diff --git a/test/com/google/javascript/jscomp/AggressiveInlineAliasesTest.java b/test/com/google/javascript/jscomp/AggressiveInlineAliasesTest.java index bea2bbf405b..a0809408993 100644 --- a/test/com/google/javascript/jscomp/AggressiveInlineAliasesTest.java +++ b/test/com/google/javascript/jscomp/AggressiveInlineAliasesTest.java @@ -41,7 +41,8 @@ protected CompilerPass getProcessor(Compiler compiler) { } @Override - public void setUp() { + protected void setUp() throws Exception { + super.setUp(); enableNormalize(); } @@ -450,8 +451,6 @@ public void testGlobalWriteToNonAncestor() { } public void testInlineCtorInObjLit() { - compareJsDoc = true; - test( LINE_JOINER.join("function Foo() {}", "var Bar = Foo;", "var objlit = { 'prop' : Bar };"), LINE_JOINER.join("function Foo() {}", "var Bar = null;", "var objlit = { 'prop': Foo };")); diff --git a/test/com/google/javascript/jscomp/AmbiguatePropertiesTest.java b/test/com/google/javascript/jscomp/AmbiguatePropertiesTest.java index 8298adfcc06..f847dd161af 100644 --- a/test/com/google/javascript/jscomp/AmbiguatePropertiesTest.java +++ b/test/com/google/javascript/jscomp/AmbiguatePropertiesTest.java @@ -39,6 +39,11 @@ public final class AmbiguatePropertiesTest extends CompilerTestCase { public AmbiguatePropertiesTest() { super(EXTERNS); + } + + @Override + protected void setUp() throws Exception { + super.setUp(); enableNormalize(); enableTypeCheck(); enableClosurePass(); diff --git a/test/com/google/javascript/jscomp/AngularPassTest.java b/test/com/google/javascript/jscomp/AngularPassTest.java index 85f4b50f726..db8358d2839 100644 --- a/test/com/google/javascript/jscomp/AngularPassTest.java +++ b/test/com/google/javascript/jscomp/AngularPassTest.java @@ -24,7 +24,8 @@ public final class AngularPassTest extends CompilerTestCase { @Override - public void setUp() { + protected void setUp() throws Exception { + super.setUp(); setAcceptedLanguage(LanguageMode.ECMASCRIPT_2017); } diff --git a/test/com/google/javascript/jscomp/AstValidatorTest.java b/test/com/google/javascript/jscomp/AstValidatorTest.java index 318379a05c3..1f2c2f8363a 100644 --- a/test/com/google/javascript/jscomp/AstValidatorTest.java +++ b/test/com/google/javascript/jscomp/AstValidatorTest.java @@ -53,10 +53,10 @@ protected int getNumRepetitions() { @Override protected void setUp() throws Exception { - super.enableAstValidation(false); - super.disableNormalize(); - super.enableLineNumberCheck(false); super.setUp(); + disableAstValidation(); + disableNormalize(); + disableLineNumberCheck(); } public void testForIn() { diff --git a/test/com/google/javascript/jscomp/CheckAccessControlsPolymerTest.java b/test/com/google/javascript/jscomp/CheckAccessControlsPolymerTest.java index d33ca9ed5d8..ad43b65c53b 100644 --- a/test/com/google/javascript/jscomp/CheckAccessControlsPolymerTest.java +++ b/test/com/google/javascript/jscomp/CheckAccessControlsPolymerTest.java @@ -31,9 +31,14 @@ public final class CheckAccessControlsPolymerTest extends TypeICompilerTestCase public CheckAccessControlsPolymerTest() { super(EXTERNS); - parseTypeInfo = true; + } + + @Override + protected void setUp() throws Exception { + super.setUp(); + enableParseTypeInfo(); enablePolymerPass(); - allowExternsChanges(true); + allowExternsChanges(); } @Override diff --git a/test/com/google/javascript/jscomp/CheckAccessControlsTest.java b/test/com/google/javascript/jscomp/CheckAccessControlsTest.java index 0c2d8f0c7f2..06d1fa198e1 100644 --- a/test/com/google/javascript/jscomp/CheckAccessControlsTest.java +++ b/test/com/google/javascript/jscomp/CheckAccessControlsTest.java @@ -55,7 +55,12 @@ public final class CheckAccessControlsTest extends TypeICompilerTestCase { public CheckAccessControlsTest() { super(CompilerTypeTestCase.DEFAULT_EXTERNS); - parseTypeInfo = true; + } + + @Override + protected void setUp() throws Exception { + super.setUp(); + enableParseTypeInfo(); enableClosurePass(); enableRewriteClosureCode(); } diff --git a/test/com/google/javascript/jscomp/CheckConformanceTest.java b/test/com/google/javascript/jscomp/CheckConformanceTest.java index 0852093059f..be5efba4a98 100644 --- a/test/com/google/javascript/jscomp/CheckConformanceTest.java +++ b/test/com/google/javascript/jscomp/CheckConformanceTest.java @@ -70,18 +70,18 @@ public final class CheckConformanceTest extends TypeICompilerTestCase { "}"); public CheckConformanceTest() { - super(EXTERNS, true); - enableTranspile(); - enableClosurePass(); - enableClosurePassForExpected(); - enableRewriteClosureCode(); - setLanguage(LanguageMode.ECMASCRIPT_2015, LanguageMode.ECMASCRIPT5_STRICT); + super(EXTERNS); } @Override protected void setUp() throws Exception { super.setUp(); - super.enableClosurePass(); + enableTranspile(); + enableClosurePass(); + enableClosurePassForExpected(); + enableRewriteClosureCode(); + setLanguage(LanguageMode.ECMASCRIPT_2015, LanguageMode.ECMASCRIPT5_STRICT); + enableClosurePass(); configuration = DEFAULT_CONFORMANCE; ignoreWarnings(DiagnosticGroups.MISSING_PROPERTIES); } diff --git a/test/com/google/javascript/jscomp/CheckGlobalNamesTest.java b/test/com/google/javascript/jscomp/CheckGlobalNamesTest.java index 65676e97a83..c2ebbf22ee5 100644 --- a/test/com/google/javascript/jscomp/CheckGlobalNamesTest.java +++ b/test/com/google/javascript/jscomp/CheckGlobalNamesTest.java @@ -66,7 +66,8 @@ public void process(Node externs, Node js) { } @Override - public void setUp() { + protected void setUp() throws Exception { + super.setUp(); injectNamespace = false; setAcceptedLanguage(LanguageMode.ECMASCRIPT_2015); } diff --git a/test/com/google/javascript/jscomp/CheckGlobalThisTest.java b/test/com/google/javascript/jscomp/CheckGlobalThisTest.java index 5ef10b6ad99..3c8021c6b4a 100644 --- a/test/com/google/javascript/jscomp/CheckGlobalThisTest.java +++ b/test/com/google/javascript/jscomp/CheckGlobalThisTest.java @@ -22,8 +22,11 @@ * Tests {@link CheckGlobalThis}. */ public final class CheckGlobalThisTest extends CompilerTestCase { - public CheckGlobalThisTest() { - this.parseTypeInfo = true; + + @Override + protected void setUp() throws Exception { + super.setUp(); + enableParseTypeInfo(); } @Override diff --git a/test/com/google/javascript/jscomp/CheckJsDocTest.java b/test/com/google/javascript/jscomp/CheckJsDocTest.java index f3fd5684dc0..ece129f131f 100644 --- a/test/com/google/javascript/jscomp/CheckJsDocTest.java +++ b/test/com/google/javascript/jscomp/CheckJsDocTest.java @@ -41,7 +41,8 @@ protected CompilerPass getProcessor(final Compiler compiler) { } @Override - public void setUp() { + protected void setUp() throws Exception { + super.setUp(); setAcceptedLanguage(LanguageMode.ECMASCRIPT_2017); } diff --git a/test/com/google/javascript/jscomp/CheckMissingGetCssNameTest.java b/test/com/google/javascript/jscomp/CheckMissingGetCssNameTest.java index d973ec1262e..27e9b327356 100644 --- a/test/com/google/javascript/jscomp/CheckMissingGetCssNameTest.java +++ b/test/com/google/javascript/jscomp/CheckMissingGetCssNameTest.java @@ -30,7 +30,8 @@ protected CompilerPass getProcessor(final Compiler compiler) { } @Override - public void setUp() { + protected void setUp() throws Exception { + super.setUp(); setAcceptedLanguage(LanguageMode.ECMASCRIPT_2017); } diff --git a/test/com/google/javascript/jscomp/CheckMissingReturnTest.java b/test/com/google/javascript/jscomp/CheckMissingReturnTest.java index 82fd4cde3c8..26eddce8b53 100644 --- a/test/com/google/javascript/jscomp/CheckMissingReturnTest.java +++ b/test/com/google/javascript/jscomp/CheckMissingReturnTest.java @@ -24,7 +24,9 @@ */ public final class CheckMissingReturnTest extends CompilerTestCase { - public CheckMissingReturnTest() { + @Override + protected void setUp() throws Exception { + super.setUp(); enableTypeCheck(); } diff --git a/test/com/google/javascript/jscomp/CheckMissingSuperTest.java b/test/com/google/javascript/jscomp/CheckMissingSuperTest.java index 9eb4b1712c1..e3ee738a02a 100644 --- a/test/com/google/javascript/jscomp/CheckMissingSuperTest.java +++ b/test/com/google/javascript/jscomp/CheckMissingSuperTest.java @@ -27,7 +27,8 @@ protected CompilerPass getProcessor(Compiler compiler) { } @Override - public void setUp() { + protected void setUp() throws Exception { + super.setUp(); setAcceptedLanguage(LanguageMode.ECMASCRIPT_2017); } diff --git a/test/com/google/javascript/jscomp/CheckProvidesTest.java b/test/com/google/javascript/jscomp/CheckProvidesTest.java index 2f31708c799..00fd1a52e2a 100644 --- a/test/com/google/javascript/jscomp/CheckProvidesTest.java +++ b/test/com/google/javascript/jscomp/CheckProvidesTest.java @@ -25,7 +25,8 @@ */ public final class CheckProvidesTest extends CompilerTestCase { @Override - public void setUp() { + protected void setUp() throws Exception { + super.setUp(); setAcceptedLanguage(LanguageMode.ECMASCRIPT_2017); } diff --git a/test/com/google/javascript/jscomp/CheckRegExpTest.java b/test/com/google/javascript/jscomp/CheckRegExpTest.java index 4ede584da8d..3d6cb02f7c3 100644 --- a/test/com/google/javascript/jscomp/CheckRegExpTest.java +++ b/test/com/google/javascript/jscomp/CheckRegExpTest.java @@ -25,7 +25,7 @@ public final class CheckRegExpTest extends CompilerTestCase { CheckRegExp last = null; public CheckRegExpTest() { - super("var RegExp;", true); + super("var RegExp;"); } @Override diff --git a/test/com/google/javascript/jscomp/CheckSideEffectsTest.java b/test/com/google/javascript/jscomp/CheckSideEffectsTest.java index 6543a081257..2b49ad1565d 100644 --- a/test/com/google/javascript/jscomp/CheckSideEffectsTest.java +++ b/test/com/google/javascript/jscomp/CheckSideEffectsTest.java @@ -19,15 +19,13 @@ import com.google.javascript.jscomp.CompilerOptions.LanguageMode; public final class CheckSideEffectsTest extends CompilerTestCase { - public CheckSideEffectsTest() { - this.parseTypeInfo = true; - allowExternsChanges(true); - } @Override - public void setUp() throws Exception { + protected void setUp() throws Exception { super.setUp(); setAcceptedLanguage(LanguageMode.ECMASCRIPT_2017); + enableParseTypeInfo(); + allowExternsChanges(); } @Override diff --git a/test/com/google/javascript/jscomp/CheckSuspiciousCodeTest.java b/test/com/google/javascript/jscomp/CheckSuspiciousCodeTest.java index 00e88304ba5..e091126d34e 100644 --- a/test/com/google/javascript/jscomp/CheckSuspiciousCodeTest.java +++ b/test/com/google/javascript/jscomp/CheckSuspiciousCodeTest.java @@ -22,9 +22,6 @@ * Tests for CheckSuspiciousCode */ public final class CheckSuspiciousCodeTest extends CompilerTestCase { - public CheckSuspiciousCodeTest() { - this.parseTypeInfo = true; - } @Override protected CompilerPass getProcessor(Compiler compiler) { @@ -33,8 +30,10 @@ protected CompilerPass getProcessor(Compiler compiler) { } @Override - public void setUp() { + protected void setUp() throws Exception { + super.setUp(); setAcceptedLanguage(LanguageMode.ECMASCRIPT_2017); + enableParseTypeInfo(); } @Override diff --git a/test/com/google/javascript/jscomp/CheckTemplateParamsTest.java b/test/com/google/javascript/jscomp/CheckTemplateParamsTest.java index d8ddee78970..a6d15acb431 100644 --- a/test/com/google/javascript/jscomp/CheckTemplateParamsTest.java +++ b/test/com/google/javascript/jscomp/CheckTemplateParamsTest.java @@ -17,7 +17,6 @@ package com.google.javascript.jscomp; import com.google.javascript.rhino.Node; -import java.io.IOException; /** * Tests for the "Too many template parameters" warning. Ideally this would be part of @@ -26,7 +25,8 @@ */ public final class CheckTemplateParamsTest extends CompilerTestCase { @Override - public void setUp() throws IOException { + protected void setUp() throws Exception { + super.setUp(); enableTypeCheck(); } diff --git a/test/com/google/javascript/jscomp/CheckUnreachableCodeTest.java b/test/com/google/javascript/jscomp/CheckUnreachableCodeTest.java index c564b47651e..0ea7fc2b23e 100644 --- a/test/com/google/javascript/jscomp/CheckUnreachableCodeTest.java +++ b/test/com/google/javascript/jscomp/CheckUnreachableCodeTest.java @@ -30,7 +30,8 @@ protected CompilerPass getProcessor(Compiler compiler) { } @Override - public void setUp() { + public void setUp() throws Exception { + super.setUp(); setAcceptedLanguage(LanguageMode.ECMASCRIPT_2017); } diff --git a/test/com/google/javascript/jscomp/CheckUnusedPrivatePropertiesInPolymerElementTest.java b/test/com/google/javascript/jscomp/CheckUnusedPrivatePropertiesInPolymerElementTest.java index 2c0d47a9ba1..65a85120a1d 100644 --- a/test/com/google/javascript/jscomp/CheckUnusedPrivatePropertiesInPolymerElementTest.java +++ b/test/com/google/javascript/jscomp/CheckUnusedPrivatePropertiesInPolymerElementTest.java @@ -34,13 +34,13 @@ public final class CheckUnusedPrivatePropertiesInPolymerElementTest public CheckUnusedPrivatePropertiesInPolymerElementTest() { super(EXTERNS); - enableGatherExternProperties(); - setAcceptedLanguage(LanguageMode.ECMASCRIPT_NEXT); } @Override protected void setUp() throws Exception { super.setUp(); + enableGatherExternProperties(); + setAcceptedLanguage(LanguageMode.ECMASCRIPT_NEXT); } @Override @@ -71,7 +71,7 @@ protected int getNumRepetitions() { } public void testPolymerPropertyUsedAsObserver1() { - allowExternsChanges(true); + allowExternsChanges(); testNoWarning( LINE_JOINER.join( "Polymer({", @@ -89,7 +89,7 @@ public void testPolymerPropertyUsedAsObserver1() { } public void testPolymerPropertyUsedAsObserver2() { - allowExternsChanges(true); + allowExternsChanges(); testNoWarning( LINE_JOINER.join( "Polymer({", @@ -107,7 +107,7 @@ public void testPolymerPropertyUsedAsObserver2() { } public void testBehaviorPropertyUsedAsObserver() { - allowExternsChanges(true); + allowExternsChanges(); test( new String[] { LINE_JOINER.join( diff --git a/test/com/google/javascript/jscomp/CheckUnusedPrivatePropertiesTest.java b/test/com/google/javascript/jscomp/CheckUnusedPrivatePropertiesTest.java index 7f43301abbd..399a76ae3b5 100644 --- a/test/com/google/javascript/jscomp/CheckUnusedPrivatePropertiesTest.java +++ b/test/com/google/javascript/jscomp/CheckUnusedPrivatePropertiesTest.java @@ -40,6 +40,11 @@ public final class CheckUnusedPrivatePropertiesTest extends TypeICompilerTestCas public CheckUnusedPrivatePropertiesTest() { super(EXTERNS); + } + + @Override + protected void setUp() throws Exception { + super.setUp(); enableGatherExternProperties(); setAcceptedLanguage(LanguageMode.ECMASCRIPT_2015); } diff --git a/test/com/google/javascript/jscomp/ClosureCheckModuleTest.java b/test/com/google/javascript/jscomp/ClosureCheckModuleTest.java index bc8aabad993..48528993bff 100644 --- a/test/com/google/javascript/jscomp/ClosureCheckModuleTest.java +++ b/test/com/google/javascript/jscomp/ClosureCheckModuleTest.java @@ -42,7 +42,8 @@ protected CompilerPass getProcessor(Compiler compiler) { } @Override - public void setUp() { + protected void setUp() throws Exception { + super.setUp(); setLanguage(LanguageMode.ECMASCRIPT_NEXT, LanguageMode.ECMASCRIPT_NEXT); } diff --git a/test/com/google/javascript/jscomp/ClosureRewriteClassTest.java b/test/com/google/javascript/jscomp/ClosureRewriteClassTest.java index 880e4d68a8d..6951014a00a 100644 --- a/test/com/google/javascript/jscomp/ClosureRewriteClassTest.java +++ b/test/com/google/javascript/jscomp/ClosureRewriteClassTest.java @@ -54,8 +54,7 @@ protected CompilerPass getProcessor(Compiler compiler) { protected void setUp() throws Exception { super.setUp(); disableTypeCheck(); - runTypeCheckAfterProcessing = true; - compareJsDoc = true; + enableRunTypeCheckAfterProcessing(); } @Override diff --git a/test/com/google/javascript/jscomp/ClosureRewriteModuleTest.java b/test/com/google/javascript/jscomp/ClosureRewriteModuleTest.java index f48c5d4bd30..1eead50e5d2 100644 --- a/test/com/google/javascript/jscomp/ClosureRewriteModuleTest.java +++ b/test/com/google/javascript/jscomp/ClosureRewriteModuleTest.java @@ -51,7 +51,8 @@ protected int getNumRepetitions() { } @Override - public void setUp() { + protected void setUp() throws Exception { + super.setUp(); setAcceptedLanguage(LanguageMode.ECMASCRIPT_2017); } @@ -104,7 +105,7 @@ public void testBasic3() { } public void testIjsModule() { - allowExternsChanges(true); + allowExternsChanges(); test( // .i.js file "goog.module('external'); /** @constructor */ exports = function() {};", @@ -2129,7 +2130,7 @@ public void testMultiplyExportedSymbolDoesntCrash() { } public void testIjsFileInExterns() { - allowExternsChanges(true); + allowExternsChanges(); test( LINE_JOINER.join( "/** @externs */", diff --git a/test/com/google/javascript/jscomp/CoalesceVariableNamesTest.java b/test/com/google/javascript/jscomp/CoalesceVariableNamesTest.java index 58791940227..fca09af5998 100644 --- a/test/com/google/javascript/jscomp/CoalesceVariableNamesTest.java +++ b/test/com/google/javascript/jscomp/CoalesceVariableNamesTest.java @@ -34,7 +34,8 @@ protected int getNumRepetitions() { } @Override - public void setUp() { + protected void setUp() throws Exception { + super.setUp(); usePseudoName = false; } diff --git a/test/com/google/javascript/jscomp/CodePrinterEs6TypedTest.java b/test/com/google/javascript/jscomp/CodePrinterEs6TypedTest.java index e7c4b13602a..f1729ba0087 100644 --- a/test/com/google/javascript/jscomp/CodePrinterEs6TypedTest.java +++ b/test/com/google/javascript/jscomp/CodePrinterEs6TypedTest.java @@ -28,7 +28,7 @@ public final class CodePrinterEs6TypedTest extends CodePrinterTestBase { @Override - public void setUp() { + protected void setUp() throws Exception { super.setUp(); languageMode = LanguageMode.ECMASCRIPT6_TYPED; } diff --git a/test/com/google/javascript/jscomp/CodePrinterTestBase.java b/test/com/google/javascript/jscomp/CodePrinterTestBase.java index 05e111065f4..5331a2c30d9 100644 --- a/test/com/google/javascript/jscomp/CodePrinterTestBase.java +++ b/test/com/google/javascript/jscomp/CodePrinterTestBase.java @@ -32,7 +32,9 @@ public abstract class CodePrinterTestBase extends TestCase { protected LanguageMode languageMode = LanguageMode.ECMASCRIPT5; protected Compiler lastCompiler = null; - @Override public void setUp() { + @Override + protected void setUp() throws Exception { + super.setUp(); allowWarnings = false; preserveTypeAnnotations = false; trustedStrings = true; diff --git a/test/com/google/javascript/jscomp/CollapseAnonymousFunctionsTest.java b/test/com/google/javascript/jscomp/CollapseAnonymousFunctionsTest.java index 644c57fa63d..ef3110a8b15 100644 --- a/test/com/google/javascript/jscomp/CollapseAnonymousFunctionsTest.java +++ b/test/com/google/javascript/jscomp/CollapseAnonymousFunctionsTest.java @@ -22,7 +22,9 @@ * */ public final class CollapseAnonymousFunctionsTest extends CompilerTestCase { - public CollapseAnonymousFunctionsTest() { + @Override + protected void setUp() throws Exception { + super.setUp(); this.enableNormalize(); } diff --git a/test/com/google/javascript/jscomp/CollapsePropertiesTest.java b/test/com/google/javascript/jscomp/CollapsePropertiesTest.java index c388714c0ea..563d51ebe2e 100644 --- a/test/com/google/javascript/jscomp/CollapsePropertiesTest.java +++ b/test/com/google/javascript/jscomp/CollapsePropertiesTest.java @@ -44,7 +44,8 @@ protected CompilerPass getProcessor(final Compiler compiler) { } @Override - public void setUp() { + protected void setUp() throws Exception { + super.setUp(); enableNormalize(); } diff --git a/test/com/google/javascript/jscomp/CompilerTestCase.java b/test/com/google/javascript/jscomp/CompilerTestCase.java index ad9fcfb1c3a..99be5084a2c 100644 --- a/test/com/google/javascript/jscomp/CompilerTestCase.java +++ b/test/com/google/javascript/jscomp/CompilerTestCase.java @@ -60,100 +60,100 @@ public abstract class CompilerTestCase extends TestCase { protected static final Joiner LINE_JOINER = Joiner.on('\n'); + // TODO(sdh): Remove this option if there's never a reason to turn it on. + private final boolean emitUseStrict = false; + /** Externs for the test */ - protected final List externsInputs; + private final List externsInputs; /** Whether to compare input and output as trees instead of strings */ private boolean compareAsTree; /** Whether to parse type info from JSDoc comments */ - protected boolean parseTypeInfo; + private boolean parseTypeInfo; /** Whether to take JSDoc into account when comparing ASTs. */ - protected boolean compareJsDoc; + private boolean compareJsDoc; /** Whether we check warnings without source information. */ - private boolean allowSourcelessWarnings = false; + private boolean allowSourcelessWarnings; /** True iff closure pass runs before pass being tested. */ - private boolean closurePassEnabled = false; + private boolean closurePassEnabled; /** Whether the closure pass is run on the expected JS. */ - private boolean closurePassEnabledForExpected = false; + private boolean closurePassEnabledForExpected; /** Whether to rewrite Closure code before the test is run. */ - private boolean rewriteClosureCode = false; + private boolean rewriteClosureCode; /** * If true, run type checking together with the pass being tested. A separate * flag controls whether type checking runs before or after the pass. */ - private boolean typeCheckEnabled = false; + private boolean typeCheckEnabled; /** * If true, run NTI together with the pass being tested. A separate * flag controls whether NTI runs before or after the pass. */ - private boolean newTypeInferenceEnabled = false; + private boolean newTypeInferenceEnabled; /** * If true performs the test using multistage compilation. */ - private boolean multistageCompilation = true; + private boolean multistageCompilation; /** Whether to test the compiler pass before the type check. */ - protected boolean runTypeCheckAfterProcessing = false; + private boolean runTypeCheckAfterProcessing; /** Whether to test the compiler pass before NTI. */ - protected boolean runNTIAfterProcessing = false; + private boolean runNTIAfterProcessing; /** Whether to scan externs for property names. */ - private boolean gatherExternPropertiesEnabled = false; + private boolean gatherExternPropertiesEnabled; /** * Whether the Normalize pass runs before pass being tested and * whether the expected JS strings should be normalized. */ - private boolean normalizeEnabled = false; + private boolean normalizeEnabled; - private boolean polymerPass = false; + private boolean polymerPass; /** Whether the tranpilation passes runs before pass being tested. */ - private boolean transpileEnabled = false; - - /** Whether the expected JS strings should be transpiled. */ - private boolean transpileExpected = false; + private boolean transpileEnabled; /** Whether we run InferConsts before checking. */ - private boolean enableInferConsts = false; + private boolean inferConsts; /** Whether we run CheckAccessControls after the pass being tested. */ - private boolean checkAccessControls = false; + private boolean checkAccessControls; /** Whether to check that all line number information is preserved. */ - private boolean checkLineNumbers = true; + private boolean checkLineNumbers; /** Whether to check that changed scopes are marked as changed */ - private boolean checkAstChangeMarking = true; + private boolean checkAstChangeMarking; /** Whether we expect parse warnings in the current test. */ - private boolean expectParseWarningsThisTest = false; + private boolean expectParseWarningsThisTest; /** * An expected symbol table error. Only useful for testing the * symbol table error-handling. */ - private DiagnosticType expectedSymbolTableError = null; + private DiagnosticType expectedSymbolTableError; /** * Whether the MarkNoSideEffectsCalls pass runs before the pass being tested */ - private boolean markNoSideEffects = false; + private boolean markNoSideEffects; /** * Whether the PureFunctionIdentifier pass runs before the pass being tested */ - private boolean computeSideEffects = false; + private boolean computeSideEffects; /** The most recently used Compiler instance. */ private Compiler lastCompiler; @@ -161,26 +161,27 @@ public abstract class CompilerTestCase extends TestCase { /** * Whether to accept ES6, ES5 or ES3 source. */ - private LanguageMode acceptedLanguage = LanguageMode.ECMASCRIPT_2017; - - private LanguageMode languageOut = LanguageMode.ECMASCRIPT5; + private LanguageMode acceptedLanguage; - private boolean emitUseStrict = false; + private LanguageMode languageOut; /** * Whether externs changes should be allowed for this pass. */ - private boolean allowExternsChanges = false; + private boolean allowExternsChanges; /** * Whether the AST should be validated. */ - private boolean astValidationEnabled = true; + private boolean astValidationEnabled; private String filename = "testcode"; private final Set ignoredWarnings = new HashSet<>(); + /** Whether {@link #setUp} has run. */ + private boolean setUpRan = false; + static final String ACTIVE_X_OBJECT_DEF = LINE_JOINER.join( "/**", @@ -393,32 +394,60 @@ public abstract class CompilerTestCase extends TestCase { * STATEMENT * */ - protected CompilerTestCase(String externs, boolean compareAsTree) { - this.externsInputs = ImmutableList.of(SourceFile.fromCode("externs", externs)); - this.compareAsTree = compareAsTree; - this.parseTypeInfo = false; - this.compareJsDoc = true; - } - - /** - * Constructs a test. Uses AST comparison. - * @param externs Externs JS as a string - */ protected CompilerTestCase(String externs) { - this(externs, true); + this.externsInputs = ImmutableList.of(SourceFile.fromCode("externs", externs)); } /** * Constructs a test. Uses AST comparison and no externs. */ protected CompilerTestCase() { - this("", true); + this(""); + } + + // Overridden here so that we can easily find all classes that override. + @Override + protected void setUp() throws Exception { + super.setUp(); + + // TODO(sdh): Initialize *all* the options here, but first we must ensure no subclass + // is changing them in the constructor, rather than in their own setUp method. + this.acceptedLanguage = LanguageMode.ECMASCRIPT_2017; + this.allowExternsChanges = false; + this.allowSourcelessWarnings = false; + this.astValidationEnabled = true; + this.checkAccessControls = false; + this.checkAstChangeMarking = true; + this.checkLineNumbers = true; + this.closurePassEnabled = false; + this.closurePassEnabledForExpected = false; + this.compareAsTree = true; + this.compareJsDoc = true; + this.computeSideEffects = false; + this.expectParseWarningsThisTest = false; + this.expectedSymbolTableError = null; + this.gatherExternPropertiesEnabled = false; + this.inferConsts = false; + this.languageOut = LanguageMode.ECMASCRIPT5; + this.markNoSideEffects = false; + this.multistageCompilation = true; + this.newTypeInferenceEnabled = false; + this.normalizeEnabled = false; + this.parseTypeInfo = false; + this.polymerPass = false; + this.rewriteClosureCode = false; + this.runNTIAfterProcessing = false; + this.runTypeCheckAfterProcessing = false; + this.transpileEnabled = false; + this.typeCheckEnabled = false; + + this.setUpRan = true; } @Override protected void tearDown() throws Exception { super.tearDown(); - expectParseWarningsThisTest = false; + this.setUpRan = false; } /** @@ -466,11 +495,39 @@ protected CodingConvention getCodingConvention() { return new GoogleCodingConvention(); } - public void setFilename(String filename) { + /** + * Enables parsing type info from JSDoc comments. This sets the compiler option, + * but does not actually run the type checking pass. + */ + protected final void enableParseTypeInfo() { + checkState(this.setUpRan, "Attempted to configure before running setUp()."); + this.parseTypeInfo = true; + } + + /** Turns off taking JSDoc into account when comparing ASTs. */ + protected final void disableCompareJsDoc() { + checkState(this.setUpRan, "Attempted to configure before running setUp()."); + this.compareJsDoc = false; + } + + /** Moves OTI type checking to occur after the processor, instead of before. */ + protected final void enableRunTypeCheckAfterProcessing() { + checkState(this.setUpRan, "Attempted to configure before running setUp()."); + this.runTypeCheckAfterProcessing = true; + } + + /** Moves NTI type checking to occur after the processor, instead of before. */ + protected final void enableRunNTIAfterProcessing() { + checkState(this.setUpRan, "Attempted to configure before running setUp()."); + this.runNTIAfterProcessing = true; + } + + public final void setFilename(String filename) { + checkState(this.setUpRan, "Attempted to configure before running setUp()."); this.filename = filename; } - public String getFilename() { + public final String getFilename() { return filename; } @@ -487,18 +544,21 @@ protected int getNumRepetitions() { /** Adds the given DiagnosticTypes to the set of warnings to ignore. */ protected final void ignoreWarnings(DiagnosticType... warnings) { + checkState(this.setUpRan, "Attempted to configure before running setUp()."); ignoredWarnings.addAll(Arrays.asList(warnings)); } /** Adds the given DiagnosticGroups to the set of warnings to ignore. */ protected final void ignoreWarnings(DiagnosticGroup... warnings) { + checkState(this.setUpRan, "Attempted to configure before running setUp()."); for (DiagnosticGroup group : warnings) { ignoredWarnings.addAll(group.getTypes()); } } /** Expect warnings without source information. */ - void allowSourcelessWarnings() { + final void allowSourcelessWarnings() { + checkState(this.setUpRan, "Attempted to configure before running setUp()."); allowSourcelessWarnings = true; } @@ -510,48 +570,50 @@ Compiler getLastCompiler() { /** * What language to allow in source parsing. Also sets the output language. */ - protected void setAcceptedLanguage(LanguageMode lang) { + protected final void setAcceptedLanguage(LanguageMode lang) { + checkState(this.setUpRan, "Attempted to configure before running setUp()."); setLanguage(lang, lang); } /** * Sets the input and output language modes.. */ - protected void setLanguage(LanguageMode langIn, LanguageMode langOut) { + protected final void setLanguage(LanguageMode langIn, LanguageMode langOut) { this.acceptedLanguage = langIn; setLanguageOut(langOut); } - protected void setLanguageOut(LanguageMode acceptedLanguage) { + protected final void setLanguageOut(LanguageMode acceptedLanguage) { + checkState(this.setUpRan, "Attempted to configure before running setUp()."); this.languageOut = acceptedLanguage; } - protected void setEmitUseStrict(boolean emitUseStrict) { - this.emitUseStrict = emitUseStrict; - } - /** * Whether to run InferConsts before passes */ - protected void enableInferConsts(boolean enable) { - this.enableInferConsts = enable; + protected final void enableInferConsts() { + checkState(this.setUpRan, "Attempted to configure before running setUp()."); + this.inferConsts = true; } /** - * Whether to run CheckAccessControls after the pass being tested (and checking types). + * Enables running CheckAccessControls after the pass being tested (and checking types). */ - protected void enableCheckAccessControls(boolean enable) { - this.checkAccessControls = enable; + protected final void enableCheckAccessControls() { + checkState(this.setUpRan, "Attempted to configure before running setUp()."); + this.checkAccessControls = true; } /** - * Whether to allow externs changes. + * Allow externs to change. */ - protected void allowExternsChanges(boolean allowExternsChanges) { - this.allowExternsChanges = allowExternsChanges; + protected final void allowExternsChanges() { + checkState(this.setUpRan, "Attempted to configure before running setUp()."); + this.allowExternsChanges = true; } - public void enablePolymerPass() { + public final void enablePolymerPass() { + checkState(this.setUpRan, "Attempted to configure before running setUp()."); polymerPass = true; } @@ -561,42 +623,48 @@ public void enablePolymerPass() { * * @see TypeCheck */ - public void enableTypeCheck() { + public final void enableTypeCheck() { + checkState(this.setUpRan, "Attempted to configure before running setUp()."); typeCheckEnabled = true; } // Run the new type inference after the test pass. Useful for testing passes // that rewrite the AST prior to typechecking, eg, AngularPass or PolymerPass. public void enableNewTypeInference() { + checkState(this.setUpRan, "Attempted to configure before running setUp()."); this.newTypeInferenceEnabled = true; } /** * Run using multistage compilation. */ - public void enableMultistageCompilation() { + public final void enableMultistageCompilation() { + checkState(this.setUpRan, "Attempted to configure before running setUp()."); multistageCompilation = true; } /** * Run using singlestage compilation. */ - public void disableMultistageCompilation() { + public final void disableMultistageCompilation() { + checkState(this.setUpRan, "Attempted to configure before running setUp()."); multistageCompilation = false; } /** - * Check to make sure that line numbers were preserved. + * Disable checking to make sure that line numbers were preserved. */ - public void enableLineNumberCheck(boolean newVal) { - checkLineNumbers = newVal; + public final void disableLineNumberCheck() { + checkState(this.setUpRan, "Attempted to configure before running setUp()."); + checkLineNumbers = false; } /** * @param newVal Whether to validate AST change marking. */ - public void validateAstChangeMarking(boolean newVal) { - checkAstChangeMarking = newVal; + public final void disableValidateAstChangeMarking() { + checkState(this.setUpRan, "Attempted to configure before running setUp()."); + checkAstChangeMarking = false; } /** @@ -604,36 +672,42 @@ public void validateAstChangeMarking(boolean newVal) { * * @see TypeCheck */ - public void disableTypeCheck() { + public final void disableTypeCheck() { + checkState(this.setUpRan, "Attempted to configure before running setUp()."); typeCheckEnabled = false; } - public void disableNewTypeInference() { + public final void disableNewTypeInference() { + checkState(this.setUpRan, "Attempted to configure before running setUp()."); this.newTypeInferenceEnabled = false; } /** * Process closure library primitives. */ - protected void enableClosurePass() { + protected final void enableClosurePass() { + checkState(this.setUpRan, "Attempted to configure before running setUp()."); closurePassEnabled = true; } - protected void enableClosurePassForExpected() { + protected final void enableClosurePassForExpected() { + checkState(this.setUpRan, "Attempted to configure before running setUp()."); closurePassEnabledForExpected = true; } /** * Rewrite Closure code before the test is run. */ - void enableRewriteClosureCode() { + final void enableRewriteClosureCode() { + checkState(this.setUpRan, "Attempted to configure before running setUp()."); rewriteClosureCode = true; } /** * Don't rewrite Closure code before the test is run. */ - void disableRewriteClosureCode() { + final void disableRewriteClosureCode() { + checkState(this.setUpRan, "Attempted to configure before running setUp()."); rewriteClosureCode = false; } @@ -643,33 +717,25 @@ void disableRewriteClosureCode() { * * @see Normalize */ - protected void enableNormalize() { + protected final void enableNormalize() { + checkState(this.setUpRan, "Attempted to configure before running setUp()."); this.normalizeEnabled = true; } /** * Perform AST transpilation before running the test pass. */ - protected void enableTranspile() { - enableTranspile(true); - } - - /** - * Perform AST transpilation before running the test pass. - * - * @param transpileExpected Whether to perform transpilation on the - * expected JS result. - */ - protected void enableTranspile(boolean transpileExpected) { + protected final void enableTranspile() { + checkState(this.setUpRan, "Attempted to configure before running setUp()."); transpileEnabled = true; - this.transpileExpected = transpileExpected; } /** * Don't perform AST normalization before running the test pass. * @see Normalize */ - protected void disableNormalize() { + protected final void disableNormalize() { + checkState(this.setUpRan, "Attempted to configure before running setUp()."); normalizeEnabled = false; } @@ -678,7 +744,8 @@ protected void disableNormalize() { * * @see MarkNoSideEffectCalls */ - void enableMarkNoSideEffects() { + final void enableMarkNoSideEffects() { + checkState(this.setUpRan, "Attempted to configure before running setUp()."); markNoSideEffects = true; } @@ -687,33 +754,38 @@ void enableMarkNoSideEffects() { * * @see MarkNoSideEffectCalls */ - void enableComputeSideEffects() { + final void enableComputeSideEffects() { + checkState(this.setUpRan, "Attempted to configure before running setUp()."); computeSideEffects = true; } /** * Scan externs for properties that should not be renamed. */ - void enableGatherExternProperties() { + final void enableGatherExternProperties() { + checkState(this.setUpRan, "Attempted to configure before running setUp()."); gatherExternPropertiesEnabled = true; } /** - * Whether to allow Validate the AST after each run of the pass. + * Disable validating the AST after each run of the pass. */ - protected void enableAstValidation(boolean validate) { - astValidationEnabled = validate; + protected final void disableAstValidation() { + checkState(this.setUpRan, "Attempted to configure before running setUp()."); + astValidationEnabled = false; } /** - * Whether to compare the expected output as a tree or string. + * Disable comparing the expected output as a tree or string. */ - protected void enableCompareAsTree(boolean compareAsTree) { - this.compareAsTree = compareAsTree; + protected final void disableCompareAsTree() { + checkState(this.setUpRan, "Attempted to configure before running setUp()."); + this.compareAsTree = false; } /** Whether we should ignore parse warnings for the current test method. */ - protected void setExpectParseWarningsThisTest() { + protected final void setExpectParseWarningsThisTest() { + checkState(this.setUpRan, "Attempted to configure before running setUp()."); expectParseWarningsThisTest = true; } @@ -1381,6 +1453,7 @@ private void test( DiagnosticType warning, String description) { checkState(!this.typeCheckEnabled || !this.newTypeInferenceEnabled); + checkState(this.setUpRan, "CompilerTestCase.setUp not run: call super.setUp() from overrides."); RecentChange recentChange = new RecentChange(); compiler.addChangeHandler(recentChange); @@ -1495,7 +1568,7 @@ private void test( normalizeActualCode(compiler, externsRoot, mainRoot); } - if (enableInferConsts && i == 0) { + if (inferConsts && i == 0) { new InferConsts(compiler).process(externsRoot, mainRoot); } @@ -1832,7 +1905,7 @@ protected Node parseExpectedJs(List inputs) { .process(externsRoot, mainRoot); } - if (transpileEnabled && transpileExpected && !compiler.hasErrors()) { + if (transpileEnabled && !compiler.hasErrors()) { transpileToEs5(compiler, externsRoot, mainRoot); } return mainRoot; diff --git a/test/com/google/javascript/jscomp/ConstCheckTest.java b/test/com/google/javascript/jscomp/ConstCheckTest.java index fd6cba1cbed..e0b20fa2b2f 100644 --- a/test/com/google/javascript/jscomp/ConstCheckTest.java +++ b/test/com/google/javascript/jscomp/ConstCheckTest.java @@ -25,7 +25,8 @@ public final class ConstCheckTest extends CompilerTestCase { @Override - public void setUp() { + protected void setUp() throws Exception { + super.setUp(); enableNormalize(); setAcceptedLanguage(LanguageMode.ECMASCRIPT_2017); } diff --git a/test/com/google/javascript/jscomp/ConstParamCheckTest.java b/test/com/google/javascript/jscomp/ConstParamCheckTest.java index 142e4aa8c5a..69ac1f57b00 100644 --- a/test/com/google/javascript/jscomp/ConstParamCheckTest.java +++ b/test/com/google/javascript/jscomp/ConstParamCheckTest.java @@ -29,8 +29,10 @@ public final class ConstParamCheckTest extends CompilerTestCase { + "goog.string.Const = {};" + "goog.string.Const.from = function(x) {};"; - public ConstParamCheckTest() { - enableInferConsts(true); + @Override + protected void setUp() throws Exception { + super.setUp(); + enableInferConsts(); enableNormalize(); setAcceptedLanguage(LanguageMode.ECMASCRIPT_2017); } diff --git a/test/com/google/javascript/jscomp/ConvertToDottedPropertiesTest.java b/test/com/google/javascript/jscomp/ConvertToDottedPropertiesTest.java index f183ee66812..c8efd3989a0 100644 --- a/test/com/google/javascript/jscomp/ConvertToDottedPropertiesTest.java +++ b/test/com/google/javascript/jscomp/ConvertToDottedPropertiesTest.java @@ -25,7 +25,8 @@ public final class ConvertToDottedPropertiesTest extends CompilerTestCase { @Override - public void setUp() { + protected void setUp() throws Exception { + super.setUp(); setAcceptedLanguage(LanguageMode.ECMASCRIPT3); } diff --git a/test/com/google/javascript/jscomp/CreateSyntheticBlocksTest.java b/test/com/google/javascript/jscomp/CreateSyntheticBlocksTest.java index 78c62fc1ec9..31f18e87bb5 100644 --- a/test/com/google/javascript/jscomp/CreateSyntheticBlocksTest.java +++ b/test/com/google/javascript/jscomp/CreateSyntheticBlocksTest.java @@ -27,16 +27,13 @@ public final class CreateSyntheticBlocksTest extends CompilerTestCase { private static final String START_MARKER = "startMarker"; private static final String END_MARKER = "endMarker"; - public CreateSyntheticBlocksTest() { - // Can't use compare as a tree because of the added synthetic blocks. - super("", false); - } - @Override - public void setUp() throws Exception { + protected void setUp() throws Exception { super.setUp(); + // Can't use compare as a tree because of the added synthetic blocks. + disableCompareAsTree(); setAcceptedLanguage(LanguageMode.ECMASCRIPT_2017); - enableLineNumberCheck(false); + disableLineNumberCheck(); } @Override diff --git a/test/com/google/javascript/jscomp/CrossModuleCodeMotionTest.java b/test/com/google/javascript/jscomp/CrossModuleCodeMotionTest.java index be92894a39c..8d47ebf7ba8 100644 --- a/test/com/google/javascript/jscomp/CrossModuleCodeMotionTest.java +++ b/test/com/google/javascript/jscomp/CrossModuleCodeMotionTest.java @@ -30,7 +30,7 @@ public CrossModuleCodeMotionTest() { } @Override - public void setUp() throws Exception { + protected void setUp() throws Exception { super.setUp(); parentModuleCanSeeSymbolsDeclaredInChildren = false; diff --git a/test/com/google/javascript/jscomp/CrossModuleMethodMotionTest.java b/test/com/google/javascript/jscomp/CrossModuleMethodMotionTest.java index 51cf38216c2..e837e0b5283 100644 --- a/test/com/google/javascript/jscomp/CrossModuleMethodMotionTest.java +++ b/test/com/google/javascript/jscomp/CrossModuleMethodMotionTest.java @@ -42,7 +42,8 @@ protected CompilerPass getProcessor(Compiler compiler) { } @Override - public void setUp() { + protected void setUp() throws Exception { + super.setUp(); canMoveExterns = false; noStubs = false; } diff --git a/test/com/google/javascript/jscomp/CrossModuleReferenceCollectorTest.java b/test/com/google/javascript/jscomp/CrossModuleReferenceCollectorTest.java index 85743888a13..4752445e68b 100644 --- a/test/com/google/javascript/jscomp/CrossModuleReferenceCollectorTest.java +++ b/test/com/google/javascript/jscomp/CrossModuleReferenceCollectorTest.java @@ -30,7 +30,8 @@ public final class CrossModuleReferenceCollectorTest extends CompilerTestCase { private CrossModuleReferenceCollector testedCollector; @Override - public void setUp() { + protected void setUp() throws Exception { + super.setUp(); setLanguage(ECMASCRIPT_NEXT, ECMASCRIPT_NEXT); } diff --git a/test/com/google/javascript/jscomp/DartSuperAccessorsPassTest.java b/test/com/google/javascript/jscomp/DartSuperAccessorsPassTest.java index 2c3eace8e52..d92d40caf7d 100644 --- a/test/com/google/javascript/jscomp/DartSuperAccessorsPassTest.java +++ b/test/com/google/javascript/jscomp/DartSuperAccessorsPassTest.java @@ -35,10 +35,12 @@ public final class DartSuperAccessorsPassTest extends CompilerTestCase { "[method]()", "*[generator]()", "get [prop]()", "set [prop](v)"); private PropertyRenamingPolicy propertyRenaming; + @Override - public void setUp() { + protected void setUp() throws Exception { + super.setUp(); setAcceptedLanguage(LanguageMode.ECMASCRIPT_2015); - runTypeCheckAfterProcessing = true; + enableRunTypeCheckAfterProcessing(); propertyRenaming = PropertyRenamingPolicy.ALL_UNQUOTED; } diff --git a/test/com/google/javascript/jscomp/DeadPropertyAssignmentEliminationTest.java b/test/com/google/javascript/jscomp/DeadPropertyAssignmentEliminationTest.java index b49f4461db5..a98e0e5553d 100644 --- a/test/com/google/javascript/jscomp/DeadPropertyAssignmentEliminationTest.java +++ b/test/com/google/javascript/jscomp/DeadPropertyAssignmentEliminationTest.java @@ -23,7 +23,8 @@ public class DeadPropertyAssignmentEliminationTest extends CompilerTestCase { @Override - public void setUp() throws Exception { + protected void setUp() throws Exception { + super.setUp(); enableGatherExternProperties(); } diff --git a/test/com/google/javascript/jscomp/DeclaredGlobalExternsOnWindowTest.java b/test/com/google/javascript/jscomp/DeclaredGlobalExternsOnWindowTest.java index 3327a5cd20f..952f5c469e0 100644 --- a/test/com/google/javascript/jscomp/DeclaredGlobalExternsOnWindowTest.java +++ b/test/com/google/javascript/jscomp/DeclaredGlobalExternsOnWindowTest.java @@ -26,11 +26,12 @@ protected CompilerPass getProcessor(Compiler compiler) { } @Override - protected void setUp() { + protected void setUp() throws Exception { + super.setUp(); setAcceptedLanguage(LanguageMode.ECMASCRIPT_2017); - allowExternsChanges(true); + allowExternsChanges(); enableTypeCheck(); - runTypeCheckAfterProcessing = true; + enableRunTypeCheckAfterProcessing(); } @Override diff --git a/test/com/google/javascript/jscomp/DisambiguatePrivatePropertiesTest.java b/test/com/google/javascript/jscomp/DisambiguatePrivatePropertiesTest.java index fb363ba8668..5847bce9242 100644 --- a/test/com/google/javascript/jscomp/DisambiguatePrivatePropertiesTest.java +++ b/test/com/google/javascript/jscomp/DisambiguatePrivatePropertiesTest.java @@ -47,6 +47,7 @@ protected int getNumRepetitions() { @Override protected void setUp() throws Exception { + super.setUp(); useGoogleCodingConvention = true; } diff --git a/test/com/google/javascript/jscomp/DisambiguatePropertiesTest.java b/test/com/google/javascript/jscomp/DisambiguatePropertiesTest.java index e2c51742e15..6c2bd9aa868 100644 --- a/test/com/google/javascript/jscomp/DisambiguatePropertiesTest.java +++ b/test/com/google/javascript/jscomp/DisambiguatePropertiesTest.java @@ -41,13 +41,13 @@ public final class DisambiguatePropertiesTest extends TypeICompilerTestCase { public DisambiguatePropertiesTest() { super(DEFAULT_EXTERNS); - parseTypeInfo = true; } @Override protected void setUp() throws Exception { super.setUp(); - super.enableNormalize(); + enableNormalize(); + enableParseTypeInfo(); ignoreWarnings(DiagnosticGroups.NEW_CHECK_TYPES_EXTRA_CHECKS); } diff --git a/test/com/google/javascript/jscomp/Es6ExternsCheckTest.java b/test/com/google/javascript/jscomp/Es6ExternsCheckTest.java index a411f69d6d7..01f93b74ce7 100644 --- a/test/com/google/javascript/jscomp/Es6ExternsCheckTest.java +++ b/test/com/google/javascript/jscomp/Es6ExternsCheckTest.java @@ -28,7 +28,6 @@ public final class Es6ExternsCheckTest extends CompilerTestCase { public Es6ExternsCheckTest() { super(EXTERNS_BASE); - allowSourcelessWarnings(); } @Override @@ -42,10 +41,11 @@ NoninjectingCompiler getLastCompiler() { } @Override - public void setUp() { + protected void setUp() throws Exception { + super.setUp(); setAcceptedLanguage(LanguageMode.ECMASCRIPT_2015); setLanguageOut(LanguageMode.ECMASCRIPT3); - allowExternsChanges(false); + allowSourcelessWarnings(); } @Override @@ -64,7 +64,7 @@ public void testEs6ObjectLiteral() { } public void testEs6ONoEs6() { - allowExternsChanges(true); // adding Symbol + allowExternsChanges(); // adding Symbol // Don't report the missing externs if the project does not includes files with ES6 syntax. testSame("var x = {};"); } diff --git a/test/com/google/javascript/jscomp/Es6ExtractClassesTest.java b/test/com/google/javascript/jscomp/Es6ExtractClassesTest.java index 29eb54b7c49..5f79d133d4b 100644 --- a/test/com/google/javascript/jscomp/Es6ExtractClassesTest.java +++ b/test/com/google/javascript/jscomp/Es6ExtractClassesTest.java @@ -29,11 +29,12 @@ protected CompilerPass getProcessor(Compiler compiler) { } @Override - protected void setUp() { + protected void setUp() throws Exception { + super.setUp(); setAcceptedLanguage(LanguageMode.ECMASCRIPT_2015); setLanguageOut(LanguageMode.ECMASCRIPT3); disableTypeCheck(); - runTypeCheckAfterProcessing = true; + enableRunTypeCheckAfterProcessing(); } public void testExtractionFromCall() { diff --git a/test/com/google/javascript/jscomp/Es6RenameVariablesInParamListsTest.java b/test/com/google/javascript/jscomp/Es6RenameVariablesInParamListsTest.java index 9286eb85d72..daeed567564 100644 --- a/test/com/google/javascript/jscomp/Es6RenameVariablesInParamListsTest.java +++ b/test/com/google/javascript/jscomp/Es6RenameVariablesInParamListsTest.java @@ -29,7 +29,7 @@ public final class Es6RenameVariablesInParamListsTest extends CompilerTestCase { protected void setUp() throws Exception { super.setUp(); setAcceptedLanguage(LanguageMode.ECMASCRIPT_2015); - runTypeCheckAfterProcessing = true; + enableRunTypeCheckAfterProcessing(); } @Override diff --git a/test/com/google/javascript/jscomp/Es6RewriteArrowFunctionTest.java b/test/com/google/javascript/jscomp/Es6RewriteArrowFunctionTest.java index d72e3a07218..a28aeaf49d8 100644 --- a/test/com/google/javascript/jscomp/Es6RewriteArrowFunctionTest.java +++ b/test/com/google/javascript/jscomp/Es6RewriteArrowFunctionTest.java @@ -22,11 +22,12 @@ public class Es6RewriteArrowFunctionTest extends CompilerTestCase { private LanguageMode languageOut; @Override - public void setUp() { + protected void setUp() throws Exception { + super.setUp(); setAcceptedLanguage(LanguageMode.ECMASCRIPT_2015); languageOut = LanguageMode.ECMASCRIPT3; disableTypeCheck(); - runTypeCheckAfterProcessing = true; + enableRunTypeCheckAfterProcessing(); } @Override diff --git a/test/com/google/javascript/jscomp/Es6RewriteBlockScopedDeclarationTest.java b/test/com/google/javascript/jscomp/Es6RewriteBlockScopedDeclarationTest.java index 0b6fc552338..17dac4d1d6c 100644 --- a/test/com/google/javascript/jscomp/Es6RewriteBlockScopedDeclarationTest.java +++ b/test/com/google/javascript/jscomp/Es6RewriteBlockScopedDeclarationTest.java @@ -28,10 +28,10 @@ public final class Es6RewriteBlockScopedDeclarationTest extends CompilerTestCase { @Override - public void setUp() { + protected void setUp() throws Exception { + super.setUp(); setAcceptedLanguage(LanguageMode.ECMASCRIPT_2015); - runTypeCheckAfterProcessing = true; - compareJsDoc = true; + enableRunTypeCheckAfterProcessing(); } @Override diff --git a/test/com/google/javascript/jscomp/Es6RewriteClassTest.java b/test/com/google/javascript/jscomp/Es6RewriteClassTest.java index 9276037d3f9..a5e9b773dde 100644 --- a/test/com/google/javascript/jscomp/Es6RewriteClassTest.java +++ b/test/com/google/javascript/jscomp/Es6RewriteClassTest.java @@ -65,10 +65,11 @@ public Es6RewriteClassTest() { } @Override - public void setUp() { + protected void setUp() throws Exception { + super.setUp(); setAcceptedLanguage(LanguageMode.ECMASCRIPT_2015); setLanguageOut(LanguageMode.ECMASCRIPT3); - runTypeCheckAfterProcessing = true; + enableRunTypeCheckAfterProcessing(); } protected final PassFactory makePassFactory( diff --git a/test/com/google/javascript/jscomp/Es6RewriteDestructuringTest.java b/test/com/google/javascript/jscomp/Es6RewriteDestructuringTest.java index bdec432f782..60e66d49f93 100644 --- a/test/com/google/javascript/jscomp/Es6RewriteDestructuringTest.java +++ b/test/com/google/javascript/jscomp/Es6RewriteDestructuringTest.java @@ -24,10 +24,11 @@ public class Es6RewriteDestructuringTest extends CompilerTestCase { @Override - public void setUp() { + protected void setUp() throws Exception { + super.setUp(); setAcceptedLanguage(LanguageMode.ECMASCRIPT_2015); disableTypeCheck(); - runTypeCheckAfterProcessing = true; + enableRunTypeCheckAfterProcessing(); } @Override @@ -611,7 +612,7 @@ public void testTypeCheck() { public void testDestructuringPatternInExterns() { enableTypeCheck(); - allowExternsChanges(true); + allowExternsChanges(); testSame( LINE_JOINER.join( diff --git a/test/com/google/javascript/jscomp/Es6RewriteGeneratorsTest.java b/test/com/google/javascript/jscomp/Es6RewriteGeneratorsTest.java index 8faaf141b3c..70fa7cfd156 100644 --- a/test/com/google/javascript/jscomp/Es6RewriteGeneratorsTest.java +++ b/test/com/google/javascript/jscomp/Es6RewriteGeneratorsTest.java @@ -25,10 +25,10 @@ public final class Es6RewriteGeneratorsTest extends CompilerTestCase { @Override - public void setUp() { + protected void setUp() throws Exception { + super.setUp(); setAcceptedLanguage(LanguageMode.ECMASCRIPT_2015); - runTypeCheckAfterProcessing = true; - compareJsDoc = true; + enableRunTypeCheckAfterProcessing(); } @Override diff --git a/test/com/google/javascript/jscomp/Es6RewriteModulesTest.java b/test/com/google/javascript/jscomp/Es6RewriteModulesTest.java index 0687b7452c5..4816ad03812 100644 --- a/test/com/google/javascript/jscomp/Es6RewriteModulesTest.java +++ b/test/com/google/javascript/jscomp/Es6RewriteModulesTest.java @@ -30,10 +30,11 @@ public final class Es6RewriteModulesTest extends CompilerTestCase { private ImmutableList moduleRoots = null; @Override - public void setUp() { + protected void setUp() throws Exception { + super.setUp(); // ECMASCRIPT5 to trigger module processing after parsing. setLanguage(LanguageMode.ECMASCRIPT_2015, LanguageMode.ECMASCRIPT5); - runTypeCheckAfterProcessing = true; + enableRunTypeCheckAfterProcessing(); } @Override @@ -671,7 +672,7 @@ public void testUseStrict_noWarning() { public void testAbsoluteImportsWithModuleRoots() { moduleRoots = ImmutableList.of("/base"); - compareJsDoc = false; + disableCompareJsDoc(); test( ImmutableList.of( SourceFile.fromCode(Compiler.joinPathParts("base", "mod", "name.js"), ""), diff --git a/test/com/google/javascript/jscomp/Es6SuperCheckTest.java b/test/com/google/javascript/jscomp/Es6SuperCheckTest.java index b2101685a5f..c0933b7c51b 100644 --- a/test/com/google/javascript/jscomp/Es6SuperCheckTest.java +++ b/test/com/google/javascript/jscomp/Es6SuperCheckTest.java @@ -23,7 +23,8 @@ */ public final class Es6SuperCheckTest extends CompilerTestCase { @Override - public void setUp() { + protected void setUp() throws Exception { + super.setUp(); setAcceptedLanguage(LanguageMode.ECMASCRIPT_2015); setLanguageOut(LanguageMode.ECMASCRIPT3); } diff --git a/test/com/google/javascript/jscomp/Es6SyntacticScopeCreatorTest.java b/test/com/google/javascript/jscomp/Es6SyntacticScopeCreatorTest.java index 994f5eb12c0..65a73e5b35a 100644 --- a/test/com/google/javascript/jscomp/Es6SyntacticScopeCreatorTest.java +++ b/test/com/google/javascript/jscomp/Es6SyntacticScopeCreatorTest.java @@ -60,7 +60,8 @@ private Scope getScope(String js) { } @Override - protected void setUp() { + protected void setUp() throws Exception { + super.setUp(); compiler = new Compiler(); CompilerOptions options = new CompilerOptions(); options.setLanguageIn(LanguageMode.ECMASCRIPT_2015); diff --git a/test/com/google/javascript/jscomp/Es6ToEs3ClassSideInheritanceTest.java b/test/com/google/javascript/jscomp/Es6ToEs3ClassSideInheritanceTest.java index 7dc4e1c1335..c37eea63916 100644 --- a/test/com/google/javascript/jscomp/Es6ToEs3ClassSideInheritanceTest.java +++ b/test/com/google/javascript/jscomp/Es6ToEs3ClassSideInheritanceTest.java @@ -24,10 +24,11 @@ */ public class Es6ToEs3ClassSideInheritanceTest extends CompilerTestCase { @Override - public void setUp() { + protected void setUp() throws Exception { + super.setUp(); setAcceptedLanguage(LanguageMode.ECMASCRIPT_2015); setLanguageOut(LanguageMode.ECMASCRIPT3); - allowExternsChanges(true); + allowExternsChanges(); } @Override diff --git a/test/com/google/javascript/jscomp/Es6ToEs3ConverterTest.java b/test/com/google/javascript/jscomp/Es6ToEs3ConverterTest.java index 5763e0b44ae..6c026b37e96 100644 --- a/test/com/google/javascript/jscomp/Es6ToEs3ConverterTest.java +++ b/test/com/google/javascript/jscomp/Es6ToEs3ConverterTest.java @@ -117,10 +117,11 @@ public Es6ToEs3ConverterTest() { } @Override - public void setUp() { + protected void setUp() throws Exception { + super.setUp(); setAcceptedLanguage(LanguageMode.ECMASCRIPT_2015); setLanguageOut(LanguageMode.ECMASCRIPT3); - runTypeCheckAfterProcessing = true; + enableRunTypeCheckAfterProcessing(); } protected final PassFactory makePassFactory( diff --git a/test/com/google/javascript/jscomp/ExportTestFunctionsTest.java b/test/com/google/javascript/jscomp/ExportTestFunctionsTest.java index 73dc0046d1c..c0db39c8013 100644 --- a/test/com/google/javascript/jscomp/ExportTestFunctionsTest.java +++ b/test/com/google/javascript/jscomp/ExportTestFunctionsTest.java @@ -39,9 +39,9 @@ public ExportTestFunctionsTest() { } @Override - public void setUp() throws Exception { + protected void setUp() throws Exception { super.setUp(); - super.enableLineNumberCheck(false); + disableLineNumberCheck(); setAcceptedLanguage(LanguageMode.ECMASCRIPT_2017); } diff --git a/test/com/google/javascript/jscomp/ExternExportsPassTest.java b/test/com/google/javascript/jscomp/ExternExportsPassTest.java index 3eb78a48ff9..7fd0cf1ed65 100644 --- a/test/com/google/javascript/jscomp/ExternExportsPassTest.java +++ b/test/com/google/javascript/jscomp/ExternExportsPassTest.java @@ -24,7 +24,7 @@ public final class ExternExportsPassTest extends CompilerTestCase { @Override - public void setUp() throws Exception { + protected void setUp() throws Exception { super.setUp(); enableNormalize(); enableTypeCheck(); diff --git a/test/com/google/javascript/jscomp/ExtractPrototypeMemberDeclarationsTest.java b/test/com/google/javascript/jscomp/ExtractPrototypeMemberDeclarationsTest.java index 9fa128e7203..ae378bc1570 100644 --- a/test/com/google/javascript/jscomp/ExtractPrototypeMemberDeclarationsTest.java +++ b/test/com/google/javascript/jscomp/ExtractPrototypeMemberDeclarationsTest.java @@ -27,7 +27,8 @@ public final class ExtractPrototypeMemberDeclarationsTest extends CompilerTestCa private Pattern pattern = Pattern.USE_GLOBAL_TEMP; @Override - protected void setUp() { + protected void setUp() throws Exception { + super.setUp(); enableNormalize(); pattern = Pattern.USE_GLOBAL_TEMP; } diff --git a/test/com/google/javascript/jscomp/FlowSensitiveInlineVariablesTest.java b/test/com/google/javascript/jscomp/FlowSensitiveInlineVariablesTest.java index 78202312fad..0a1a5755dde 100644 --- a/test/com/google/javascript/jscomp/FlowSensitiveInlineVariablesTest.java +++ b/test/com/google/javascript/jscomp/FlowSensitiveInlineVariablesTest.java @@ -31,7 +31,8 @@ public final class FlowSensitiveInlineVariablesTest extends CompilerTestCase { " function hasSFX() {}"); @Override - public void setUp() { + protected void setUp() throws Exception { + super.setUp(); enableNormalize(); } diff --git a/test/com/google/javascript/jscomp/FunctionRewriterTest.java b/test/com/google/javascript/jscomp/FunctionRewriterTest.java index 5273dd12226..b8c34fcd8c7 100644 --- a/test/com/google/javascript/jscomp/FunctionRewriterTest.java +++ b/test/com/google/javascript/jscomp/FunctionRewriterTest.java @@ -48,8 +48,9 @@ public final class FunctionRewriterTest extends CompilerTestCase { "}"; @Override - protected void setUp() { - super.enableLineNumberCheck(false); + protected void setUp() throws Exception { + super.setUp(); + disableLineNumberCheck(); } @Override diff --git a/test/com/google/javascript/jscomp/FunctionTypeBuilderTest.java b/test/com/google/javascript/jscomp/FunctionTypeBuilderTest.java index 4e3ad86762a..34834781e94 100644 --- a/test/com/google/javascript/jscomp/FunctionTypeBuilderTest.java +++ b/test/com/google/javascript/jscomp/FunctionTypeBuilderTest.java @@ -30,8 +30,10 @@ */ public final class FunctionTypeBuilderTest extends CompilerTestCase { - public FunctionTypeBuilderTest() { - parseTypeInfo = true; + @Override + protected void setUp() throws Exception { + super.setUp(); + enableParseTypeInfo(); enableTypeCheck(); } diff --git a/test/com/google/javascript/jscomp/GatherExternPropertiesTest.java b/test/com/google/javascript/jscomp/GatherExternPropertiesTest.java index b35ba6dc4c3..ce107f4e160 100644 --- a/test/com/google/javascript/jscomp/GatherExternPropertiesTest.java +++ b/test/com/google/javascript/jscomp/GatherExternPropertiesTest.java @@ -24,8 +24,8 @@ * Test case for {@link GatherExternProperties}. */ public final class GatherExternPropertiesTest extends CompilerTestCase { - public GatherExternPropertiesTest() { - super(); + protected void setUp() throws Exception { + super.setUp(); enableTypeCheck(); } diff --git a/test/com/google/javascript/jscomp/GatherRawExportsTest.java b/test/com/google/javascript/jscomp/GatherRawExportsTest.java index 32c56163efc..8259396a251 100644 --- a/test/com/google/javascript/jscomp/GatherRawExportsTest.java +++ b/test/com/google/javascript/jscomp/GatherRawExportsTest.java @@ -31,7 +31,12 @@ public final class GatherRawExportsTest extends CompilerTestCase { public GatherRawExportsTest() { super(EXTERNS); - super.enableNormalize(); + } + + @Override + protected void setUp() throws Exception { + super.setUp(); + enableNormalize(); } @Override diff --git a/test/com/google/javascript/jscomp/GenerateExportsTest.java b/test/com/google/javascript/jscomp/GenerateExportsTest.java index a7458d90525..07bd8b97776 100644 --- a/test/com/google/javascript/jscomp/GenerateExportsTest.java +++ b/test/com/google/javascript/jscomp/GenerateExportsTest.java @@ -46,7 +46,7 @@ protected int getNumRepetitions() { } @Override - public void setUp() throws Exception { + protected void setUp() throws Exception { super.setUp(); setAcceptedLanguage(LanguageMode.ECMASCRIPT_2017); this.allowNonGlobalExports = true; @@ -54,7 +54,7 @@ public void setUp() throws Exception { @Override protected void testExternChanges(String input, String expectedExtern) { - this.enableCompareAsTree(false); + disableCompareAsTree(); super.testExternChanges(input, expectedExtern); } @@ -298,42 +298,42 @@ public void testExportEnum() { } public void testExportObjectLit1() { - allowExternsChanges(true); + allowExternsChanges(); String code = "var E = {/** @export */ A:1, B:2};"; testSame(code); testExternChanges(code, "Object.prototype.A;"); } public void testExportObjectLit2() { - allowExternsChanges(true); + allowExternsChanges(); String code = "var E = {/** @export */ get A() { return 1 }, B:2};"; testSame(code); testExternChanges(code, "Object.prototype.A;"); } public void testExportObjectLit3() { - allowExternsChanges(true); + allowExternsChanges(); String code = "var E = {/** @export */ set A(v) {}, B:2};"; testSame(code); testExternChanges(code, "Object.prototype.A;"); } public void testExportObjectLit4() { - allowExternsChanges(true); + allowExternsChanges(); String code = "var E = {/** @export */ A:function() {}, B:2};"; testSame(code); testExternChanges(code, "Object.prototype.A;"); } public void testExportClassMember1() { - allowExternsChanges(true); + allowExternsChanges(); String code = "var E = function() { /** @export */ this.foo = 1; };"; testSame(code); testExternChanges(code, "Object.prototype.foo;"); } public void testMemberExportDoesntConflict() { - allowExternsChanges(true); + allowExternsChanges(); String code = LINE_JOINER.join( "var foo = function() { /** @export */ this.foo = 1; };", "/** @export */ foo.method = function(){};"); @@ -346,7 +346,7 @@ public void testMemberExportDoesntConflict() { } public void testExportClassMemberStub() { - allowExternsChanges(true); + allowExternsChanges(); String code = "var E = function() { /** @export */ this.foo; };"; testSame(code); testExternChanges(code, "Object.prototype.foo;"); diff --git a/test/com/google/javascript/jscomp/InferConstsTest.java b/test/com/google/javascript/jscomp/InferConstsTest.java index b5e20b23499..f3e9c4999b1 100644 --- a/test/com/google/javascript/jscomp/InferConstsTest.java +++ b/test/com/google/javascript/jscomp/InferConstsTest.java @@ -32,7 +32,8 @@ public final class InferConstsTest extends CompilerTestCase { private String[] names; @Override - public void setUp() { + protected void setUp() throws Exception { + super.setUp(); setAcceptedLanguage(LanguageMode.ECMASCRIPT_2015); } diff --git a/test/com/google/javascript/jscomp/InlineAndCollapsePropertiesTest.java b/test/com/google/javascript/jscomp/InlineAndCollapsePropertiesTest.java index 60d32d26e2c..646b1ca713e 100644 --- a/test/com/google/javascript/jscomp/InlineAndCollapsePropertiesTest.java +++ b/test/com/google/javascript/jscomp/InlineAndCollapsePropertiesTest.java @@ -53,7 +53,8 @@ public void process(Node externs, Node root) { } @Override - public void setUp() { + protected void setUp() throws Exception { + super.setUp(); enableNormalize(); } diff --git a/test/com/google/javascript/jscomp/InlineFunctionsTest.java b/test/com/google/javascript/jscomp/InlineFunctionsTest.java index fc54d17a491..df8c48ef258 100644 --- a/test/com/google/javascript/jscomp/InlineFunctionsTest.java +++ b/test/com/google/javascript/jscomp/InlineFunctionsTest.java @@ -22,15 +22,15 @@ * @author johnlenz@google.com (john lenz) */ -public final class InlineFunctionsTest extends CompilerTestCase { - boolean allowGlobalFunctionInlining = true; - boolean allowBlockInlining = true; +public class InlineFunctionsTest extends CompilerTestCase { + boolean allowGlobalFunctionInlining; + boolean allowBlockInlining; final boolean allowExpressionDecomposition = true; final boolean allowFunctionExpressionInlining = true; final boolean allowLocalFunctionInlining = true; - boolean assumeStrictThis = false; - boolean assumeMinimumCapture = false; - int maxSizeAfterInlining = CompilerOptions.UNLIMITED_FUN_SIZE_AFTER_INLINING; + boolean assumeStrictThis; + boolean assumeMinimumCapture; + int maxSizeAfterInlining; final static String EXTERNS = "/** @nosideeffects */ function nochg(){}\n" + @@ -38,18 +38,24 @@ public final class InlineFunctionsTest extends CompilerTestCase { public InlineFunctionsTest() { super(EXTERNS); - this.enableNormalize(); - this.enableComputeSideEffects(); + } + + // Overridden by one test method that needs to disable this. + void maybeEnableInferConsts() { + enableInferConsts(); } @Override protected void setUp() throws Exception { super.setUp(); - enableInferConsts(true); + maybeEnableInferConsts(); + enableNormalize(); + enableComputeSideEffects(); allowGlobalFunctionInlining = true; allowBlockInlining = true; assumeStrictThis = false; assumeMinimumCapture = false; + maxSizeAfterInlining = CompilerOptions.UNLIMITED_FUN_SIZE_AFTER_INLINING; } @Override @@ -2102,48 +2108,20 @@ public void testIssue5159924b() { } public void testInlineObject() { - new StringCompare().testInlineObject(); - } - - private static class StringCompare extends CompilerTestCase { - private boolean allowGlobalFunctionInlining = true; - - StringCompare() { - super("", false); - this.enableNormalize(); - this.enableMarkNoSideEffects(); - } - - @Override - public void setUp() throws Exception { - super.setUp(); - allowGlobalFunctionInlining = true; - } + disableCompareAsTree(); + enableMarkNoSideEffects(); - @Override - protected CompilerPass getProcessor(Compiler compiler) { - compiler.resetUniqueNameId(); - return new InlineFunctions( - compiler, - compiler.getUniqueNameIdSupplier(), - allowGlobalFunctionInlining, - true, // allowLocalFunctionInlining - true, // allowBlockInlining - true, // assumeStrictThis - true, // assumeMinimumCapture - CompilerOptions.UNLIMITED_FUN_SIZE_AFTER_INLINING); - } + allowGlobalFunctionInlining = false; + assumeStrictThis = true; + assumeMinimumCapture = true; - public void testInlineObject() { - allowGlobalFunctionInlining = false; - // TODO(johnlenz): normalize the AST so an AST comparison can be done. - // As is, the expected AST does not match the actual correct result: - // The AST matches "g.a()" with a FREE_CALL annotation, but this as - // expected string would fail as it won't be mark as a free call. - // "(0,g.a)()" matches the output, but not the resulting AST. - test("function inner(){function f(){return g.a}(f())()}", - "function inner(){(0,g.a)()}"); - } + // TODO(johnlenz): normalize the AST so an AST comparison can be done. + // As is, the expected AST does not match the actual correct result: + // The AST matches "g.a()" with a FREE_CALL annotation, but this as + // expected string would fail as it won't be mark as a free call. + // "(0,g.a)()" matches the output, but not the resulting AST. + test("function inner(){function f(){return g.a}(f())()}", + "function inner(){(0,g.a)()}"); } public void testBug4944818() { @@ -2435,9 +2413,13 @@ public void testCrossModuleInlining3() { ); } - public void test6671158() { - enableInferConsts(false); - test( + public void test6671158() throws Exception { + CompilerTestCase tester = new InlineFunctionsTest() { + @Override void maybeEnableInferConsts() {} + }; + + tester.setUp(); + tester.test( "function f() {return g()}" + "function Y(a){a.loader_()}" + "function _Z(){}" + @@ -2458,6 +2440,7 @@ public void test6671158() { " JSCompiler_temp_const$jscomp$0," + " JSCompiler_inline_result$jscomp$3," + " g())}"); + tester.tearDown(); } public void test6671158b() { diff --git a/test/com/google/javascript/jscomp/InlineObjectLiteralsTest.java b/test/com/google/javascript/jscomp/InlineObjectLiteralsTest.java index ea58934e3c0..058abc4fbac 100644 --- a/test/com/google/javascript/jscomp/InlineObjectLiteralsTest.java +++ b/test/com/google/javascript/jscomp/InlineObjectLiteralsTest.java @@ -25,14 +25,11 @@ */ public final class InlineObjectLiteralsTest extends CompilerTestCase { - public InlineObjectLiteralsTest() { - enableNormalize(); - setAcceptedLanguage(ECMASCRIPT_NEXT); - } - @Override protected void setUp() throws Exception { super.setUp(); + enableNormalize(); + setAcceptedLanguage(ECMASCRIPT_NEXT); } @Override diff --git a/test/com/google/javascript/jscomp/InlinePropertiesTest.java b/test/com/google/javascript/jscomp/InlinePropertiesTest.java index a97c6a75cda..c6f011b0a2a 100644 --- a/test/com/google/javascript/jscomp/InlinePropertiesTest.java +++ b/test/com/google/javascript/jscomp/InlinePropertiesTest.java @@ -35,10 +35,6 @@ public final class InlinePropertiesTest extends TypeICompilerTestCase { public InlinePropertiesTest() { super(EXTERNS); - enableNormalize(); - enableClosurePass(); - enableGatherExternProperties(); - this.mode = TypeInferenceMode.BOTH; } @Override @@ -81,7 +77,12 @@ protected int getNumRepetitions() { @Override protected void setUp() throws Exception { - runSmartNameRemoval = false; + super.setUp(); + enableNormalize(); + enableClosurePass(); + enableGatherExternProperties(); + this.mode = TypeInferenceMode.BOTH; + this.runSmartNameRemoval = false; } @@ -449,7 +450,7 @@ public void testStructuralInterfacesNoPropInlining() { } public void testStructuralInterfacesNoPropInlining2() { - runSmartNameRemoval = true; + this.runSmartNameRemoval = true; test( LINE_JOINER.join( diff --git a/test/com/google/javascript/jscomp/InlineSimpleMethodsTest.java b/test/com/google/javascript/jscomp/InlineSimpleMethodsTest.java index e7576220dff..315f5179f8b 100644 --- a/test/com/google/javascript/jscomp/InlineSimpleMethodsTest.java +++ b/test/com/google/javascript/jscomp/InlineSimpleMethodsTest.java @@ -18,15 +18,17 @@ public final class InlineSimpleMethodsTest extends CompilerTestCase { - public InlineSimpleMethodsTest() { - super("", false); - } - @Override protected CompilerPass getProcessor(Compiler compiler) { return new InlineSimpleMethods(compiler); } + @Override + protected void setUp() throws Exception { + super.setUp(); + disableCompareAsTree(); + } + /** * Helper for tests that expects definitions to remain unchanged, such * that {@code definitions+js} is converted to {@code definitions+expected}. diff --git a/test/com/google/javascript/jscomp/InlineVariablesConstantsTest.java b/test/com/google/javascript/jscomp/InlineVariablesConstantsTest.java index ddbb0a0d87a..1367d6f9edc 100644 --- a/test/com/google/javascript/jscomp/InlineVariablesConstantsTest.java +++ b/test/com/google/javascript/jscomp/InlineVariablesConstantsTest.java @@ -25,10 +25,6 @@ public final class InlineVariablesConstantsTest extends CompilerTestCase { private boolean inlineAllStrings = false; - public InlineVariablesConstantsTest() { - enableNormalize(); - } - @Override protected CompilerPass getProcessor(final Compiler compiler) { return new InlineVariables( @@ -36,7 +32,9 @@ protected CompilerPass getProcessor(final Compiler compiler) { } @Override - public void tearDown() { + protected void setUp() throws Exception { + super.setUp(); + enableNormalize(); inlineAllStrings = false; } diff --git a/test/com/google/javascript/jscomp/InlineVariablesTest.java b/test/com/google/javascript/jscomp/InlineVariablesTest.java index 3322bd78da9..2c2744607d3 100644 --- a/test/com/google/javascript/jscomp/InlineVariablesTest.java +++ b/test/com/google/javascript/jscomp/InlineVariablesTest.java @@ -30,7 +30,9 @@ public final class InlineVariablesTest extends CompilerTestCase { private boolean inlineAllStrings = false; private boolean inlineLocalsOnly = false; - public InlineVariablesTest() { + @Override + protected void setUp() throws Exception { + super.setUp(); enableNormalize(); setAcceptedLanguage(ECMASCRIPT_NEXT); } diff --git a/test/com/google/javascript/jscomp/InstrumentFunctionsTest.java b/test/com/google/javascript/jscomp/InstrumentFunctionsTest.java index 1f0a14024db..bb13821fae7 100644 --- a/test/com/google/javascript/jscomp/InstrumentFunctionsTest.java +++ b/test/com/google/javascript/jscomp/InstrumentFunctionsTest.java @@ -34,7 +34,8 @@ public InstrumentFunctionsTest() { } @Override - protected void setUp() { + protected void setUp() throws Exception { + super.setUp(); this.instrumentationPb = null; } diff --git a/test/com/google/javascript/jscomp/J2clCheckPassTest.java b/test/com/google/javascript/jscomp/J2clCheckPassTest.java index 5dbbe423cfa..4b390b51399 100644 --- a/test/com/google/javascript/jscomp/J2clCheckPassTest.java +++ b/test/com/google/javascript/jscomp/J2clCheckPassTest.java @@ -22,6 +22,11 @@ public class J2clCheckPassTest extends TypeICompilerTestCase { public J2clCheckPassTest() { super(DEFAULT_EXTERNS); + } + + @Override + protected void setUp() throws Exception { + super.setUp(); enableTypeCheck(); } diff --git a/test/com/google/javascript/jscomp/J2clEqualitySameRewriterPassTest.java b/test/com/google/javascript/jscomp/J2clEqualitySameRewriterPassTest.java index 34673d445c2..d580940c2ab 100644 --- a/test/com/google/javascript/jscomp/J2clEqualitySameRewriterPassTest.java +++ b/test/com/google/javascript/jscomp/J2clEqualitySameRewriterPassTest.java @@ -18,14 +18,13 @@ public class J2clEqualitySameRewriterPassTest extends TypeICompilerTestCase { private static final String EXTERN = "Equality.$same = function(a, b) {};"; - private boolean useTypesForOptimization = true; - public J2clEqualitySameRewriterPassTest() { super(MINIMAL_EXTERNS + EXTERN); } @Override - public void setUp() { + protected void setUp() throws Exception { + super.setUp(); this.mode = TypeInferenceMode.BOTH; } diff --git a/test/com/google/javascript/jscomp/J2clPassTest.java b/test/com/google/javascript/jscomp/J2clPassTest.java index 873057e2ae3..65f8c1dba60 100644 --- a/test/com/google/javascript/jscomp/J2clPassTest.java +++ b/test/com/google/javascript/jscomp/J2clPassTest.java @@ -25,7 +25,9 @@ */ public class J2clPassTest extends CompilerTestCase { - public J2clPassTest() { + @Override + protected void setUp() throws Exception { + super.setUp(); this.enableNormalize(); } diff --git a/test/com/google/javascript/jscomp/J2clPropertyInlinerPassTest.java b/test/com/google/javascript/jscomp/J2clPropertyInlinerPassTest.java index 7490639641b..1135006320f 100644 --- a/test/com/google/javascript/jscomp/J2clPropertyInlinerPassTest.java +++ b/test/com/google/javascript/jscomp/J2clPropertyInlinerPassTest.java @@ -17,14 +17,14 @@ package com.google.javascript.jscomp; import com.google.common.collect.Lists; -import com.google.javascript.jscomp.CompilerOptions.LanguageMode; import java.util.List; public class J2clPropertyInlinerPassTest extends CompilerTestCase { - public J2clPropertyInlinerPassTest() { - this.enableNormalize(); // Inlining will fail if normailization hasn't happened yet. - setAcceptedLanguage(LanguageMode.ECMASCRIPT6_TYPED); + @Override + protected void setUp() throws Exception { + super.setUp(); + enableNormalize(); // Inlining will fail if normailization hasn't happened yet. } @Override diff --git a/test/com/google/javascript/jscomp/MakeDeclaredNamesUniqueTest.java b/test/com/google/javascript/jscomp/MakeDeclaredNamesUniqueTest.java index 0ad7eab828d..ad26ffe85c6 100644 --- a/test/com/google/javascript/jscomp/MakeDeclaredNamesUniqueTest.java +++ b/test/com/google/javascript/jscomp/MakeDeclaredNamesUniqueTest.java @@ -59,7 +59,7 @@ protected int getNumRepetitions() { } @Override - public void setUp() throws Exception { + protected void setUp() throws Exception { super.setUp(); setAcceptedLanguage(LanguageMode.ECMASCRIPT_2017); removeConst = false; diff --git a/test/com/google/javascript/jscomp/MissingProvideTest.java b/test/com/google/javascript/jscomp/MissingProvideTest.java index 34d6059bc70..3e8d6694e26 100644 --- a/test/com/google/javascript/jscomp/MissingProvideTest.java +++ b/test/com/google/javascript/jscomp/MissingProvideTest.java @@ -29,9 +29,10 @@ public final class MissingProvideTest extends CompilerTestCase { - public MissingProvideTest() { + @Override + protected void setUp() throws Exception { + super.setUp(); enableRewriteClosureCode(); - enableClosurePass(); } diff --git a/test/com/google/javascript/jscomp/MissingRequireTest.java b/test/com/google/javascript/jscomp/MissingRequireTest.java index cd34f0fa352..afb7f652f67 100644 --- a/test/com/google/javascript/jscomp/MissingRequireTest.java +++ b/test/com/google/javascript/jscomp/MissingRequireTest.java @@ -34,7 +34,8 @@ public final class MissingRequireTest extends CompilerTestCase { private CheckRequiresForConstructors.Mode mode; @Override - public void setUp() { + protected void setUp() throws Exception { + super.setUp(); setAcceptedLanguage(LanguageMode.ECMASCRIPT_2017); mode = CheckRequiresForConstructors.Mode.FULL_COMPILE; } diff --git a/test/com/google/javascript/jscomp/MultiPassTest.java b/test/com/google/javascript/jscomp/MultiPassTest.java index c52ca159972..b97e19d563c 100644 --- a/test/com/google/javascript/jscomp/MultiPassTest.java +++ b/test/com/google/javascript/jscomp/MultiPassTest.java @@ -31,7 +31,9 @@ public final class MultiPassTest extends CompilerTestCase { private List passes; - public MultiPassTest() { + @Override + protected void setUp() throws Exception { + super.setUp(); enableNormalize(); enableGatherExternProperties(); } diff --git a/test/com/google/javascript/jscomp/NormalizeTest.java b/test/com/google/javascript/jscomp/NormalizeTest.java index fa5daf2b4e7..904d036ec54 100644 --- a/test/com/google/javascript/jscomp/NormalizeTest.java +++ b/test/com/google/javascript/jscomp/NormalizeTest.java @@ -668,7 +668,7 @@ public void testDeclInCatchBlock() { } public void testIssue() { - super.allowExternsChanges(true); + allowExternsChanges(); test("var a,b,c; var a,b", "a(), b()", "a(), b()", null, null); } @@ -787,47 +787,51 @@ public void testRenamingConstantProperties() throws Exception { // we call enableNormalize to make the Normalize.VerifyConstants pass run. // TODO(johnlenz): fix this so it is just another test case. - WithCollapse testCase = new WithCollapse(); - testCase.testConstantProperties(); - testCase.tearDown(); - } - - public static class WithCollapse extends CompilerTestCase { - WithCollapse() { - enableNormalize(); - } - - private void testConstantProperties() { - test("var a={}; a.ACONST = 4;var b = 1; b = a.ACONST;", - "var a$ACONST = 4; var b = 1; b = a$ACONST;"); - - test("var a={b:{}}; a.b.ACONST = 4;var b = 1; b = a.b.ACONST;", - "var a$b$ACONST = 4;var b = 1; b = a$b$ACONST;"); - - test("var a = {FOO: 1};var b = 1; b = a.FOO;", - "var a$FOO = 1; var b = 1; b = a$FOO;"); - - testSame("var EXTERN; var ext; ext.FOO;", "var b = EXTERN; var c = ext.FOO", null); - - test("var a={}; a.ACONST = 4; var b = 1; b = a.ACONST;", - "var a$ACONST = 4; var b = 1; b = a$ACONST;"); - - test("var a = {}; function foo() { var d = a.CONST; }; (function(){a.CONST=4})();", - "var a$CONST;function foo(){var d = a$CONST;}; (function(){a$CONST = 4})();"); - - test("var a = {}; a.ACONST = new Foo(); var b = 1; b = a.ACONST;", - "var a$ACONST = new Foo(); var b = 1; b = a$ACONST;"); - } - - @Override - protected int getNumRepetitions() { - // The normalize pass is only run once. - return 1; - } - - @Override - protected CompilerPass getProcessor(Compiler compiler) { - return new CollapseProperties(compiler); - } + CompilerTestCase tester = new CompilerTestCase() { + @Override + protected int getNumRepetitions() { + // The normalize pass is only run once. + return 1; + } + + @Override + protected CompilerPass getProcessor(Compiler compiler) { + return new CollapseProperties(compiler); + } + }; + + tester.setUp(); + tester.enableNormalize(); + + tester.test( + "var a={}; a.ACONST = 4;var b = 1; b = a.ACONST;", + "var a$ACONST = 4; var b = 1; b = a$ACONST;"); + + tester.test( + "var a={b:{}}; a.b.ACONST = 4;var b = 1; b = a.b.ACONST;", + "var a$b$ACONST = 4;var b = 1; b = a$b$ACONST;"); + + tester.test( + "var a = {FOO: 1};var b = 1; b = a.FOO;", + "var a$FOO = 1; var b = 1; b = a$FOO;"); + + tester.testSame( + "var EXTERN; var ext; ext.FOO;", + "var b = EXTERN; var c = ext.FOO", + null); + + tester.test( + "var a={}; a.ACONST = 4; var b = 1; b = a.ACONST;", + "var a$ACONST = 4; var b = 1; b = a$ACONST;"); + + tester.test( + "var a = {}; function foo() { var d = a.CONST; }; (function(){a.CONST=4})();", + "var a$CONST;function foo(){var d = a$CONST;}; (function(){a$CONST = 4})();"); + + tester.test( + "var a = {}; a.ACONST = new Foo(); var b = 1; b = a.ACONST;", + "var a$ACONST = new Foo(); var b = 1; b = a$ACONST;"); + + tester.tearDown(); } } diff --git a/test/com/google/javascript/jscomp/ObjectPropertyStringPreprocessTest.java b/test/com/google/javascript/jscomp/ObjectPropertyStringPreprocessTest.java index 4150ffca117..dc84dc084e5 100644 --- a/test/com/google/javascript/jscomp/ObjectPropertyStringPreprocessTest.java +++ b/test/com/google/javascript/jscomp/ObjectPropertyStringPreprocessTest.java @@ -34,8 +34,9 @@ protected int getNumRepetitions() { } @Override - protected void setUp() { - allowExternsChanges(true); + protected void setUp() throws Exception { + super.setUp(); + allowExternsChanges(); } public void testDeclaration() { diff --git a/test/com/google/javascript/jscomp/OptimizeParametersTest.java b/test/com/google/javascript/jscomp/OptimizeParametersTest.java index a6a27a9d96b..2b690dfe25c 100644 --- a/test/com/google/javascript/jscomp/OptimizeParametersTest.java +++ b/test/com/google/javascript/jscomp/OptimizeParametersTest.java @@ -28,7 +28,8 @@ protected CompilerPass getProcessor(Compiler compiler) { } @Override - public void setUp() { + protected void setUp() throws Exception { + super.setUp(); enableNormalize(); } diff --git a/test/com/google/javascript/jscomp/PeepholeFoldConstantsTest.java b/test/com/google/javascript/jscomp/PeepholeFoldConstantsTest.java index a617a493c4d..4c4ab1c5355 100644 --- a/test/com/google/javascript/jscomp/PeepholeFoldConstantsTest.java +++ b/test/com/google/javascript/jscomp/PeepholeFoldConstantsTest.java @@ -41,7 +41,7 @@ public PeepholeFoldConstantsTest() { private boolean useTypes = true; @Override - public void setUp() throws Exception { + protected void setUp() throws Exception { super.setUp(); late = false; useTypes = true; diff --git a/test/com/google/javascript/jscomp/PeepholeIntegrationTest.java b/test/com/google/javascript/jscomp/PeepholeIntegrationTest.java index e6a2b9d72f2..625471e1dd7 100644 --- a/test/com/google/javascript/jscomp/PeepholeIntegrationTest.java +++ b/test/com/google/javascript/jscomp/PeepholeIntegrationTest.java @@ -21,12 +21,14 @@ */ public class PeepholeIntegrationTest extends CompilerTestCase { - private boolean late = true; + private boolean late; + private int numRepetitions; @Override - public void setUp() throws Exception { + protected void setUp() throws Exception { super.setUp(); this.late = false; + this.numRepetitions = 2; } @Override @@ -44,235 +46,224 @@ protected CompilerPass getProcessor(final Compiler compiler) { @Override protected int getNumRepetitions() { - // Reduce this to 2 if we get better expression evaluators. - return 4; - } - - private void foldSame(String js) { - testSame(js); - } - - private void fold(String js, String expected) { - test(js, expected); + return numRepetitions; } public void testTrueFalse() { late = false; - foldSame("x = true"); - foldSame("x = false"); - fold("x = !1", "x = false"); - fold("x = !0", "x = true"); + testSame("x = true"); + testSame("x = false"); + test("x = !1", "x = false"); + test("x = !0", "x = true"); late = true; - fold("x = true", "x = !0"); - fold("x = false", "x = !1"); - foldSame("x = !1"); - foldSame("x = !0"); + test("x = true", "x = !0"); + test("x = false", "x = !1"); + testSame("x = !1"); + testSame("x = !0"); } /** Check that removing blocks with 1 child works */ public void testFoldOneChildBlocksIntegration() { - fold("function f(){switch(foo()){default:{break}}}", + test("function f(){switch(foo()){default:{break}}}", "function f(){foo()}"); - fold("function f(){switch(x){default:{break}}}", + test("function f(){switch(x){default:{break}}}", "function f(){}"); - fold("function f(){switch(x){default:x;case 1:return 2}}", + test("function f(){switch(x){default:x;case 1:return 2}}", "function f(){switch(x){default:case 1:return 2}}"); // ensure that block folding does not break hook ifs - fold("if(x){if(true){foo();foo()}else{bar();bar()}}", + test("if(x){if(true){foo();foo()}else{bar();bar()}}", "if(x){foo();foo()}"); - fold("if(x){if(false){foo();foo()}else{bar();bar()}}", + test("if(x){if(false){foo();foo()}else{bar();bar()}}", "if(x){bar();bar()}"); // Cases where the then clause has no side effects. - fold("if(x()){}", "x()"); + test("if(x()){}", "x()"); - fold("if(x()){} else {x()}", "x()||x()"); - fold("if(x){}", ""); // Even the condition has no side effect. - fold("if(a()){A()} else if (b()) {} else {C()}", "a()?A():b()||C()"); + test("if(x()){} else {x()}", "x()||x()"); + test("if(x){}", ""); // Even the condition has no side effect. + test("if(a()){A()} else if (b()) {} else {C()}", "a()?A():b()||C()"); - fold("if(a()){} else if (b()) {} else {C()}", + test("if(a()){} else if (b()) {} else {C()}", "a() || (b() || C())"); - fold("if(a()){A()} else if (b()) {} else if (c()) {} else{D()}", + test("if(a()){A()} else if (b()) {} else if (c()) {} else{D()}", "a() ? A() : b() || (c() || D())"); - fold("if(a()){} else if (b()) {} else if (c()) {} else{D()}", + test("if(a()){} else if (b()) {} else if (c()) {} else{D()}", "a() || (b() || (c() || D()))"); - fold("if(a()){A()} else if (b()) {} else if (c()) {} else{}", + test("if(a()){A()} else if (b()) {} else if (c()) {} else{}", "a()?A():b()||c()"); // Verify that non-global scope works. - fold("function foo(){if(x()){}}", "function foo(){x()}"); + test("function foo(){if(x()){}}", "function foo(){x()}"); } public void testFoldOneChildBlocksStringCompare() { - fold("if (x) {if (y) { var x; } } else{ var z; }", + test("if (x) {if (y) { var x; } } else{ var z; }", "if (x) { if (y) var x } else var z"); } /** Test a particularly hairy edge case. */ public void testNecessaryDanglingElse() { - fold("if (x) if (y){ y(); z() } else; else x()", + test("if (x) if (y){ y(); z() } else; else x()", "if (x) { if(y) { y(); z() } } else x()"); } /** Try to minimize returns */ public void testFoldReturnsIntegration() { // if-then-else duplicate statement removal handles this case: - fold("function f(){if(x)return;else return}", + test("function f(){if(x)return;else return}", "function f(){}"); } public void testBug1059649() { // ensure that folding blocks with a single var node doesn't explode - fold("if(x){var y=3;}var z=5", "if(x)var y=3;var z=5"); + test("if(x){var y=3;}var z=5", "if(x)var y=3;var z=5"); // With normalization, we no longer have this case. - foldSame("if(x){var y=3;}else{var y=4;}var z=5"); - fold("while(x){var y=3;}var z=5", "while(x)var y=3;var z=5"); - fold("for(var i=0;i<10;i++){var y=3;}var z=5", + testSame("if(x){var y=3;}else{var y=4;}var z=5"); + test("while(x){var y=3;}var z=5", "while(x)var y=3;var z=5"); + test("for(var i=0;i<10;i++){var y=3;}var z=5", "for(var i=0;i<10;i++)var y=3;var z=5"); - fold("for(var i in x){var y=3;}var z=5", + test("for(var i in x){var y=3;}var z=5", "for(var i in x)var y=3;var z=5"); - fold("do{var y=3;}while(x);var z=5", "do var y=3;while(x);var z=5"); + test("do{var y=3;}while(x);var z=5", "do var y=3;while(x);var z=5"); } public void testHookIfIntegration() { - fold("if (false){ x = 1; } else if (cond) { x = 2; } else { x = 3; }", + test("if (false){ x = 1; } else if (cond) { x = 2; } else { x = 3; }", "x=cond?2:3"); - fold("x?void 0:y()", "x||y()"); - fold("!x?void 0:y()", "x&&y()"); - fold("x?y():void 0", "x&&y()"); + test("x?void 0:y()", "x||y()"); + test("!x?void 0:y()", "x&&y()"); + test("x?y():void 0", "x&&y()"); } public void testRemoveDuplicateStatementsIntegration() { - fold("function z() {if (a) { return true }" + - "else if (b) { return true }" + - "else { return true }}", - "function z() {return true;}"); + test( + LINE_JOINER.join( + "function z() {if (a) { return true }", + "else if (b) { return true }", + "else { return true }}"), + "function z() {return true;}"); - fold("function z() {if (a()) { return true }" + - "else if (b()) { return true }" + - "else { return true }}", - "function z() {a()||b();return true;}"); + test( + LINE_JOINER.join( + "function z() {if (a()) { return true }", + "else if (b()) { return true }", + "else { return true }}"), + "function z() {a()||b();return true;}"); } public void testFoldLogicalOpIntegration() { test("if(x && true) z()", "x&&z()"); test("if(x && false) z()", ""); - fold("if(x || 3) z()", "z()"); - fold("if(x || false) z()", "x&&z()"); + test("if(x || 3) z()", "z()"); + test("if(x || false) z()", "x&&z()"); test("if(x==y && false) z()", ""); - fold("if(y() || x || 3) z()", "y();z()"); + test("if(y() || x || 3) z()", "y();z()"); } public void testFoldBitwiseOpStringCompareIntegration() { - fold("while (-1 | 0) {}", "while (1);"); + test("while (-1 | 0) {}", "while (1);"); } public void testVarLiftingIntegration() { - fold("if(true);else var a;", "var a"); - fold("if(false) foo();else var a;", "var a"); - fold("if(true)var a;else;", "var a"); - fold("if(false)var a;else;", "var a"); - fold("if(false)var a,b;", "var b; var a"); - fold("if(false){var a;var a;}", "var a"); - fold("if(false)var a=function(){var b};", "var a"); - fold("if(a)if(false)var a;else var b;", "var a;if(a)var b"); + test("if(true);else var a;", "var a"); + test("if(false) foo();else var a;", "var a"); + test("if(true)var a;else;", "var a"); + test("if(false)var a;else;", "var a"); + test("if(false)var a,b;", "var b; var a"); + test("if(false){var a;var a;}", "var a"); + test("if(false)var a=function(){var b};", "var a"); + test("if(a)if(false)var a;else var b;", "var a;if(a)var b"); } public void testBug1438784() throws Exception { - fold("for(var i=0;i<10;i++)if(x)x.y;", "for(var i=0;i<10;i++);"); + test("for(var i=0;i<10;i++)if(x)x.y;", "for(var i=0;i<10;i++);"); } public void testFoldUselessWhileIntegration() { - fold("while(!true) { foo() }", ""); - fold("while(!false) foo() ", "while(1) foo()"); - fold("while(!void 0) foo()", "while(1) foo()"); + test("while(!true) { foo() }", ""); + test("while(!false) foo() ", "while(1) foo()"); + test("while(!void 0) foo()", "while(1) foo()"); // Make sure proper empty nodes are inserted. - fold("if(foo())while(false){foo()}else bar()", "foo()||bar()"); + test("if(foo())while(false){foo()}else bar()", "foo()||bar()"); } public void testFoldUselessForIntegration() { - fold("for(;!true;) { foo() }", ""); - fold("for(;void 0;) { foo() }", ""); - fold("for(;undefined;) { foo() }", ""); - fold("for(;1;) foo()", "for(;;) foo()"); - fold("for(;!void 0;) foo()", "for(;;) foo()"); + test("for(;!true;) { foo() }", ""); + test("for(;void 0;) { foo() }", ""); + test("for(;undefined;) { foo() }", ""); + test("for(;1;) foo()", "for(;;) foo()"); + test("for(;!void 0;) foo()", "for(;;) foo()"); // Make sure proper empty nodes are inserted. - fold("if(foo())for(;false;){foo()}else bar()", "foo()||bar()"); + test("if(foo())for(;false;){foo()}else bar()", "foo()||bar()"); } public void testFoldUselessDoIntegration() { test("do { foo() } while(!true);", "foo()"); - fold("do { foo() } while(void 0);", "foo()"); - fold("do { foo() } while(undefined);", "foo()"); - fold("do { foo() } while(!void 0);", "do { foo() } while(1);"); + test("do { foo() } while(void 0);", "foo()"); + test("do { foo() } while(undefined);", "foo()"); + test("do { foo() } while(!void 0);", "do { foo() } while(1);"); // Make sure proper empty nodes are inserted. test("if(foo())do {foo()} while(false) else bar()", "foo()?foo():bar()"); } public void testMinimizeWhileConstantConditionIntegration() { - fold("while(!false) foo()", "while(1) foo()"); - fold("while(202) foo()", "while(1) foo()"); - fold("while(Infinity) foo()", "while(1) foo()"); - fold("while('text') foo()", "while(1) foo()"); - fold("while([]) foo()", "while(1) foo()"); - fold("while({}) foo()", "while(1) foo()"); - fold("while(/./) foo()", "while(1) foo()"); + test("while(!false) foo()", "while(1) foo()"); + test("while(202) foo()", "while(1) foo()"); + test("while(Infinity) foo()", "while(1) foo()"); + test("while('text') foo()", "while(1) foo()"); + test("while([]) foo()", "while(1) foo()"); + test("while({}) foo()", "while(1) foo()"); + test("while(/./) foo()", "while(1) foo()"); } public void testMinimizeExpr() { test("!!true", ""); - fold("!!x()", "x()"); + test("!!x()", "x()"); test("!(!x()&&!y())", "x()||y()"); - fold("x()||!!y()", "x()||y()"); + test("x()||!!y()", "x()||y()"); /* This is similar to the !!true case */ - fold("!!x()&&y()", "x()&&y()"); + test("!!x()&&y()", "x()&&y()"); } public void testBug1509085() { - PeepholeIntegrationTest oneRepetitiontest = new PeepholeIntegrationTest() { - @Override - protected int getNumRepetitions() { - return 1; - } - }; - - oneRepetitiontest.test("x ? x() : void 0", "x&&x();"); - oneRepetitiontest.foldSame("y = x ? x() : void 0"); + this.numRepetitions = 1; + this.late = true; + test("x ? x() : void 0", "x&&x();"); + testSame("y = x ? x() : void 0"); } public void testBugIssue3() { - foldSame("function foo() {" + - " if(sections.length != 1) children[i] = 0;" + - " else var selectedid = children[i]" + - "}"); + testSame(LINE_JOINER.join( + "function foo() {", + " if(sections.length != 1) children[i] = 0;", + " else var selectedid = children[i]", + "}")); } public void testBugIssue43() { - foldSame("function foo() {" + - " if (a) { var b = 1; } else { a.b = 1; }" + - "}"); + testSame("function foo() {\n if (a) { var b = 1; } else { a.b = 1; }\n}"); } public void testFoldNegativeBug() { - fold("while(-3){};", "while(1);"); + test("while(-3){};", "while(1);"); } public void testNoNormalizeLabeledExpr() { enableNormalize(); - foldSame("var x; foo:{x = 3;}"); - foldSame("var x; foo:x = 3;"); + testSame("var x; foo:{x = 3;}"); + testSame("var x; foo:x = 3;"); disableNormalize(); } @@ -295,45 +286,45 @@ public void testShortCircuit4() { } public void testMinimizeExprCondition() { - fold("(x || true) && y()", "y()"); - fold("(x || false) && y()", "x&&y()"); - fold("(x && true) && y()", "x && y()"); - fold("(x && false) && y()", ""); - fold("a = x || false ? b : c", "a=x?b:c"); - fold("do {x()} while((x && false) && y())", "x()"); + test("(x || true) && y()", "y()"); + test("(x || false) && y()", "x&&y()"); + test("(x && true) && y()", "x && y()"); + test("(x && false) && y()", ""); + test("a = x || false ? b : c", "a=x?b:c"); + test("do {x()} while((x && false) && y())", "x()"); } // A few miscellaneous cases where one of the peephole passes increases the // size, but it does it in such a way that a later pass can decrease it. // Test to make sure the overall change is a decrease, not an increase. public void testMisc() { - fold("x = [foo()] && x", "x = (foo(),x)"); - fold("x = foo() && false || bar()", "x = (foo(), bar())"); - fold("if(foo() && false) z()", "foo()"); + test("x = [foo()] && x", "x = (foo(),x)"); + test("x = foo() && false || bar()", "x = (foo(), bar())"); + test("if(foo() && false) z()", "foo()"); } public void testTrueFalseFolding() { late = true; - fold("x = true", "x = !0"); - fold("x = false", "x = !1"); - fold("x = !3", "x = !1"); - fold("x = true && !0", "x = !0"); - fold("x = !!!!!!!!!!!!3", "x = !0"); - fold("if(!3){x()}", ""); - fold("if(!!3){x()}", "x()"); + test("x = true", "x = !0"); + test("x = false", "x = !1"); + test("x = !3", "x = !1"); + test("x = true && !0", "x = !0"); + test("x = !!!!!!!!!!!!3", "x = !0"); + test("if(!3){x()}", ""); + test("if(!!3){x()}", "x()"); } public void testCommaSplitingConstantCondition() { late = false; - fold("(b=0,b=1);if(b)x=b;", "b=0;b=1;x=b;"); - fold("(b=0,b=1);if(b)x=b;", "b=0;b=1;x=b;"); + test("(b=0,b=1);if(b)x=b;", "b=0;b=1;x=b;"); + test("(b=0,b=1);if(b)x=b;", "b=0;b=1;x=b;"); } public void testAvoidCommaSplitting() { late = false; - fold("x(),y(),z()", "x();y();z()"); + test("x(),y(),z()", "x();y();z()"); late = true; - foldSame("x(),y(),z()"); + testSame("x(),y(),z()"); } public void testObjectLiteral() { @@ -351,24 +342,24 @@ public void testArrayLiteral() { } public void testFoldIfs1() { - fold("function f() {if (x) return 1; else if (y) return 1;}", + test("function f() {if (x) return 1; else if (y) return 1;}", "function f() {if (x||y) return 1;}"); - fold("function f() {if (x) return 1; else {if (y) return 1; else foo();}}", + test("function f() {if (x) return 1; else {if (y) return 1; else foo();}}", "function f() {if (x||y) return 1; foo();}"); } public void testFoldIfs2() { - fold("function f() {if (x) { a(); } else if (y) { a() }}", + test("function f() {if (x) { a(); } else if (y) { a() }}", "function f() {x?a():y&&a();}"); } public void testFoldHook2() { - fold("function f(a) {if (!a) return a; else return a;}", + test("function f(a) {if (!a) return a; else return a;}", "function f(a) {return a}"); } public void disable_testFoldHook1() { - fold("function f(a) {return (!a)?a:a;}", + test("function f(a) {return (!a)?a:a;}", "function f(a) {return a}"); } } diff --git a/test/com/google/javascript/jscomp/PeepholeMinimizeConditionsTest.java b/test/com/google/javascript/jscomp/PeepholeMinimizeConditionsTest.java index 8d110d620f0..6adef0e9a01 100644 --- a/test/com/google/javascript/jscomp/PeepholeMinimizeConditionsTest.java +++ b/test/com/google/javascript/jscomp/PeepholeMinimizeConditionsTest.java @@ -31,7 +31,7 @@ public PeepholeMinimizeConditionsTest() { } @Override - public void setUp() throws Exception { + protected void setUp() throws Exception { super.setUp(); late = true; useTypes = true; diff --git a/test/com/google/javascript/jscomp/PeepholeRemoveDeadCodeTest.java b/test/com/google/javascript/jscomp/PeepholeRemoveDeadCodeTest.java index 7951c052424..12d1046ce05 100644 --- a/test/com/google/javascript/jscomp/PeepholeRemoveDeadCodeTest.java +++ b/test/com/google/javascript/jscomp/PeepholeRemoveDeadCodeTest.java @@ -54,7 +54,7 @@ public void process(Node externs, Node root) { } @Override - public void setUp() throws Exception { + protected void setUp() throws Exception { super.setUp(); setAcceptedLanguage(LanguageMode.ECMASCRIPT_2017); } diff --git a/test/com/google/javascript/jscomp/PeepholeReplaceKnownMethodsTest.java b/test/com/google/javascript/jscomp/PeepholeReplaceKnownMethodsTest.java index 7397923ebf4..9fe7609a115 100644 --- a/test/com/google/javascript/jscomp/PeepholeReplaceKnownMethodsTest.java +++ b/test/com/google/javascript/jscomp/PeepholeReplaceKnownMethodsTest.java @@ -39,7 +39,7 @@ public PeepholeReplaceKnownMethodsTest() { } @Override - public void setUp() throws Exception { + protected void setUp() throws Exception { super.setUp(); late = true; useTypes = true; diff --git a/test/com/google/javascript/jscomp/PeepholeSubstituteAlternateSyntaxTest.java b/test/com/google/javascript/jscomp/PeepholeSubstituteAlternateSyntaxTest.java index 450abb68b58..b8a781e9718 100644 --- a/test/com/google/javascript/jscomp/PeepholeSubstituteAlternateSyntaxTest.java +++ b/test/com/google/javascript/jscomp/PeepholeSubstituteAlternateSyntaxTest.java @@ -35,16 +35,18 @@ public final class PeepholeSubstituteAlternateSyntaxTest extends CompilerTestCas "var Array = function f(a){};\n" + "window.foo = null;\n"; - private boolean late = true; + private boolean late; + private boolean retraverseOnChange; public PeepholeSubstituteAlternateSyntaxTest() { super(FOLD_CONSTANTS_TEST_EXTERNS); } @Override - public void setUp() throws Exception { + protected void setUp() throws Exception { super.setUp(); late = true; + retraverseOnChange = false; disableNormalize(); } @@ -52,7 +54,7 @@ public void setUp() throws Exception { protected CompilerPass getProcessor(final Compiler compiler) { PeepholeOptimizationsPass peepholePass = new PeepholeOptimizationsPass( compiler, new PeepholeSubstituteAlternateSyntax(late)); - peepholePass.setRetraverseOnChange(false); + peepholePass.setRetraverseOnChange(retraverseOnChange); return peepholePass; } @@ -482,7 +484,30 @@ public void testBindToCall3() { // correct code is in fact generated. // The FREE call wrapping should be moved out of the code generator // and into a denormalizing pass. - new StringCompareTestCase().testBindToCall3(); + disableCompareAsTree(); + retraverseOnChange = true; + late = false; + + test("(goog.bind(f.m))()", "(0,f.m)()"); + test("(goog.bind(f.m,a))()", "f.m.call(a)"); + + test("(goog.bind(f.m))(a)", "(0,f.m)(a)"); + test("(goog.bind(f.m,a))(b)", "f.m.call(a,b)"); + + test("(goog.partial(f.m))()", "(0,f.m)()"); + test("(goog.partial(f.m,a))()", "(0,f.m)(a)"); + + test("(goog.partial(f.m))(a)", "(0,f.m)(a)"); + test("(goog.partial(f.m,a))(b)", "(0,f.m)(a,b)"); + + // Without using type information we don't know "f" is a function. + testSame("f.m.bind()()"); + testSame("f.m.bind(a)()"); + testSame("f.m.bind()(a)"); + testSame("f.m.bind(a)(b)"); + + // Don't rewrite if the bind isn't the immediate call target + testSame("goog.bind(f.m).call(g)"); } public void testSimpleFunctionCall1() { @@ -519,42 +544,4 @@ public void testNoRotateInfiniteLoop() { test("1/x * (y/1 * (1/z))", "1/x * (y/1) * (1/z)"); testSame("1/x * (y/1) * (1/z)"); } - - private static class StringCompareTestCase extends CompilerTestCase { - - StringCompareTestCase() { - super("", false); - } - - @Override - protected CompilerPass getProcessor(Compiler compiler) { - CompilerPass peepholePass = - new PeepholeOptimizationsPass(compiler, - new PeepholeSubstituteAlternateSyntax(false)); - return peepholePass; - } - - public void testBindToCall3() { - test("(goog.bind(f.m))()", "(0,f.m)()"); - test("(goog.bind(f.m,a))()", "f.m.call(a)"); - - test("(goog.bind(f.m))(a)", "(0,f.m)(a)"); - test("(goog.bind(f.m,a))(b)", "f.m.call(a,b)"); - - test("(goog.partial(f.m))()", "(0,f.m)()"); - test("(goog.partial(f.m,a))()", "(0,f.m)(a)"); - - test("(goog.partial(f.m))(a)", "(0,f.m)(a)"); - test("(goog.partial(f.m,a))(b)", "(0,f.m)(a,b)"); - - // Without using type information we don't know "f" is a function. - testSame("f.m.bind()()"); - testSame("f.m.bind(a)()"); - testSame("f.m.bind()(a)"); - testSame("f.m.bind(a)(b)"); - - // Don't rewrite if the bind isn't the immediate call target - testSame("goog.bind(f.m).call(g)"); - } - } } diff --git a/test/com/google/javascript/jscomp/PolymerPassFindExternsTest.java b/test/com/google/javascript/jscomp/PolymerPassFindExternsTest.java index 623fb516ae4..42f3b9e4b18 100644 --- a/test/com/google/javascript/jscomp/PolymerPassFindExternsTest.java +++ b/test/com/google/javascript/jscomp/PolymerPassFindExternsTest.java @@ -74,10 +74,10 @@ public void process(Node externs, Node root) { @Override protected void setUp() throws Exception { super.setUp(); - allowExternsChanges(true); + allowExternsChanges(); enableTypeCheck(); - runTypeCheckAfterProcessing = true; - parseTypeInfo = true; + enableRunTypeCheckAfterProcessing(); + enableParseTypeInfo(); } @Override diff --git a/test/com/google/javascript/jscomp/PolymerPassSuppressBehaviorsTest.java b/test/com/google/javascript/jscomp/PolymerPassSuppressBehaviorsTest.java index 694c371c3fe..5e8abb47708 100644 --- a/test/com/google/javascript/jscomp/PolymerPassSuppressBehaviorsTest.java +++ b/test/com/google/javascript/jscomp/PolymerPassSuppressBehaviorsTest.java @@ -75,10 +75,10 @@ public void process(Node externs, Node root) { protected void setUp() throws Exception { super.setUp(); setAcceptedLanguage(LanguageMode.ECMASCRIPT_2017); - allowExternsChanges(true); + allowExternsChanges(); enableTypeCheck(); - runTypeCheckAfterProcessing = true; - parseTypeInfo = true; + enableRunTypeCheckAfterProcessing(); + enableParseTypeInfo(); } @Override diff --git a/test/com/google/javascript/jscomp/PolymerPassTest.java b/test/com/google/javascript/jscomp/PolymerPassTest.java index 65bede1ede6..8605504dda5 100644 --- a/test/com/google/javascript/jscomp/PolymerPassTest.java +++ b/test/com/google/javascript/jscomp/PolymerPassTest.java @@ -161,11 +161,10 @@ protected CompilerPass getProcessor(Compiler compiler) { protected void setUp() throws Exception { super.setUp(); setAcceptedLanguage(LanguageMode.ECMASCRIPT_2017); - allowExternsChanges(true); + allowExternsChanges(); enableTypeCheck(); - enableCheckAccessControls(false); - runTypeCheckAfterProcessing = true; - parseTypeInfo = true; + enableRunTypeCheckAfterProcessing(); + enableParseTypeInfo(); } @Override @@ -1168,7 +1167,7 @@ public void visit(Node n) { /** If a behavior method is {@code @protected} there is no visibility warning. */ public void testBehaviorWithProtectedMethod() { - enableCheckAccessControls(true); + enableCheckAccessControls(); test( new String[] { LINE_JOINER.join( @@ -1220,7 +1219,7 @@ public void testBehaviorWithProtectedMethod() { /** If a behavior method is {@code @private} there is a visibility warning. */ public void testBehaviorWithPrivateMethod() { - enableCheckAccessControls(true); + enableCheckAccessControls(); testWarning( new String[] { LINE_JOINER.join( diff --git a/test/com/google/javascript/jscomp/ProcessClosurePrimitivesTest.java b/test/com/google/javascript/jscomp/ProcessClosurePrimitivesTest.java index 44cb2704fb9..e489e75524d 100644 --- a/test/com/google/javascript/jscomp/ProcessClosurePrimitivesTest.java +++ b/test/com/google/javascript/jscomp/ProcessClosurePrimitivesTest.java @@ -54,7 +54,7 @@ public final class ProcessClosurePrimitivesTest extends CompilerTestCase { private boolean banGoogBase; @Override - public void setUp() throws Exception { + protected void setUp() throws Exception { super.setUp(); setAcceptedLanguage(LanguageMode.ECMASCRIPT_2017); additionalCode = null; @@ -459,7 +459,7 @@ public void testMissingProvides() { } public void testProvideInExterns() { - allowExternsChanges(true); + allowExternsChanges(); test( "/** @externs */ goog.provide('animals.Dog');" @@ -1288,7 +1288,7 @@ public void testDefineErrorCases() { public void testDefineInExterns() { String jsdoc = "/** @define {number} */\n"; - allowExternsChanges(true); + allowExternsChanges(); testErrorExterns(jsdoc + "goog.define('value');", null); testErrorExterns("goog.define('name');", MISSING_DEFINE_ANNOTATION); diff --git a/test/com/google/javascript/jscomp/ProcessDefinesTest.java b/test/com/google/javascript/jscomp/ProcessDefinesTest.java index 1589a16778a..41e7bea8d24 100644 --- a/test/com/google/javascript/jscomp/ProcessDefinesTest.java +++ b/test/com/google/javascript/jscomp/ProcessDefinesTest.java @@ -31,10 +31,6 @@ public final class ProcessDefinesTest extends TypeICompilerTestCase { public ProcessDefinesTest() { super(DEFAULT_EXTERNS + "var externMethod;"); - - // ProcessDefines emits warnings if the user tries to re-define a constant, - // but the constant is not defined anywhere in the binary. - allowSourcelessWarnings(); } private Map overrides = new HashMap<>(); @@ -44,6 +40,10 @@ public ProcessDefinesTest() { protected void setUp() throws Exception { super.setUp(); overrides.clear(); + + // ProcessDefines emits warnings if the user tries to re-define a constant, + // but the constant is not defined anywhere in the binary. + allowSourcelessWarnings(); } @Override diff --git a/test/com/google/javascript/jscomp/ReferenceCollectingCallbackTest.java b/test/com/google/javascript/jscomp/ReferenceCollectingCallbackTest.java index 12f14064967..519f6cf2de2 100644 --- a/test/com/google/javascript/jscomp/ReferenceCollectingCallbackTest.java +++ b/test/com/google/javascript/jscomp/ReferenceCollectingCallbackTest.java @@ -28,7 +28,8 @@ public final class ReferenceCollectingCallbackTest extends CompilerTestCase { private boolean es6ScopeCreator; @Override - public void setUp() { + protected void setUp() throws Exception { + super.setUp(); setLanguage(ECMASCRIPT_NEXT, ECMASCRIPT_NEXT); behavior = null; es6ScopeCreator = true; diff --git a/test/com/google/javascript/jscomp/RemoveUnusedClassPropertiesTest.java b/test/com/google/javascript/jscomp/RemoveUnusedClassPropertiesTest.java index 9f27b417ecd..27b080f2018 100644 --- a/test/com/google/javascript/jscomp/RemoveUnusedClassPropertiesTest.java +++ b/test/com/google/javascript/jscomp/RemoveUnusedClassPropertiesTest.java @@ -34,7 +34,6 @@ public final class RemoveUnusedClassPropertiesTest extends CompilerTestCase { public RemoveUnusedClassPropertiesTest() { super(EXTERNS); - enableGatherExternProperties(); } @Override @@ -45,6 +44,7 @@ protected CompilerPass getProcessor(Compiler compiler) { @Override protected void setUp() throws Exception { super.setUp(); + enableGatherExternProperties(); setAcceptedLanguage(LanguageMode.ECMASCRIPT5); } diff --git a/test/com/google/javascript/jscomp/RemoveUnusedPolyfillsTest.java b/test/com/google/javascript/jscomp/RemoveUnusedPolyfillsTest.java index d20a767da4c..d9809a75ba3 100644 --- a/test/com/google/javascript/jscomp/RemoveUnusedPolyfillsTest.java +++ b/test/com/google/javascript/jscomp/RemoveUnusedPolyfillsTest.java @@ -64,7 +64,8 @@ public RemoveUnusedPolyfillsTest() { } @Override - public void setUp() { + protected void setUp() throws Exception { + super.setUp(); // NTI warns about property accesses on * ignoreWarnings(DiagnosticGroups.NEW_CHECK_TYPES_EXTRA_CHECKS); } diff --git a/test/com/google/javascript/jscomp/RemoveUnusedVarsTest.java b/test/com/google/javascript/jscomp/RemoveUnusedVarsTest.java index 537612b9b20..f0a493b12b8 100644 --- a/test/com/google/javascript/jscomp/RemoveUnusedVarsTest.java +++ b/test/com/google/javascript/jscomp/RemoveUnusedVarsTest.java @@ -26,7 +26,6 @@ public final class RemoveUnusedVarsTest extends CompilerTestCase { public RemoveUnusedVarsTest() { super("function alert() {}"); - enableNormalize(); } @Override @@ -37,6 +36,7 @@ protected int getNumRepetitions() { @Override protected void setUp() throws Exception { super.setUp(); + enableNormalize(); removeGlobal = true; preserveFunctionExpressionNames = false; modifyCallSites = false; diff --git a/test/com/google/javascript/jscomp/RenameLocalVarsTest.java b/test/com/google/javascript/jscomp/RenameLocalVarsTest.java index 05084b131a1..42fd228fdf9 100644 --- a/test/com/google/javascript/jscomp/RenameLocalVarsTest.java +++ b/test/com/google/javascript/jscomp/RenameLocalVarsTest.java @@ -43,9 +43,10 @@ protected CompilerPass getProcessor(Compiler compiler) { } @Override - protected void setUp() { + protected void setUp() throws Exception { + super.setUp(); nameGenerator = null; - validateAstChangeMarking(false); + disableValidateAstChangeMarking(); } public void testRenameSimple() { diff --git a/test/com/google/javascript/jscomp/RenamePropertiesTest.java b/test/com/google/javascript/jscomp/RenamePropertiesTest.java index 815dd534e8e..1b017a258f6 100644 --- a/test/com/google/javascript/jscomp/RenamePropertiesTest.java +++ b/test/com/google/javascript/jscomp/RenamePropertiesTest.java @@ -31,22 +31,20 @@ public final class RenamePropertiesTest extends CompilerTestCase { "var google = { gears: { factory: {}, workerPool: {} } };"; private RenameProperties renameProperties; - - private static boolean generatePseudoNames = false; - - private VariableMap prevUsedPropertyMap = null; + private boolean generatePseudoNames; + private VariableMap prevUsedPropertyMap; public RenamePropertiesTest() { super(EXTERNS); - enableNormalize(); - enableGatherExternProperties(); } @Override - protected void tearDown() throws Exception { - super.tearDown(); - + protected void setUp() throws Exception { + super.setUp(); + generatePseudoNames = false; prevUsedPropertyMap = null; + enableNormalize(); + enableGatherExternProperties(); } @Override @@ -231,7 +229,6 @@ public void testGeneratePseudoNames() { generatePseudoNames = true; test("var foo={}; foo.bar=1; foo['abc']=2", "var foo={}; foo.$bar$=1; foo['abc']=2"); - generatePseudoNames = false; } public void testModules() { diff --git a/test/com/google/javascript/jscomp/RenameVarsTest.java b/test/com/google/javascript/jscomp/RenameVarsTest.java index ee9038c7886..7d7d54558e8 100644 --- a/test/com/google/javascript/jscomp/RenameVarsTest.java +++ b/test/com/google/javascript/jscomp/RenameVarsTest.java @@ -91,7 +91,7 @@ protected int getNumRepetitions() { @Override protected void setUp() throws Exception { super.setUp(); - validateAstChangeMarking(false); + disableValidateAstChangeMarking(); previouslyUsedMap = new VariableMap(ImmutableMap.of()); prefix = DEFAULT_PREFIX; withClosurePass = false; diff --git a/test/com/google/javascript/jscomp/ReplaceStringsTest.java b/test/com/google/javascript/jscomp/ReplaceStringsTest.java index 045cf3dbf53..bf82152ed57 100644 --- a/test/com/google/javascript/jscomp/ReplaceStringsTest.java +++ b/test/com/google/javascript/jscomp/ReplaceStringsTest.java @@ -76,9 +76,7 @@ public final class ReplaceStringsTest extends CompilerTestCase { ; public ReplaceStringsTest() { - super(EXTERNS, true); - enableNormalize(); - parseTypeInfo = true; + super(EXTERNS); } @Override @@ -92,7 +90,9 @@ protected CompilerOptions getOptions() { @Override protected void setUp() throws Exception { super.setUp(); - super.enableTypeCheck(); + enableTypeCheck(); + enableNormalize(); + enableParseTypeInfo(); functionsToInspect = defaultFunctionsToInspect; reserved = Collections.emptySet(); previous = null; diff --git a/test/com/google/javascript/jscomp/RescopeGlobalSymbolsTest.java b/test/com/google/javascript/jscomp/RescopeGlobalSymbolsTest.java index c80fce2fd2b..78eb7740ab8 100644 --- a/test/com/google/javascript/jscomp/RescopeGlobalSymbolsTest.java +++ b/test/com/google/javascript/jscomp/RescopeGlobalSymbolsTest.java @@ -26,9 +26,6 @@ public final class RescopeGlobalSymbolsTest extends CompilerTestCase { private boolean assumeCrossModuleNames = true; - public RescopeGlobalSymbolsTest() { - } - @Override protected CompilerPass getProcessor(Compiler compiler) { return new RescopeGlobalSymbols( compiler, @@ -38,7 +35,7 @@ public RescopeGlobalSymbolsTest() { } @Override - public void setUp() throws Exception { + protected void setUp() throws Exception { super.setUp(); assumeCrossModuleNames = true; } @@ -141,7 +138,7 @@ public void testForLoops_acrossModules() { "_.o={};for (_.i in _.o)_.i++;"); } - public void testFunctionStatements1() { + public void testFunctionStatements() { test( "function test(){}", "_.test=function (){}"); @@ -151,10 +148,36 @@ public void testFunctionStatements1() { "if(1)_.test=function (){}"); } - public void testFunctionStatements2() throws Exception { - StringCompare testCase = new StringCompare(); - testCase.testFreeCallSemantics(); - testCase.tearDown(); + public void testFunctionStatements_freeCallSemantics() throws Exception { + disableCompareAsTree(); + + // This triggers free call. + test( + "function x(){this};var y=function(){var val=x()||{}}", + "_.x=function(){this};_.y=function(){var val=(0,_.x)()||{}}"); + test( + "function x(){this;x()}", + "_.x=function(){this;(0,_.x)()}"); + test( + "var a=function(){this};a()", + "_.a=function(){this};(0,_.a)()"); + // Cases where free call forcing through (0, foo)() is not necessary. + test( + "var a=function(){};a()", + "_.a=function(){};_.a()"); + test( + "function a(){};a()", + "_.a=function(){};_.a()"); + test( + "var a;a=function(){};a()", + "_.a=function(){};_.a()"); + // Ambigious cases. + test( + "var a=1;a=function(){};a()", + "_.a=1;_.a=function(){};(0,_.a)()"); + test( + "var b;var a=b;a()", + "_.a=_.b;(0,_.a)()"); } public void testDeeperScopes() { @@ -355,49 +378,4 @@ public void testSameVarDeclaredInExternsAndSource2() { "var x; x = 1; window.y = 2; var f = function() { return x + window.y; }", null, null); } - - private class StringCompare extends CompilerTestCase { - - StringCompare() { - super("", false); - } - - @Override protected CompilerPass getProcessor(Compiler compiler) { - return new RescopeGlobalSymbols( - compiler, - NAMESPACE, - false, - assumeCrossModuleNames); - } - - public void testFreeCallSemantics() { - // This triggers free call. - test( - "function x(){this};var y=function(){var val=x()||{}}", - "_.x=function(){this};_.y=function(){var val=(0,_.x)()||{}}"); - test( - "function x(){this;x()}", - "_.x=function(){this;(0,_.x)()}"); - test( - "var a=function(){this};a()", - "_.a=function(){this};(0,_.a)()"); - // Cases where free call forcing through (0, foo)() is not necessary. - test( - "var a=function(){};a()", - "_.a=function(){};_.a()"); - test( - "function a(){};a()", - "_.a=function(){};_.a()"); - test( - "var a;a=function(){};a()", - "_.a=function(){};_.a()"); - // Ambigious cases. - test( - "var a=1;a=function(){};a()", - "_.a=1;_.a=function(){};(0,_.a)()"); - test( - "var b;var a=b;a()", - "_.a=_.b;(0,_.a)()"); - } - } } diff --git a/test/com/google/javascript/jscomp/RewriteAsyncFunctionsTest.java b/test/com/google/javascript/jscomp/RewriteAsyncFunctionsTest.java index bae2475b586..221be7bc46e 100644 --- a/test/com/google/javascript/jscomp/RewriteAsyncFunctionsTest.java +++ b/test/com/google/javascript/jscomp/RewriteAsyncFunctionsTest.java @@ -22,10 +22,11 @@ public class RewriteAsyncFunctionsTest extends CompilerTestCase { @Override - public void setUp() { + protected void setUp() throws Exception { + super.setUp(); setAcceptedLanguage(LanguageMode.ECMASCRIPT_NEXT); setLanguageOut(LanguageMode.ECMASCRIPT3); - runTypeCheckAfterProcessing = true; + enableRunTypeCheckAfterProcessing(); } @Override diff --git a/test/com/google/javascript/jscomp/RewritePolyfillsTest.java b/test/com/google/javascript/jscomp/RewritePolyfillsTest.java index b14f36e3750..0f6323b88e2 100644 --- a/test/com/google/javascript/jscomp/RewritePolyfillsTest.java +++ b/test/com/google/javascript/jscomp/RewritePolyfillsTest.java @@ -46,7 +46,7 @@ private void addLibrary(String name, String from, String to, String library) { } @Override - public void setUp() throws Exception { + protected void setUp() throws Exception { super.setUp(); injectableLibraries.clear(); polyfillTable.clear(); diff --git a/test/com/google/javascript/jscomp/RuntimeTypeCheckTest.java b/test/com/google/javascript/jscomp/RuntimeTypeCheckTest.java index 821eec6f938..d3c5c853a3d 100644 --- a/test/com/google/javascript/jscomp/RuntimeTypeCheckTest.java +++ b/test/com/google/javascript/jscomp/RuntimeTypeCheckTest.java @@ -26,12 +26,13 @@ public final class RuntimeTypeCheckTest extends CompilerTestCase { public RuntimeTypeCheckTest() { super("/** @const */ var undefined;"); - enableTypeCheck(); } @Override - protected void setUp() { - super.enableLineNumberCheck(false); + protected void setUp() throws Exception { + super.setUp(); + enableTypeCheck(); + disableLineNumberCheck(); enableNormalize(); } diff --git a/test/com/google/javascript/jscomp/SanityCheckTest.java b/test/com/google/javascript/jscomp/SanityCheckTest.java index 048ac7df9f4..342e2716a01 100644 --- a/test/com/google/javascript/jscomp/SanityCheckTest.java +++ b/test/com/google/javascript/jscomp/SanityCheckTest.java @@ -29,11 +29,9 @@ public final class SanityCheckTest extends CompilerTestCase { private CompilerPass otherPass = null; - public SanityCheckTest() { - super("", false); - } - - @Override public void setUp() { + @Override protected void setUp() throws Exception { + super.setUp(); + disableCompareAsTree(); otherPass = null; } diff --git a/test/com/google/javascript/jscomp/ScopedAliasesTest.java b/test/com/google/javascript/jscomp/ScopedAliasesTest.java index 5d5cee0ede0..25887f16f1f 100644 --- a/test/com/google/javascript/jscomp/ScopedAliasesTest.java +++ b/test/com/google/javascript/jscomp/ScopedAliasesTest.java @@ -53,12 +53,6 @@ public ScopedAliasesTest() { super(EXTERNS); } - @Override - public void tearDown() throws Exception { - super.tearDown(); - disableTypeCheck(); - } - private void testScoped(String code, String expected, LanguageMode lang) { setAcceptedLanguage(lang); test(GOOG_SCOPE_START_BLOCK + code + GOOG_SCOPE_END_BLOCK, expected); @@ -428,7 +422,7 @@ public void testObjectLiteralComputedPropertyNames() { public void testJsDocNotIgnored() { enableTypeCheck(); - runTypeCheckAfterProcessing = true; + enableRunTypeCheckAfterProcessing(); String externs = LINE_JOINER.join( @@ -599,7 +593,7 @@ public void testJsDocTypedef() { public void testJsDocRecord() { enableTypeCheck(); - runTypeCheckAfterProcessing = true; + enableRunTypeCheckAfterProcessing(); test( LINE_JOINER.join( "/** @const */ var ns = {};", @@ -727,7 +721,7 @@ public void testIssue772() { public void testInlineJsDoc() { enableTypeCheck(); - runTypeCheckAfterProcessing = true; + enableRunTypeCheckAfterProcessing(); test(LINE_JOINER.join( "/** @const */ var ns = {};", "/** @constructor */ ns.A = function() {};", @@ -746,7 +740,7 @@ public void testInlineJsDoc() { public void testInlineReturn() { enableTypeCheck(); - runTypeCheckAfterProcessing = true; + enableRunTypeCheckAfterProcessing(); test(LINE_JOINER.join( "/** @const */ var ns = {};", "/** @constructor */ ns.A = function() {};", @@ -766,7 +760,7 @@ public void testInlineReturn() { public void testInlineParam() { enableTypeCheck(); - runTypeCheckAfterProcessing = true; + enableRunTypeCheckAfterProcessing(); test(LINE_JOINER.join( "/** @const */ var ns = {};", "/** @constructor */ ns.A = function() {};", @@ -1034,7 +1028,7 @@ public void testObjectPattern() { public void testTypeCheck() { enableTypeCheck(); - runTypeCheckAfterProcessing = true; + enableRunTypeCheckAfterProcessing(); test( LINE_JOINER.join( diff --git a/test/com/google/javascript/jscomp/SideEffectsAnalysisTest.java b/test/com/google/javascript/jscomp/SideEffectsAnalysisTest.java index 13a247c564e..ac8daaf059b 100644 --- a/test/com/google/javascript/jscomp/SideEffectsAnalysisTest.java +++ b/test/com/google/javascript/jscomp/SideEffectsAnalysisTest.java @@ -65,7 +65,7 @@ public void process(Node externs, Node root) { } @Override - public void setUp() throws Exception { + protected void setUp() throws Exception { super.setUp(); currentAnalysis = null; diff --git a/test/com/google/javascript/jscomp/SingleFileCheckRequiresTest.java b/test/com/google/javascript/jscomp/SingleFileCheckRequiresTest.java index afaf8f433dc..1c6dd4b09d4 100644 --- a/test/com/google/javascript/jscomp/SingleFileCheckRequiresTest.java +++ b/test/com/google/javascript/jscomp/SingleFileCheckRequiresTest.java @@ -25,7 +25,7 @@ */ public final class SingleFileCheckRequiresTest extends CompilerTestCase { @Override - public void setUp() throws Exception { + protected void setUp() throws Exception { super.setUp(); setAcceptedLanguage(LanguageMode.ECMASCRIPT_2017); } diff --git a/test/com/google/javascript/jscomp/StatementFusionTest.java b/test/com/google/javascript/jscomp/StatementFusionTest.java index 60763197ff7..b585c6ca462 100644 --- a/test/com/google/javascript/jscomp/StatementFusionTest.java +++ b/test/com/google/javascript/jscomp/StatementFusionTest.java @@ -25,7 +25,7 @@ public final class StatementFusionTest extends CompilerTestCase { private boolean favorsCommas = false; @Override - public void setUp() throws Exception { + protected void setUp() throws Exception { super.setUp(); favorsCommas = false; setAcceptedLanguage(CompilerOptions.LanguageMode.ECMASCRIPT5); diff --git a/test/com/google/javascript/jscomp/StripCodeTest.java b/test/com/google/javascript/jscomp/StripCodeTest.java index 613f9535d8b..52544fd9f60 100644 --- a/test/com/google/javascript/jscomp/StripCodeTest.java +++ b/test/com/google/javascript/jscomp/StripCodeTest.java @@ -28,7 +28,7 @@ public final class StripCodeTest extends CompilerTestCase { private static final String EXTERNS = ""; public StripCodeTest() { - super(EXTERNS, true); + super(EXTERNS); } /** diff --git a/test/com/google/javascript/jscomp/SubstituteEs6SyntaxTest.java b/test/com/google/javascript/jscomp/SubstituteEs6SyntaxTest.java index 6094106916a..0c01ef92d63 100644 --- a/test/com/google/javascript/jscomp/SubstituteEs6SyntaxTest.java +++ b/test/com/google/javascript/jscomp/SubstituteEs6SyntaxTest.java @@ -22,7 +22,8 @@ public final class SubstituteEs6SyntaxTest extends CompilerTestCase { @Override - public void setUp() { + protected void setUp() throws Exception { + super.setUp(); setAcceptedLanguage(CompilerOptions.LanguageMode.ECMASCRIPT_2015); } diff --git a/test/com/google/javascript/jscomp/SymbolTableTest.java b/test/com/google/javascript/jscomp/SymbolTableTest.java index 496da34b12c..d6419ec3313 100644 --- a/test/com/google/javascript/jscomp/SymbolTableTest.java +++ b/test/com/google/javascript/jscomp/SymbolTableTest.java @@ -50,7 +50,7 @@ public final class SymbolTableTest extends TestCase { private CompilerOptions options; @Override - public void setUp() throws Exception { + protected void setUp() throws Exception { super.setUp(); options = new CompilerOptions(); diff --git a/test/com/google/javascript/jscomp/TypeCheckFunctionCheckTest.java b/test/com/google/javascript/jscomp/TypeCheckFunctionCheckTest.java index e6d12001917..fd64bb7c1a4 100644 --- a/test/com/google/javascript/jscomp/TypeCheckFunctionCheckTest.java +++ b/test/com/google/javascript/jscomp/TypeCheckFunctionCheckTest.java @@ -30,12 +30,8 @@ public final class TypeCheckFunctionCheckTest extends CompilerTestCase { private CodingConvention convention = null; - public TypeCheckFunctionCheckTest() { - parseTypeInfo = true; - enableTypeCheck(); - } - - @Override protected CompilerPass getProcessor(Compiler compiler) { + @Override + protected CompilerPass getProcessor(Compiler compiler) { return new CompilerPass() { @Override public void process(Node externs, Node root) {} @@ -55,9 +51,11 @@ protected int getNumRepetitions() { } @Override - public void setUp() throws Exception { + protected void setUp() throws Exception { super.setUp(); convention = new GoogleCodingConvention(); + enableParseTypeInfo(); + enableTypeCheck(); } public void testFunctionAritySimple() { diff --git a/test/com/google/javascript/jscomp/TypeICompilerTestCase.java b/test/com/google/javascript/jscomp/TypeICompilerTestCase.java index df43c4b3780..b3ada4409d0 100644 --- a/test/com/google/javascript/jscomp/TypeICompilerTestCase.java +++ b/test/com/google/javascript/jscomp/TypeICompilerTestCase.java @@ -55,10 +55,6 @@ public TypeICompilerTestCase(String defaultExterns) { super(defaultExterns); } - public TypeICompilerTestCase(String defaultExterns, boolean compareAsTree) { - super(defaultExterns, compareAsTree); - } - @Override protected void setUp() throws Exception { super.setUp(); diff --git a/test/com/google/javascript/jscomp/TypeValidatorTest.java b/test/com/google/javascript/jscomp/TypeValidatorTest.java index af47d833a03..541c390650c 100644 --- a/test/com/google/javascript/jscomp/TypeValidatorTest.java +++ b/test/com/google/javascript/jscomp/TypeValidatorTest.java @@ -35,7 +35,9 @@ * @author nicksantos@google.com (Nick Santos) */ public final class TypeValidatorTest extends CompilerTestCase { - public TypeValidatorTest() { + @Override + protected void setUp() throws Exception { + super.setUp(); enableTypeCheck(); } diff --git a/test/com/google/javascript/jscomp/UnreachableCodeEliminationTest.java b/test/com/google/javascript/jscomp/UnreachableCodeEliminationTest.java index 0dca61aa0c6..74bd96c1b21 100644 --- a/test/com/google/javascript/jscomp/UnreachableCodeEliminationTest.java +++ b/test/com/google/javascript/jscomp/UnreachableCodeEliminationTest.java @@ -28,7 +28,7 @@ protected CompilerPass getProcessor(Compiler compiler) { return new UnreachableCodeElimination(compiler, removeNoOpStatements); } - @Override public void setUp() throws Exception { + @Override protected void setUp() throws Exception { super.setUp(); enableComputeSideEffects(); removeNoOpStatements = true; diff --git a/test/com/google/javascript/jscomp/VarCheckTest.java b/test/com/google/javascript/jscomp/VarCheckTest.java index c30962c900b..e2c4f6b490d 100644 --- a/test/com/google/javascript/jscomp/VarCheckTest.java +++ b/test/com/google/javascript/jscomp/VarCheckTest.java @@ -42,7 +42,7 @@ protected void setUp() throws Exception { super.setUp(); setAcceptedLanguage(LanguageMode.ECMASCRIPT_2017); // Setup value set by individual tests to the appropriate defaults. - super.allowExternsChanges(true); + allowExternsChanges(); strictModuleDepErrorLevel = CheckLevel.OFF; externValidationErrorLevel = null; sanityCheck = false; @@ -621,7 +621,7 @@ public void checkSynthesizedExtern( public void checkSynthesizedExtern( String extern, String input, String expectedExtern) { declarationCheck = !sanityCheck; - this.enableCompareAsTree(false); + disableCompareAsTree(); testExternChanges(extern, input, expectedExtern); } } diff --git a/test/com/google/javascript/jscomp/VariableReferenceCheckTest.java b/test/com/google/javascript/jscomp/VariableReferenceCheckTest.java index 1637b09d9e9..980cfc4ea61 100644 --- a/test/com/google/javascript/jscomp/VariableReferenceCheckTest.java +++ b/test/com/google/javascript/jscomp/VariableReferenceCheckTest.java @@ -57,7 +57,7 @@ protected CompilerPass getProcessor(Compiler compiler) { } @Override - public void setUp() throws Exception { + protected void setUp() throws Exception { super.setUp(); setAcceptedLanguage(LanguageMode.ECMASCRIPT_2017); enableUnusedLocalAssignmentCheck = false; diff --git a/test/com/google/javascript/jscomp/WhitespaceWrapGoogModulesTest.java b/test/com/google/javascript/jscomp/WhitespaceWrapGoogModulesTest.java index 7acac085230..058d184822c 100644 --- a/test/com/google/javascript/jscomp/WhitespaceWrapGoogModulesTest.java +++ b/test/com/google/javascript/jscomp/WhitespaceWrapGoogModulesTest.java @@ -22,12 +22,13 @@ public class WhitespaceWrapGoogModulesTest extends CompilerTestCase { private LanguageMode languageOut; @Override - public void setUp() { + protected void setUp() throws Exception { + super.setUp(); setAcceptedLanguage(LanguageMode.ECMASCRIPT_2015); languageOut = LanguageMode.ECMASCRIPT_2015; disableTypeCheck(); - enableCompareAsTree(false); + disableCompareAsTree(); // otherwise "use strict" in the expected output moves, // from where it should be (deliberately to match ClosureBundler), // to the top of the AST and breaks the comparison. diff --git a/test/com/google/javascript/jscomp/lint/CheckEnumsTest.java b/test/com/google/javascript/jscomp/lint/CheckEnumsTest.java index bc03fe715b5..58efea6cdf1 100644 --- a/test/com/google/javascript/jscomp/lint/CheckEnumsTest.java +++ b/test/com/google/javascript/jscomp/lint/CheckEnumsTest.java @@ -45,7 +45,8 @@ protected CompilerOptions getOptions(CompilerOptions options) { } @Override - public void setUp() { + protected void setUp() throws Exception { + super.setUp(); setAcceptedLanguage(LanguageMode.ECMASCRIPT_2017); } diff --git a/test/com/google/javascript/jscomp/lint/CheckInterfacesTest.java b/test/com/google/javascript/jscomp/lint/CheckInterfacesTest.java index 64e2a2e8238..4fbf7c9f1ee 100644 --- a/test/com/google/javascript/jscomp/lint/CheckInterfacesTest.java +++ b/test/com/google/javascript/jscomp/lint/CheckInterfacesTest.java @@ -39,7 +39,8 @@ protected CompilerOptions getOptions(CompilerOptions options) { return options; } - public void setUp() { + protected void setUp() throws Exception { + super.setUp(); enableTypeCheck(); } diff --git a/test/com/google/javascript/jscomp/lint/CheckJSDocStyleTest.java b/test/com/google/javascript/jscomp/lint/CheckJSDocStyleTest.java index 0822b4ae178..9031a69aea9 100644 --- a/test/com/google/javascript/jscomp/lint/CheckJSDocStyleTest.java +++ b/test/com/google/javascript/jscomp/lint/CheckJSDocStyleTest.java @@ -50,7 +50,7 @@ public CheckJSDocStyleTest() { private CodingConvention codingConvention; @Override - public void setUp() throws Exception { + protected void setUp() throws Exception { super.setUp(); codingConvention = new GoogleCodingConvention(); setAcceptedLanguage(LanguageMode.ECMASCRIPT_NEXT); diff --git a/test/com/google/javascript/jscomp/lint/CheckMissingSemicolonTest.java b/test/com/google/javascript/jscomp/lint/CheckMissingSemicolonTest.java index d61ff2d8ee7..e5fb6ae5c7f 100644 --- a/test/com/google/javascript/jscomp/lint/CheckMissingSemicolonTest.java +++ b/test/com/google/javascript/jscomp/lint/CheckMissingSemicolonTest.java @@ -37,7 +37,8 @@ protected CompilerOptions getOptions(CompilerOptions options) { } @Override - public void setUp() { + protected void setUp() throws Exception { + super.setUp(); setAcceptedLanguage(LanguageMode.ECMASCRIPT_2017); } diff --git a/test/com/google/javascript/jscomp/lint/CheckRequiresAndProvidesSortedTest.java b/test/com/google/javascript/jscomp/lint/CheckRequiresAndProvidesSortedTest.java index c24db86e1f7..8b2f84dae47 100644 --- a/test/com/google/javascript/jscomp/lint/CheckRequiresAndProvidesSortedTest.java +++ b/test/com/google/javascript/jscomp/lint/CheckRequiresAndProvidesSortedTest.java @@ -37,7 +37,8 @@ protected int getNumRepetitions() { } @Override - public void setUp() { + protected void setUp() throws Exception { + super.setUp(); setAcceptedLanguage(LanguageMode.ECMASCRIPT_2017); } diff --git a/test/com/google/javascript/jscomp/lint/CheckUnusedLabelsTest.java b/test/com/google/javascript/jscomp/lint/CheckUnusedLabelsTest.java index ee9b01c2a4a..5c7fba93134 100644 --- a/test/com/google/javascript/jscomp/lint/CheckUnusedLabelsTest.java +++ b/test/com/google/javascript/jscomp/lint/CheckUnusedLabelsTest.java @@ -43,7 +43,8 @@ protected CompilerOptions getOptions(CompilerOptions options) { } @Override - public void setUp() { + protected void setUp() throws Exception { + super.setUp(); setAcceptedLanguage(LanguageMode.ECMASCRIPT_2017); } diff --git a/test/com/google/javascript/jscomp/lint/CheckUselessBlocksTest.java b/test/com/google/javascript/jscomp/lint/CheckUselessBlocksTest.java index 007ec1db0e4..be97f37ac1f 100644 --- a/test/com/google/javascript/jscomp/lint/CheckUselessBlocksTest.java +++ b/test/com/google/javascript/jscomp/lint/CheckUselessBlocksTest.java @@ -43,7 +43,8 @@ protected CompilerOptions getOptions(CompilerOptions options) { } @Override - public void setUp() { + protected void setUp() throws Exception { + super.setUp(); setAcceptedLanguage(LanguageMode.ECMASCRIPT_2017); }