package jscover.instrument; import org.junit.Test; import org.mozilla.javascript.CompilerEnvirons; import org.mozilla.javascript.Context; import org.mozilla.javascript.Parser; import org.mozilla.javascript.Token; import org.mozilla.javascript.ast.AstNode; import org.mozilla.javascript.ast.AstRoot; import static org.hamcrest.MatcherAssert.assertThat; import static org.hamcrest.Matchers.is; public class BranchHelperTest { private static CompilerEnvirons compilerEnv = new CompilerEnvirons(); private BranchHelper helper = new BranchHelper(); private Parser parser = new Parser(); static { // compilerEnv.setAllowMemberExprAsFunctionName(true); compilerEnv.setLanguageVersion(Context.VERSION_1_8); compilerEnv.setStrictMode(false); } @Test public void shouldDetectBoolean() { String script = "x = y || 7;"; AstRoot astRoot = parser.parse(script, null, 1); AstNode orNode = NodeTestHelper.findNode(astRoot, Token.OR); AstNode assignNode = NodeTestHelper.findNode(astRoot, Token.ASSIGN); assertThat(helper.isBoolean(orNode), is(true)); assertThat(helper.isBoolean(assignNode), is(false)); } @Test public void shouldDetectCoalesce() { String script = "x = y || {};"; AstRoot astRoot = parser.parse(script, null, 1); AstNode orNode = NodeTestHelper.findNode(astRoot, Token.OR); assertThat(helper.isCoalesce(orNode), is(true)); } @Test public void shouldDetectCoalesceOnReturn() { String script = "function f(y) {return y || {};}"; AstRoot astRoot = parser.parse(script, null, 1); AstNode orNode = NodeTestHelper.findNode(astRoot, Token.OR); assertThat(helper.isCoalesce(orNode), is(true)); } @Test public void shouldDetectCoalesceWithVariableDeclaration() { String script = "var x = y || {};"; AstRoot astRoot = parser.parse(script, null, 1); AstNode orNode = NodeTestHelper.findNode(astRoot, Token.OR); assertThat(helper.isCoalesce(orNode), is(true)); } @Test public void shouldNotDetectCoalesce() { String script = "if (a || b) ;"; AstRoot astRoot = parser.parse(script, null, 1); AstNode orNode = NodeTestHelper.findNode(astRoot, Token.OR); assertThat(helper.isCoalesce(orNode), is(false)); } @Test public void shouldNotDetectAndAsCoalesce() { String script = "x = y > 7;"; AstRoot astRoot = parser.parse(script, null, 1); AstNode node = NodeTestHelper.findNode(astRoot, Token.GT); assertThat(helper.isCoalesce(node), is(false)); } }