diff -r 1aa0c139c430 nbjunit/apichanges.xml --- a/nbjunit/apichanges.xml Tue Jul 08 22:40:44 2008 -0700 +++ b/nbjunit/apichanges.xml Wed Jul 09 16:24:17 2008 +0200 @@ -55,6 +55,24 @@ made subject to such option by the copyr + + + Support for measuring time consumption + + + + + +

+ Methods enableTimer and + assertTime added to Log class to + simplify time measuring during test runs. +

+
+ + +
+ NbModuleSuite.Configuration.reuseUserDir(boolean reuse) diff -r 1aa0c139c430 nbjunit/manifest.mf --- a/nbjunit/manifest.mf Tue Jul 08 22:40:44 2008 -0700 +++ b/nbjunit/manifest.mf Wed Jul 09 16:24:17 2008 +0200 @@ -1,5 +1,5 @@ Manifest-Version: 1.0 Manifest-Version: 1.0 OpenIDE-Module: org.netbeans.modules.nbjunit/1 OpenIDE-Module-Localizing-Bundle: org/netbeans/junit/Bundle.properties -OpenIDE-Module-Specification-Version: 1.52 +OpenIDE-Module-Specification-Version: 1.53 diff -r 1aa0c139c430 nbjunit/src/org/netbeans/junit/Log.java --- a/nbjunit/src/org/netbeans/junit/Log.java Tue Jul 08 22:40:44 2008 -0700 +++ b/nbjunit/src/org/netbeans/junit/Log.java Wed Jul 09 16:24:17 2008 +0200 @@ -51,6 +51,7 @@ import java.text.MessageFormat; import java.text.MessageFormat; import java.util.ArrayList; import java.util.Collections; +import java.util.HashMap; import java.util.List; import java.util.Map; import java.util.MissingResourceException; @@ -213,6 +214,30 @@ public final class Log extends Handler { } } + /** Starts to listen on given log and collect parameters of messages that + * were send to it. This is supposed to be called at the begining of a test, + * to get messages from the programs that use + * timers/counters + * infrastructure. At the end one should call {@link #assertTime}. + * + * + * @param log logger to listen on, if null, it uses the standard timers/counters one + * @param msg name of messages to collect, if null, all messages will be recorded + * @param level level of messages to record + * @since 1.53 + */ + public static void enableTimer(Logger log, String msg, Level level) { + if (log == null) { + log = Logger.getLogger("TIMER"); // NOI18N + } + + log.addHandler(new TimerHandler(null, level)); + + if (log.getLevel() == null || log.getLevel().intValue() > level.intValue()) { + log.setLevel(level); + } + } + /** Assert to verify that all collected instances via {@link #enableInstances} * can disappear. Uses {@link NbTestCase#assertGC} on each of them. * @@ -222,6 +247,16 @@ public final class Log extends Handler { InstancesHandler.assertGC(msg); } + /** + * Assert to verify that running time is in limit. + * + * @param msg message to display in case of potential failure + * @param key measurement identifier + * @param limit time limit in ms + */ + public static void assertTime(String msg, Object key, long limit) { + TimerHandler.assertTime(msg, key, limit); + } static void configure(Level lev, NbTestCase current) { @@ -417,4 +452,53 @@ public final class Log extends Handler { } } // end of InstancesHandler + + private static class TimerHandler extends Handler { + public static Map data; + + private TimerHandler(String msg, Level level) { + setLevel(level); + data = new HashMap(); + } + + @Override + public void publish(LogRecord record) { + data.put(record.getMessage(), record.getParameters()); + } + + private static void assertTime(String msg, Object key, long millis) { + if (data.containsKey(key)) { + Object[] result = data.get(key); + } else { + boolean found = false; + for (Object[] rec : data.values()) { + for (Object item : rec) { + if (!found && item.equals(key)) { + found = true; + } else { + if (found) { + Long val = (Long) item; + if (val > millis) { + Assert.fail("Limit exceed. " + msg + " (" + item + " > " + millis + ")"); + data.clear(); + return; + } + found = false; + } + } + } + } + } + data.clear(); + } // end of TimerHandler + + @Override + public void close() throws SecurityException { + } + + @Override + public void flush() { + } + + } }