/* Copyright (c) 2008-2009 HomeAway, Inc.
* All rights reserved. http://www.perf4j.org
*
* 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.perf4j;
import junit.framework.TestCase;
/**
* Tests the StopWatch
*/
public class StopWatchTest extends TestCase {
public void testStopWatch() throws Exception {
long now = System.currentTimeMillis();
StopWatch stopWatch = new StopWatch();
assertEquals("", stopWatch.getTag());
assertNull(stopWatch.getMessage());
assertTrue(stopWatch.getStartTime() >= now);
//without stopping, elapsed should increase
long elapsedTime = stopWatch.getElapsedTime();
Thread.sleep(20);
assertTrue(stopWatch.getElapsedTime() > elapsedTime);
//after stopping, elapsed time should freeze
stopWatch.stop("tag");
elapsedTime = stopWatch.getElapsedTime();
Thread.sleep(20);
assertEquals(elapsedTime, stopWatch.getElapsedTime());
assertEquals("tag", stopWatch.getTag());
now = System.currentTimeMillis();
//after starting again, elapsed time should be reset
stopWatch.start("tag2", "someMessage");
assertEquals("tag2", stopWatch.getTag());
assertEquals("someMessage", stopWatch.getMessage());
assertTrue(stopWatch.getStartTime() >= now);
elapsedTime = stopWatch.getElapsedTime();
Thread.sleep(20);
assertTrue(stopWatch.getElapsedTime() > elapsedTime);
//test lap methods
stopWatch.start();
Thread.sleep(20);
long elapsedTimeSoFar = stopWatch.getElapsedTime();
String stopWatchAsString = stopWatch.lap("lapTag1");
assertTrue("lap didn't restart stopwatch", stopWatch.getElapsedTime() < elapsedTimeSoFar);
assertTrue(stopWatchAsString.indexOf("tag[lapTag1]") >= 0);
Thread.sleep(20);
stopWatchAsString = stopWatch.lap("lapTag2", "lapMessage");
assertTrue(stopWatchAsString.indexOf("tag[lapTag2]") >= 0);
assertTrue(stopWatchAsString.indexOf("message[lapMessage]") >= 0);
//test other methods and constructors
stopWatch = new StopWatch("tag3");
assertEquals("tag3", stopWatch.getTag());
assertNull(stopWatch.getMessage());
stopWatch.setTag("tag4");
stopWatch.setMessage("anotherMessage");
assertEquals("tag4", stopWatch.getTag());
assertEquals("anotherMessage", stopWatch.getMessage());
now = System.currentTimeMillis();
stopWatch.start("tag5");
Thread.sleep(10);
assertTrue(stopWatch.getStartTime() >= now);
String stopMessage = stopWatch.stop();
assertEquals("start[" + stopWatch.getStartTime()
+ "] time[" + stopWatch.getElapsedTime()
+ "] tag[" + stopWatch.getTag()
+ "] message[" + stopWatch.getMessage()
+ "]", stopMessage);
elapsedTime = stopWatch.getElapsedTime();
Thread.sleep(10);
//after stopping again, elapsed time should increase - we allow stopping in successing
stopWatch.stop("tag6", "finalMessage");
assertEquals("tag6", stopWatch.getTag());
assertEquals("finalMessage", stopWatch.getMessage());
assertTrue(stopWatch.getElapsedTime() > elapsedTime);
//object methods
assertTrue(stopWatch.equals(stopWatch));
assertFalse(stopWatch.equals("object"));
StopWatch clone = stopWatch.clone();
assertEquals(stopWatch, clone);
assertEquals(stopWatch.hashCode(), clone.hashCode());
clone.setTag("foo");
assertFalse(stopWatch.equals(clone));
}
}