/*****************************************************************************
* Licensed to the Apache Software Foundation (ASF) under one *
* or more contributor license agreements. See the NOTICE file *
* distributed with this work for additional information *
* regarding copyright ownership. The ASF licenses this file *
* to you 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. *
* *
* This file is part of the BeanShell Java Scripting distribution. *
* Documentation and updates may be found at http://www.beanshell.org/ *
* Patrick Niemeyer (pat@pat.net) *
* Author of Learning Java, O'Reilly & Associates *
* *
*****************************************************************************/
package bsh;
import org.junit.Test;
import org.junit.runner.RunWith;
import javax.script.ScriptEngine;
import javax.script.ScriptEngineManager;
import static bsh.TestUtil.eval;
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertNotNull;
@RunWith(FilteredTestRunner.class)
public class GoogleReports {
@Test
@SuppressWarnings({"ConstantIfStatement"})
public void while_loop() throws Exception {
int loopCount = 0;
do {
loopCount++;
if (loopCount > 100) {
break;
}
if (true) {
continue;
}
} while (false);
assertEquals(1, loopCount);
loopCount = (Integer) eval("int loopCount = 0;", "do{", " loopCount++;", " if (loopCount > 100) break;", " if (true) continue;", "} while (false);", "return loopCount");
assertEquals(1, loopCount);
loopCount = (Integer) eval("int loopCount = 0;", "while (loopCount < 1) {", " loopCount++;", " if (loopCount > 100) return loopCount;", " if (true) continue;", "}", "return loopCount");
assertEquals(1, loopCount);
assertEquals(Boolean.TRUE, eval("while(true) { break; return false; } return true;"));
assertEquals(Boolean.TRUE, eval("do { break; return false; } while(true); return true;"));
loopCount = (Integer) eval("int loopCount = 0;", "while (++loopCount < 2);", "return loopCount");
assertEquals(2, loopCount);
loopCount = (Integer) eval("int loopCount = 0;", "do { } while (++loopCount < 2);", "return loopCount");
assertEquals(2, loopCount);
}
/**
* issue#60
*/
@Test
public void accessibility_issue_a() throws Exception {
final Interpreter interpreter = new Interpreter();
interpreter.set("x", this);
Capabilities.setAccessibility(true);
assertEquals("private-Integer", interpreter.eval("return x.issue6(new Integer(9));"));
Capabilities.setAccessibility(false);
assertEquals("public-Number", interpreter.eval("return x.issue6(new Integer(9));"));
}
/**
* issue#60
*/
@Test
public void accessibility_issue_b() throws Exception {
final Interpreter interpreter = new Interpreter();
interpreter.set("x", this);
assertEquals("public-Number", interpreter.eval("return x.issue6(new Integer(9));"));
Capabilities.setAccessibility(true);
assertEquals("private-Integer", interpreter.eval("return x.issue6(new Integer(9));"));
}
/**
* issue#10
*/
@Test(expected = ParseException.class)
public void parse_error() throws Exception {
eval("\1;");
}
/**
* issue#11
*/
@Test
public void return_in_try_block_does_not_return() throws Exception {
assertEquals(
"in try block",
eval(
/*1*/ "try {",
/*2*/ " return \"in try block\";",
/*3*/ "} finally {}" +
/*4*/ "return \"after try block\";"));
}
/**
* issue#12
*/
@Test
public void override_method() throws Exception {
assertEquals(
"changed",
eval(
/*1*/ "foo() { return \"original\";}",
/*2*/ "foo() { return \"changed\";}",
/*3*/ "return foo();"));
}
/**
* issue#32
*/
@Test
public void binary_operator_or() throws Exception {
assertEquals(true, eval("return true | true"));
assertEquals(true, eval("return true | false"));
assertEquals(true, eval("return false | true"));
assertEquals(false, eval("return false | false"));
}
/**
* issue#32
*/
@Test
public void binary_operator_and() throws Exception {
assertEquals(true, eval("return true & true"));
assertEquals(false, eval("return true & false"));
assertEquals(false, eval("return false & true"));
assertEquals(false, eval("return false & false"));
}
/**
* issue#32
*/
@Test
public void binary_operator_xor() throws Exception {
assertEquals(false, eval("return true ^ true"));
assertEquals(true, eval("return true ^ false"));
assertEquals(true, eval("return false ^ true"));
assertEquals(false, eval("return false ^ false"));
}
/*
* helpers
*/
private static String issue6(Integer ignored) {
return "private-Integer";
}
public static String issue6(Number ignored) {
return "public-Number";
}
}