| /* |
| * Copyright 2008 Google Inc. |
| * |
| * 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.gwt.dev.jjs.test; |
| |
| import com.google.gwt.core.client.GWT; |
| import com.google.gwt.junit.client.GWTTestCase; |
| |
| /** |
| * Most of these tests (the "do" ones guarded by isScript tests) verify that |
| * declarations in pruned code still happen. Those tests do not run reliably in |
| * Development Mode due to browser inconsistencies; however it should run in |
| * Production Mode due to our normalizations. |
| */ |
| public class JsStaticEvalTest extends GWTTestCase { |
| @SuppressWarnings("unused") |
| private static volatile boolean TRUE = true; |
| |
| @Override |
| public String getModuleName() { |
| return "com.google.gwt.dev.jjs.CompilerSuite"; |
| } |
| |
| public void testAfterReturn() { |
| if (GWT.isScript()) { |
| doTestAfterReturn(); |
| } |
| } |
| |
| public void testAfterReturnInBlock() { |
| if (GWT.isScript()) { |
| doTestAfterReturnInBlock(); |
| } |
| } |
| |
| public void testConditionalFalse() { |
| if (GWT.isScript()) { |
| doTestConditionalFalse(); |
| } |
| } |
| |
| public void testConditionalTrue() { |
| if (GWT.isScript()) { |
| doTestConditionalTrue(); |
| } |
| } |
| |
| public void testForFalse() { |
| if (GWT.isScript()) { |
| doTestForFalse(); |
| } |
| } |
| |
| public void testIfFalse() { |
| if (GWT.isScript()) { |
| doTestIfFalse(); |
| } |
| } |
| |
| public void testOrder1() { |
| if (GWT.isScript()) { |
| doTestOrder1(); |
| } |
| } |
| |
| public void testOrder2() { |
| if (GWT.isScript()) { |
| doTestOrder2(); |
| } |
| } |
| |
| public void testShortCircuitAnd() { |
| if (GWT.isScript()) { |
| doTestShortCircuitAnd(); |
| } |
| } |
| |
| public void testShortCircuitOr() { |
| if (GWT.isScript()) { |
| doTestShortCircuitOr(); |
| } |
| } |
| |
| public native void testTripleNegate() /*-{ |
| @junit.framework.Assert::assertFalse(Z)( |
| !!!@com.google.gwt.dev.jjs.test.JsStaticEvalTest::TRUE); |
| }-*/; |
| |
| public void testWhileFalse() { |
| if (GWT.isScript()) { |
| doTestWhileFalse(); |
| } |
| } |
| |
| private native void doTestAfterReturn() /*-{ |
| func(); |
| @junit.framework.Assert::assertTrue(Z)(result); |
| return; |
| var result; |
| function func() { |
| result = true; |
| } |
| }-*/; |
| |
| private native void doTestAfterReturnInBlock() /*-{ |
| func(); |
| @junit.framework.Assert::assertTrue(Z)(result); |
| return; |
| { |
| var result; |
| function func() { |
| result = true; |
| } |
| } |
| }-*/; |
| |
| private native void doTestConditionalFalse() /*-{ |
| func(); |
| @junit.framework.Assert::assertTrue(Z)(result); |
| return; |
| var result; |
| var toss = false ? function func() { |
| result = true; |
| } : false; |
| }-*/; |
| |
| private native void doTestConditionalTrue() /*-{ |
| func(); |
| @junit.framework.Assert::assertTrue(Z)(result); |
| return; |
| var result; |
| var toss = true ? true : function func() { |
| result = true; |
| }; |
| }-*/; |
| |
| private native void doTestForFalse() /*-{ |
| func(); |
| @junit.framework.Assert::assertTrue(Z)(result); |
| return; |
| for (;false;) { |
| var result; |
| function func() { |
| result = true; |
| } |
| } |
| }-*/; |
| |
| private native void doTestIfFalse() /*-{ |
| func(); |
| @junit.framework.Assert::assertTrue(Z)(result); |
| return; |
| if (false) { |
| var result; |
| function func() { |
| result = true; |
| } |
| } |
| }-*/; |
| |
| private native void doTestOrder1() /*-{ |
| func(); |
| @junit.framework.Assert::assertTrue(Z)(result); |
| return; |
| var result; |
| var toss = function func() { |
| }; |
| var toss = function func() { |
| result = true; |
| }; |
| }-*/; |
| |
| private native void doTestOrder2() /*-{ |
| var toss = function func() { |
| }; |
| func(); |
| @junit.framework.Assert::assertTrue(Z)(result); |
| return; |
| var result; |
| var toss = function func() { |
| result = true; |
| }; |
| }-*/; |
| |
| private native void doTestShortCircuitAnd() /*-{ |
| func(); |
| @junit.framework.Assert::assertTrue(Z)(result); |
| return; |
| var result; |
| var toss = false && function func() { |
| result = true; |
| }; |
| }-*/; |
| |
| private native void doTestShortCircuitOr() /*-{ |
| func(); |
| @junit.framework.Assert::assertTrue(Z)(result); |
| return; |
| var result; |
| var toss = true || function func() { |
| result = true; |
| }; |
| }-*/; |
| |
| private native void doTestWhileFalse() /*-{ |
| func(); |
| @junit.framework.Assert::assertTrue(Z)(result); |
| return; |
| while (false) { |
| var result; |
| function func() { |
| result = true; |
| } |
| } |
| }-*/; |
| } |