diff --git a/spring-core/src/main/java/org/springframework/util/StopWatch.java b/spring-core/src/main/java/org/springframework/util/StopWatch.java index 0c97499113..13f2b626a2 100644 --- a/spring-core/src/main/java/org/springframework/util/StopWatch.java +++ b/spring-core/src/main/java/org/springframework/util/StopWatch.java @@ -1,5 +1,5 @@ /* - * Copyright 2002-2014 the original author or authors. + * Copyright 2002-2015 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. @@ -87,6 +87,16 @@ public class StopWatch { } + /** + * Return the id of this stop watch, as specified on construction. + * @return the id (empty String by default) + * @since 4.2.2 + * @see #StopWatch(String) + */ + public String getId() { + return this.id; + } + /** * Determine whether the TaskInfo array is built over time. Set this to * "false" when using a StopWatch for millions of intervals, or the task @@ -116,15 +126,15 @@ public class StopWatch { if (this.running) { throw new IllegalStateException("Can't start StopWatch: it's already running"); } - this.startTimeMillis = System.currentTimeMillis(); this.running = true; this.currentTaskName = taskName; + this.startTimeMillis = System.currentTimeMillis(); } /** * Stop the current task. The results are undefined if timing * methods are called without invoking at least one pair - * {@link #start()} / {@link #stop()} methods. + * {@code #start()} / {@code #stop()} methods. * @see #start() */ public void stop() throws IllegalStateException { @@ -144,11 +154,21 @@ public class StopWatch { /** * Return whether the stop watch is currently running. + * @see #currentTaskName() */ public boolean isRunning() { return this.running; } + /** + * Return the name of the currently running task, if any. + * @since 4.2.2 + * @see #isRunning() + */ + public String currentTaskName() { + return this.currentTaskName; + } + /** * Return the time taken by the last task. @@ -217,7 +237,7 @@ public class StopWatch { * Return a short description of the total running time. */ public String shortSummary() { - return "StopWatch '" + this.id + "': running time (millis) = " + getTotalTimeMillis(); + return "StopWatch '" + getId() + "': running time (millis) = " + getTotalTimeMillis(); } /** @@ -302,7 +322,7 @@ public class StopWatch { * Return the time in seconds this task took. */ public double getTimeSeconds() { - return this.timeMillis / 1000.0; + return (this.timeMillis / 1000.0); } } diff --git a/spring-core/src/test/java/org/springframework/util/StopWatchTests.java b/spring-core/src/test/java/org/springframework/util/StopWatchTests.java index 4170f55624..e039b2555e 100644 --- a/spring-core/src/test/java/org/springframework/util/StopWatchTests.java +++ b/spring-core/src/test/java/org/springframework/util/StopWatchTests.java @@ -1,6 +1,5 @@ - /* - * Copyright 2002-2013 the original author or authors. + * Copyright 2002-2015 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. @@ -21,6 +20,7 @@ import junit.framework.TestCase; /** * @author Rod Johnson + * @author Juergen Hoeller */ public class StopWatchTests extends TestCase { @@ -28,7 +28,8 @@ public class StopWatchTests extends TestCase { * Are timings off in JUnit? */ public void testValidUsage() throws Exception { - StopWatch sw = new StopWatch(); + String id = "myId"; + StopWatch sw = new StopWatch(id); long int1 = 166L; long int2 = 45L; String name1 = "Task 1"; @@ -38,6 +39,7 @@ public class StopWatchTests extends TestCase { sw.start(name1); Thread.sleep(int1); assertTrue(sw.isRunning()); + assertEquals(name1, sw.currentTaskName()); sw.stop(); // TODO are timings off in JUnit? Why do these assertions sometimes fail @@ -54,14 +56,20 @@ public class StopWatchTests extends TestCase { assertTrue(sw.getTaskCount() == 2); String pp = sw.prettyPrint(); - assertTrue(pp.indexOf(name1) != -1); - assertTrue(pp.indexOf(name2) != -1); + assertTrue(pp.contains(name1)); + assertTrue(pp.contains(name2)); StopWatch.TaskInfo[] tasks = sw.getTaskInfo(); assertTrue(tasks.length == 2); assertTrue(tasks[0].getTaskName().equals(name1)); assertTrue(tasks[1].getTaskName().equals(name2)); - sw.toString(); + + String toString = sw.toString(); + assertTrue(toString.contains(id)); + assertTrue(toString.contains(name1)); + assertTrue(toString.contains(name2)); + + assertEquals(id, sw.getId()); } public void testValidUsageNotKeepingTaskList() throws Exception { @@ -92,8 +100,11 @@ public class StopWatchTests extends TestCase { assertTrue(sw.getTaskCount() == 2); String pp = sw.prettyPrint(); - assertTrue(pp.indexOf("kept") != -1); - sw.toString(); + assertTrue(pp.contains("kept")); + + String toString = sw.toString(); + assertFalse(toString.contains(name1)); + assertFalse(toString.contains(name2)); try { sw.getTaskInfo();