1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117
|
/*
* Copyright 2012 The Closure Compiler Authors.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package com.google.javascript.jscomp;
/**
* Tests for CheckSuspiciousCode
*/
public class CheckSuspiciousCodeTest extends CompilerTestCase {
public CheckSuspiciousCodeTest() {
this.parseTypeInfo = true;
}
@Override
protected CompilerPass getProcessor(Compiler compiler) {
return new CombinedCompilerPass(compiler,
new CheckSuspiciousCode());
}
@Override
protected int getNumRepetitions() {
return 1;
}
public void test(String js, DiagnosticType error) {
test(js, js, null, error);
}
public void testSuspiciousSemi() {
final DiagnosticType e = CheckSuspiciousCode.SUSPICIOUS_SEMICOLON;
final DiagnosticType ok = null; // code is 'ok', verify no warning
test("if(x()) x = y;", ok);
test("if(x()); x = y;", e); // I've had this bug, damned ;
test("if(x()){} x = y;", ok);
test("if(x()) x = y; else y=z;", ok);
test("if(x()); else y=z;", e);
test("if(x()){} else y=z;", ok);
test("if(x()) x = y; else;", e);
test("if(x()) x = y; else {}", ok);
test("while(x()) x = y;", ok);
test("while(x()); x = y;", e);
test("while(x()){} x = y;", ok);
test("while(x()); {x = y}", e);
test("while(x()){} {x = y}", ok);
test("for(;;) x = y;", ok);
test("for(;;); x = y;", e);
test("for(;;){} x = y;", ok);
test("for(x in y) x = y;", ok);
test("for(x in y); x = y;", e);
test("for(x in y){} x = y;", ok);
}
private void testReportNaN(String js) {
testSame(js, CheckSuspiciousCode.SUSPICIOUS_COMPARISON_WITH_NAN);
}
public void testComparison1() {
testReportNaN("x == NaN");
testReportNaN("x != NaN");
testReportNaN("x === NaN");
testReportNaN("x !== NaN");
testReportNaN("x < NaN");
testReportNaN("x <= NaN");
testReportNaN("x > NaN");
testReportNaN("x >= NaN");
}
public void testComparison2() {
testReportNaN("NaN == x");
testReportNaN("NaN != x");
testReportNaN("NaN === x");
testReportNaN("NaN !== x");
testReportNaN("NaN < x");
testReportNaN("NaN <= x");
testReportNaN("NaN > x");
testReportNaN("NaN >= x");
}
public void testComparison3() {
testReportNaN("x == 0/0");
testReportNaN("x != 0/0");
testReportNaN("x === 0/0");
testReportNaN("x !== 0/0");
testReportNaN("x < 0/0");
testReportNaN("x <= 0/0");
testReportNaN("x > 0/0");
testReportNaN("x >= 0/0");
}
public void testComparison4() {
testReportNaN("0/0 == x");
testReportNaN("0/0 != x");
testReportNaN("0/0 === x");
testReportNaN("0/0 !== x");
testReportNaN("0/0 < x");
testReportNaN("0/0 <= x");
testReportNaN("0/0 > x");
testReportNaN("0/0 >= x");
}
}
|