/* * Copyright 2007 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.emultest.java.util; import com.google.gwt.junit.client.GWTTestCase; import java.util.EmptyStackException; import java.util.Stack; /** * TODO: document me. */ public class StackTest extends GWTTestCase { public static final int TEST_SEARCH_SIZE = 10; public static final int TEST_SIZE = 10; public static Stack testStack = new Stack(); /** Checks for emptiness of stack by peeking and popping. */ public void checkEmptiness(Stack s) { assertTrue(s.empty()); try { s.pop(); fail("Did not throw exception on pop of checkEmptiness"); } catch (EmptyStackException es) { try { s.peek(); fail("Did not throw exception on peek of checkEmptiness"); } catch (EmptyStackException es2) { // we wanted to get here } } } /** Sets module name so that javascript compiler can operate. */ public String getModuleName() { return "com.google.gwt.emultest.EmulSuite"; } /** Tests clone on Stacks. */ public void testClone() { Stack large = createLargeStack(); Stack cloned = (Stack) large.clone(); checkLargeStack(cloned, 0); assertEquals(large.size(), TEST_SIZE); } /** * Tests pushing many elements into a stack, and seeing if they come out in * order. Also verifies that we get the correct exception when we run out of * elements, and tests peek */ public void testCountAndOrderWithPeek() { Stack large = new Stack(); for (int i = 0; i < TEST_SIZE; i++) { Integer theInt = new Integer(i); large.push(theInt); assertTrue(large.peek() == theInt); assertTrue(large.pop() == theInt); Integer theFinalInt = new Integer(theInt.intValue() + TEST_SIZE); large.push(theFinalInt); assertTrue(large.peek() == theFinalInt); } checkLargeStack(large, TEST_SIZE); } /** tests empty and tries to get emptyStackException as desired. */ public void testEmptyAndEmptyStackException() { Stack s = new Stack(); String item = "empty1"; s.push(item); assertEquals(1, s.size()); assertFalse(s.empty()); assertEquals(s.pop(), item); checkEmptiness(s); } /** Tests pop and peek. */ public void testPopAndPeek() { int x = testStack.size(); Object item = testStack.peek(); assertTrue(testStack.pop() == item); assertEquals(x - 1, testStack.size()); } /** Tests push and peek. */ public void testPushAndPeek() { int x = testStack.size(); Object item = "4"; testStack.push(item); assertEquals(x + 1, testStack.size()); assertTrue(testStack.peek() == item); } /** * Tests all combinations of search for a stack that attains a max size of * TEST_SEARCH_SIZE. */ public void testSearch() { Stack searchStack = new Stack(); checkEmptiness(searchStack); for (int stackSizeIncreasing = 0; stackSizeIncreasing < TEST_SEARCH_SIZE; stackSizeIncreasing++) { for (int theInt = 0; theInt < stackSizeIncreasing; theInt++) { assertEquals("Increasing search found", searchStack.search(new Integer( theInt)), searchStack.size() - theInt); } for (int theInt = stackSizeIncreasing; theInt < TEST_SEARCH_SIZE; theInt++) { assertEquals("Increasing not found", searchStack.search(new Integer( theInt)), -1); } searchStack.push(new Integer(stackSizeIncreasing)); } for (int stackSizeDecreasing = TEST_SEARCH_SIZE - 1; stackSizeDecreasing >= 0; stackSizeDecreasing--) { for (int theInt = TEST_SEARCH_SIZE - 1; theInt > stackSizeDecreasing; theInt--) { assertEquals("Search decreasing not found", searchStack.search(new Integer(theInt)), -1); } for (int theInt = stackSizeDecreasing; theInt >= 0; theInt--) { assertEquals("Search decreasing found", searchStack.search(new Integer( theInt)), searchStack.size() - theInt); } searchStack.pop(); } checkEmptiness(searchStack); } private void checkLargeStack(Stack cloned, int offset) { for (int i = TEST_SIZE - 1; i >= 0; i--) { Integer theObtainedInt = (Integer) cloned.pop(); assertEquals(i + offset, theObtainedInt.intValue()); } checkEmptiness(cloned); } private Stack createLargeStack() { Stack large = new Stack(); for (int i = 0; i < TEST_SIZE; i++) { Integer theFinalInt = new Integer(i); large.push(theFinalInt); } return large; } static { testStack.push("1"); testStack.push("2"); testStack.push("3"); } }