| /* |
| * 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.impl.gflow.constants; |
| |
| import com.google.gwt.dev.jjs.impl.gflow.CfgIntegratedAnalysisTestBase; |
| import com.google.gwt.dev.jjs.impl.gflow.IntegratedAnalysis; |
| import com.google.gwt.dev.jjs.impl.gflow.cfg.Cfg; |
| import com.google.gwt.dev.jjs.impl.gflow.cfg.CfgEdge; |
| import com.google.gwt.dev.jjs.impl.gflow.cfg.CfgNode; |
| import com.google.gwt.dev.jjs.impl.gflow.cfg.CfgTransformer; |
| |
| /** |
| * |
| */ |
| public class ConstantsAnalysisTransformationTest extends CfgIntegratedAnalysisTestBase<ConstantsAssumption> { |
| |
| @Override |
| protected void setUp() throws Exception { |
| super.setUp(); |
| runDeadCodeElimination = true; |
| addSnippetClassDecl("static int i_;"); |
| addSnippetClassDecl("static int foo() { return 0; }"); |
| addSnippetClassDecl("static int bar(int i) {return 0;}"); |
| addSnippetClassDecl("static String baz() {return null;}"); |
| } |
| |
| public void testLinearStatements() throws Exception { |
| transform("void", "int i = 1; int j = i;").into( |
| "int i = 1;", |
| "int j = 1;"); |
| transform("void", "int i = 1; int j = i; i = 2; j = i;").into( |
| "int i = 1;", |
| "int j = 1;", |
| "i = 2;", |
| "j = 2;"); |
| transform("void", "int i = 1; i = i + 1; int j = i;").into( |
| "int i = 1;", |
| "i = 1 + 1;", |
| "int j = 2;"); |
| } |
| |
| public void testSequence() throws Exception { |
| transform("void", "int i = 1; int j = i; int k = j;").into( |
| "int i = 1;", |
| "int j = 1;", |
| "int k = 1;"); |
| } |
| |
| public void testIfStatement() throws Exception { |
| transform("void", "int i = 1; if (i_ == i) { i = 2; int j = i;} ").into( |
| "int i = 1;", |
| "if (EntryPoint.i_ == 1) {", |
| " i = 2;", |
| " int j = 2;", |
| "}"); |
| transform("void", "int i = foo(); if (i == 1) { int j = i; } else { int j = i; } ").into( |
| "int i = EntryPoint.foo();", |
| "if (i == 1) {", |
| " int j = 1;", |
| "} else {", |
| " int j = i;", |
| "}"); |
| } |
| |
| public void testReplaceInMethodCall() throws Exception { |
| transform("void", "int i = 1; bar(i);").into( |
| "int i = 1;", |
| "EntryPoint.bar(1);"); |
| } |
| |
| public void testExpressionEvaluation() throws Exception { |
| transform("void", "int i = 1; int j = i + 1;").into( |
| "int i = 1;", |
| "int j = 1 + 1;"); |
| transform("void", "int i = 1; int j = i - 1;").into( |
| "int i = 1;", |
| "int j = 1 - 1;"); |
| transform("void", "int i = 1; boolean b = i == 1;").into( |
| "int i = 1;", |
| "boolean b = 1 == 1;"); |
| } |
| |
| public void testWhile() throws Exception { |
| transform("void", "int j = 0; while (j > 0) { }").intoString( |
| "int j = 0;"); |
| |
| } |
| |
| public void testConstantCondition() throws Exception { |
| transform("void", "while (true) { }").into( |
| "while (true) {", |
| "}" ); |
| |
| } |
| |
| public void testNullValue() throws Exception { |
| transform("void", "Object e = null; boolean b = e == null;").into( |
| "Object e = null;", |
| "boolean b = true;" ); |
| |
| transform("void", "Object e = null; boolean b = e != null;").into( |
| "Object e = null;", |
| "boolean b = false;" ); |
| } |
| |
| public void testIncDec() throws Exception { |
| transform("void", |
| "int i = 0;", |
| "i++;", |
| "i++;", |
| "++i;" |
| ).into( |
| "int i = 0;", |
| "i++;", |
| "i++;", |
| "++i;" |
| ); |
| } |
| |
| public void testNotNull() throws Exception { |
| transform("boolean", "String s = baz(); if (s == null) return false; return s != null;").into( |
| "String s = EntryPoint.baz();", "if (s == null)", " return false;", "return s != null;"); |
| } |
| |
| @Override |
| protected IntegratedAnalysis<CfgNode<?>, CfgEdge, CfgTransformer, Cfg, |
| ConstantsAssumption> createIntegratedAnalysis() { |
| return new ConstantsAnalysis(); |
| } |
| } |