Skip to content

Commit 33fee3f

Browse files
committed
Add support for the setTimeout(), clearTimeout(), setInterval() and
clearInterval() methods.
1 parent 6c3a72b commit 33fee3f

File tree

6 files changed

+87
-4
lines changed

6 files changed

+87
-4
lines changed

lodash-plugin/pom.xml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -230,7 +230,7 @@
230230
<dependency>
231231
<groupId>com.github.javadev</groupId>
232232
<artifactId>underscore</artifactId>
233-
<version>1.11-SNAPSHOT</version>
233+
<version>1.13-SNAPSHOT</version>
234234
</dependency>
235235
<dependency>
236236
<groupId>junit</groupId>

math-plugin/pom.xml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -206,7 +206,7 @@
206206
<dependency>
207207
<groupId>com.github.javadev</groupId>
208208
<artifactId>underscore</artifactId>
209-
<version>1.11-SNAPSHOT</version>
209+
<version>1.13-SNAPSHOT</version>
210210
</dependency>
211211
<dependency>
212212
<groupId>junit</groupId>

pom.xml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@
55
<groupId>com.github.javadev</groupId>
66
<artifactId>underscore</artifactId>
77
<packaging>jar</packaging>
8-
<version>1.11-SNAPSHOT</version>
8+
<version>1.13-SNAPSHOT</version>
99
<name>java port of Underscore.js</name>
1010
<description>The java port of Underscore.js</description>
1111
<url>https://github.com/javadev/underscore-java</url>

src/main/java/com/github/underscore/$.java

Lines changed: 39 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2180,6 +2180,45 @@ public Optional<String> getString() {
21802180
return string;
21812181
}
21822182

2183+
public static <T> java.util.concurrent.ScheduledFuture setTimeout(final Function<T> function,
2184+
final int delayMilliseconds) {
2185+
final java.util.concurrent.ScheduledExecutorService scheduler =
2186+
java.util.concurrent.Executors.newSingleThreadScheduledExecutor();
2187+
final java.util.concurrent.ScheduledFuture future = scheduler.schedule(
2188+
new Runnable() {
2189+
public void run() {
2190+
function.apply();
2191+
}
2192+
}, delayMilliseconds, java.util.concurrent.TimeUnit.MILLISECONDS);
2193+
scheduler.shutdown();
2194+
return future;
2195+
}
2196+
2197+
public static void clearTimeout(java.util.concurrent.ScheduledFuture scheduledFuture) {
2198+
if (scheduledFuture != null) {
2199+
scheduledFuture.cancel(true);
2200+
}
2201+
}
2202+
2203+
public static <T> java.util.concurrent.ScheduledFuture setInterval(final Function<T> function,
2204+
final int delayMilliseconds) {
2205+
final java.util.concurrent.ScheduledExecutorService scheduler =
2206+
java.util.concurrent.Executors.newSingleThreadScheduledExecutor();
2207+
final java.util.concurrent.ScheduledFuture future = scheduler.scheduleAtFixedRate(
2208+
new Runnable() {
2209+
public void run() {
2210+
function.apply();
2211+
}
2212+
}, delayMilliseconds, delayMilliseconds, java.util.concurrent.TimeUnit.MILLISECONDS);
2213+
return future;
2214+
}
2215+
2216+
public static void clearInterval(java.util.concurrent.ScheduledFuture scheduledFuture) {
2217+
if (scheduledFuture != null) {
2218+
scheduledFuture.cancel(true);
2219+
}
2220+
}
2221+
21832222
@SuppressWarnings("unchecked")
21842223
protected static <T> List<T> newArrayList() {
21852224
try {

src/test/java/com/github/underscore/FunctionsTest.java

Lines changed: 44 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -287,4 +287,48 @@ public void iteratee() {
287287
final List<Object> result = $.map(stooges, $.iteratee("age"));
288288
assertEquals("[25, 21, 23]", result.toString());
289289
}
290+
291+
@Test
292+
public void setTimeout() throws Exception {
293+
final Integer[] counter = new Integer[] {0};
294+
Function<Void> incr = new Function<Void>() { public Void apply() {
295+
counter[0]++; return null; } };
296+
$.setTimeout(incr, 0);
297+
Thread.sleep(40);
298+
assertEquals(1, counter[0].intValue());
299+
}
300+
301+
@Test
302+
public void clearTimeout() throws Exception {
303+
final Integer[] counter = new Integer[] {0};
304+
Function<Void> incr = new Function<Void>() { public Void apply() {
305+
counter[0]++; return null; } };
306+
java.util.concurrent.ScheduledFuture future = $.setTimeout(incr, 10);
307+
$.clearTimeout(future);
308+
$.clearTimeout(null);
309+
Thread.sleep(40);
310+
assertEquals(0, counter[0].intValue());
311+
}
312+
313+
@Test
314+
public void setInterval() throws Exception {
315+
final Integer[] counter = new Integer[] {0};
316+
Function<Void> incr = new Function<Void>() { public Void apply() {
317+
counter[0]++; return null; } };
318+
$.setInterval(incr, 10);
319+
Thread.sleep(45);
320+
assertEquals(4, counter[0].intValue());
321+
}
322+
323+
@Test
324+
public void clearInterval() throws Exception {
325+
final Integer[] counter = new Integer[] {0};
326+
Function<Void> incr = new Function<Void>() { public Void apply() {
327+
counter[0]++; return null; } };
328+
java.util.concurrent.ScheduledFuture future = $.setInterval(incr, 10);
329+
$.clearInterval(future);
330+
$.clearInterval(null);
331+
Thread.sleep(40);
332+
assertEquals(0, counter[0].intValue());
333+
}
290334
}

string-plugin/pom.xml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -230,7 +230,7 @@
230230
<dependency>
231231
<groupId>com.github.javadev</groupId>
232232
<artifactId>underscore</artifactId>
233-
<version>1.11-SNAPSHOT</version>
233+
<version>1.13-SNAPSHOT</version>
234234
</dependency>
235235
<dependency>
236236
<groupId>junit</groupId>

0 commit comments

Comments
 (0)