/* * 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.SourceOrigin; import com.google.gwt.dev.jjs.ast.JIntLiteral; import com.google.gwt.dev.jjs.ast.JLocal; import com.google.gwt.dev.jjs.ast.JMethodBody; import com.google.gwt.dev.jjs.ast.JPrimitiveType; import com.google.gwt.dev.jjs.ast.JProgram; import junit.framework.TestCase; /** * Test for ConstantsAssumption. * * We use toString comparison in this test to make it simpler. */ public class ConstantsAssumptionTest extends TestCase { private final JIntLiteral zero = newIntLiteral(0); private final JIntLiteral one = newIntLiteral(1); private final JLocal i = newLocal("i", JPrimitiveType.INT); private final JLocal j = newLocal("j", JPrimitiveType.INT); public void testEmptyAssumption() { ConstantsAssumption a = new ConstantsAssumption(); assertEquals("T", a.toString()); } public void testSet() { ConstantsAssumption a = new ConstantsAssumption(); a.set(i, zero); assertEquals("{i = 0}", a.toString()); a.set(j, one); assertEquals("{i = 0, j = 1}", a.toString()); a.set(i, null); assertEquals("{j = 1}", a.toString()); } public void testJoin_SameValues() { ConstantsAssumption a1 = new ConstantsAssumption(); a1.set(i, zero); a1.set(j, one); ConstantsAssumption a2 = new ConstantsAssumption(); a2.set(i, zero); a2.set(j, one); assertEquals("{i = 0, j = 1}", a1.join(a2).toString()); } public void testJoin_WithEmpty() { ConstantsAssumption a1 = new ConstantsAssumption(); a1.set(i, zero); assertEquals("T", a1.join(new ConstantsAssumption()).toString()); assertEquals("T", new ConstantsAssumption().join(a1).toString()); assertEquals("T", a1.join(ConstantsAssumption.TOP).toString()); assertEquals("T", ConstantsAssumption.TOP.join(a1).toString()); assertEquals(a1, a1.join(null)); } public void testJoin_DifferentValues() { ConstantsAssumption a1 = new ConstantsAssumption(); a1.set(i, zero); a1.set(j, one); ConstantsAssumption a2 = new ConstantsAssumption(); a2.set(i, one); a2.set(j, zero); assertEquals("T", a1.join(a2).toString()); } public void testJoin_DifferentKeys() { ConstantsAssumption a1 = new ConstantsAssumption(); a1.set(i, zero); ConstantsAssumption a2 = new ConstantsAssumption(); a2.set(j, zero); assertEquals("T", a1.join(a2).toString()); } public void testEquals_ComparesValues() { ConstantsAssumption a1 = new ConstantsAssumption(); a1.set(i, newIntLiteral(0)); ConstantsAssumption a2 = new ConstantsAssumption(); a2.set(i, newIntLiteral(0)); assertTrue(a1.equals(a2)); } private JIntLiteral newIntLiteral(int value) { return new JIntLiteral(SourceOrigin.UNKNOWN, value); } private JLocal newLocal(String name, JPrimitiveType type) { return JProgram.createLocal(SourceOrigin.UNKNOWN, name, type, false, new JMethodBody(SourceOrigin.UNKNOWN)); } }