/* * Copyright 2002-2005 the original author or authors. * * 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 org.springframework.util; import junit.framework.TestCase; /** * @author Rod Johnson */ public class StopWatchTests extends TestCase { /** * Are timings off in JUnit? */ public void testValidUsage() throws Exception { StopWatch sw = new StopWatch(); long int1 = 166L; long int2 = 45L; String name1 = "Task 1"; String name2 = "Task 2"; long fudgeFactor = 5L; assertFalse(sw.isRunning()); sw.start(name1); Thread.sleep(int1); assertTrue(sw.isRunning()); sw.stop(); // TODO are timings off in JUnit? Why do these assertions sometimes fail // under both Ant and Eclipse? //assertTrue("Unexpected timing " + sw.getTotalTime(), sw.getTotalTime() >= int1); //assertTrue("Unexpected timing " + sw.getTotalTime(), sw.getTotalTime() <= int1 + fudgeFactor); sw.start(name2); Thread.sleep(int2); sw.stop(); //assertTrue("Unexpected timing " + sw.getTotalTime(), sw.getTotalTime() >= int1 + int2); //assertTrue("Unexpected timing " + sw.getTotalTime(), sw.getTotalTime() <= int1 + int2 + fudgeFactor); assertTrue(sw.getTaskCount() == 2); String pp = sw.prettyPrint(); assertTrue(pp.indexOf(name1) != -1); assertTrue(pp.indexOf(name2) != -1); StopWatch.TaskInfo[] tasks = sw.getTaskInfo(); assertTrue(tasks.length == 2); assertTrue(tasks[0].getTaskName().equals(name1)); assertTrue(tasks[1].getTaskName().equals(name2)); sw.toString(); } public void testValidUsageNotKeepingTaskList() throws Exception { StopWatch sw = new StopWatch(); sw.setKeepTaskList(false); long int1 = 166L; long int2 = 45L; String name1 = "Task 1"; String name2 = "Task 2"; long fudgeFactor = 5L; assertFalse(sw.isRunning()); sw.start(name1); Thread.sleep(int1); assertTrue(sw.isRunning()); sw.stop(); // TODO are timings off in JUnit? Why do these assertions sometimes fail // under both Ant and Eclipse? //assertTrue("Unexpected timing " + sw.getTotalTime(), sw.getTotalTime() >= int1); //assertTrue("Unexpected timing " + sw.getTotalTime(), sw.getTotalTime() <= int1 + fudgeFactor); sw.start(name2); Thread.sleep(int2); sw.stop(); //assertTrue("Unexpected timing " + sw.getTotalTime(), sw.getTotalTime() >= int1 + int2); //assertTrue("Unexpected timing " + sw.getTotalTime(), sw.getTotalTime() <= int1 + int2 + fudgeFactor); assertTrue(sw.getTaskCount() == 2); String pp = sw.prettyPrint(); assertTrue(pp.indexOf("kept") != -1); sw.toString(); try { sw.getTaskInfo(); fail(); } catch (UnsupportedOperationException ex) { // Ok } } public void testFailureToStartBeforeGettingTimings() { StopWatch sw = new StopWatch(); try { sw.getLastTaskTimeMillis(); fail("Can't get last interval if no tests run"); } catch (IllegalStateException ex) { // Ok } } public void testFailureToStartBeforeStop() { StopWatch sw = new StopWatch(); try { sw.stop(); fail("Can't stop without starting"); } catch (IllegalStateException ex) { // Ok } } public void testRejectsStartTwice() { StopWatch sw = new StopWatch(); try { sw.start(""); sw.stop(); sw.start(""); assertTrue(sw.isRunning()); sw.start(""); fail("Can't start twice"); } catch (IllegalStateException ex) { // Ok } } }