This repository has been archived on 2023-06-18. You can view files and clone it, but cannot push or open issues or pull requests.
ima02/resources/defects4j-checkout-closure-1f/test/com/google/javascript/jscomp/AstValidatorTest.java
github-classroom[bot] e42e547e48
Initial commit
2023-04-25 11:33:41 +00:00

145 lines
3.7 KiB
Java

/*
* Copyright 2011 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;
import com.google.javascript.jscomp.AstValidator.ViolationHandler;
import com.google.javascript.rhino.InputId;
import com.google.javascript.rhino.Node;
import com.google.javascript.rhino.Token;
import com.google.javascript.rhino.jstype.SimpleSourceFile;
/**
* @author johnlenz@google.com (John Lenz)
*/
public class AstValidatorTest extends CompilerTestCase {
private boolean lastCheckWasValid = true;
@Override
protected CompilerPass getProcessor(Compiler compiler) {
return createValidator();
}
private AstValidator createValidator() {
lastCheckWasValid = true;
return new AstValidator(new ViolationHandler() {
@Override
public void handleViolation(String message, Node n) {
lastCheckWasValid = false;
}
});
}
@Override
protected int getNumRepetitions() {
return 1;
}
@Override
protected void setUp() throws Exception {
super.enableAstValidation(false);
super.disableNormalize();
super.enableLineNumberCheck(false);
super.setUp();
}
public void testForIn() {
valid("for(var a in b);");
valid("for(var a = 1 in b);");
valid("for(a in b);");
valid("for(a in []);");
valid("for(a in {});");
}
public void testDebugger() {
valid("debugger;");
}
public void testValidScript() {
Node n = new Node(Token.SCRIPT);
expectInvalid(n, Check.SCRIPT);
n.setInputId(new InputId("something_input"));
n.setStaticSourceFile(new SimpleSourceFile("something", false));
expectValid(n, Check.SCRIPT);
expectInvalid(n, Check.STATEMENT);
expectInvalid(n, Check.EXPRESSION);
}
public void testValidStatement1() {
Node n = new Node(Token.RETURN);
expectInvalid(n, Check.EXPRESSION);
expectValid(n, Check.STATEMENT);
expectInvalid(n, Check.SCRIPT);
}
public void testValidExpression1() {
Node n = new Node(Token.ARRAYLIT, new Node(Token.EMPTY));
expectValid(n, Check.EXPRESSION);
expectInvalid(n, Check.STATEMENT);
expectInvalid(n, Check.SCRIPT);
}
public void testValidExpression2() {
Node n = new Node(Token.NOT, new Node(Token.TRUE));
expectValid(n, Check.EXPRESSION);
expectInvalid(n, Check.STATEMENT);
expectInvalid(n, Check.SCRIPT);
}
public void testInvalidEmptyStatement() {
Node n = new Node(Token.EMPTY, new Node(Token.TRUE));
expectInvalid(n, Check.STATEMENT);
n.detachChildren();
expectValid(n, Check.STATEMENT);
}
private void valid(String code) {
testSame(code);
assertTrue(lastCheckWasValid);
}
private enum Check {
SCRIPT,
STATEMENT,
EXPRESSION
}
private boolean doCheck(Node n, Check level) {
AstValidator validator = createValidator();
switch (level) {
case SCRIPT:
validator.validateScript(n);
break;
case STATEMENT:
validator.validateStatement(n);
break;
case EXPRESSION:
validator.validateExpression(n);
break;
}
return lastCheckWasValid;
}
private void expectInvalid(Node n, Check level) {
assertFalse(doCheck(n, level));
}
private void expectValid(Node n, Check level) {
assertTrue(doCheck(n, level));
}
}