Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(146)

Side by Side Diff: remoting/android/javatests/src/org/chromium/chromoting/EventTest.java

Issue 1999583002: Add Event and EventTest (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Resolve review comments Created 4 years, 7 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
OLDNEW
(Empty)
1 // Copyright 2016 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file.
4
5 package org.chromium.chromoting;
6
7 import android.test.InstrumentationTestCase;
8 import android.test.suitebuilder.annotation.MediumTest;
9 import android.test.suitebuilder.annotation.SmallTest;
10
11 import org.chromium.base.test.util.Feature;
12
13 /**
14 * Tests for {@link Event}.
15 */
16 public class EventTest extends InstrumentationTestCase {
17 @SmallTest
18 @Feature({"Chromoting"})
19 public static void testBasicScenario() {
20 Event.Executor<Void> event = new Event.Executor<>();
21 final Counter callTimes = new Counter();
22 Object eventId1 = event.add(new Event.ParameterRunnable<Void>() {
23 @Override
24 public void run(Void nil) {
25 callTimes.increment();
26 }
27 });
28 Object eventId2 = event.add(new Event.ParameterRunnable<Void>() {
29 @Override
30 public void run(Void nil) {
31 callTimes.increment();
32 }
33 });
34 Object eventId3 = event.add(new Event.ParameterRunnable<Void>() {
35 @Override
36 public void run(Void nil) {
37 // Should not reach.
38 assertTrue(false);
Lambros 2016/05/27 22:26:07 (Here and elsewhere) Use fail() instead of assertT
Hzj_jie 2016/05/28 00:32:07 Done.
39 callTimes.increment();
40 }
41 });
42 assertNotNull(eventId1);
43 assertNotNull(eventId2);
44 assertNotNull(eventId3);
45 assertTrue(event.remove(eventId3));
46 for (int i = 0; i < 100; i++) {
47 assertEquals(event.raise(null), 2);
48 assertEquals(callTimes.get(), (i + 1) << 1);
49 }
50 assertTrue(event.remove(eventId1));
51 assertTrue(event.remove(eventId2));
52 assertFalse(event.remove(eventId3));
53 }
54
55 private static class MultithreadingTestRunner extends Thread {
56 private final Event.Executor<Void> mEvent;
57 private final Pointer<Boolean> mError;
Lambros 2016/05/27 22:26:07 Would a MutableBoolean class work better here? (an
Hzj_jie 2016/05/28 00:32:07 I would prefer to remove Counter / MutableInteger,
58
59 public MultithreadingTestRunner(Event.Executor<Void> event,
60 Pointer<Boolean> error) {
61 Preconditions.notNull(event);
62 Preconditions.notNull(error);
63 mEvent = event;
64 mError = error;
65 }
66
67 @Override
68 public void run() {
69 for (int i = 0; i < 100; i++) {
70 final Pointer<Boolean> called = new Pointer<>();
71 Object id = mEvent.add(new Event.ParameterRunnable<Void>() {
72 @Override
73 public void run(Void nil) {
Lambros 2016/05/27 22:26:07 Maybe just run(Void) ?
Hzj_jie 2016/05/28 00:32:07 I do not think Java support this syntax. :)
74 called.set(true);
75 }
76 });
77 if (id == null) {
78 mError.set(true);
79 }
80 for (int j = 0; j < 100; j++) {
81 called.set(false);
82 if (mEvent.raise(null) <= 0) {
83 mError.set(true);
84 }
85 if (!called.get()) {
86 mError.set(true);
87 }
88 }
89 if (!mEvent.remove(id)) {
90 mError.set(true);
91 }
92 }
93 }
94 }
95
96 @MediumTest
97 @Feature({"Chromoting"})
98 public static void testMultithreading() {
99 Event.Executor<Void> event = new Event.Executor<>();
100 final int threadCount = 10;
101 final Pointer<Boolean> error = new Pointer<>();
102 Thread[] threads = new Thread[threadCount];
103 for (int i = 0; i < threadCount; i++) {
104 threads[i] = new MultithreadingTestRunner(event, error);
105 threads[i].start();
106 }
107 for (int i = 0; i < threadCount; i++) {
108 try {
109 threads[i].join();
110 } catch (InterruptedException exception) {
111 assertTrue(false);
112 }
113 }
114 assertNull(error.get());
115 }
116
117 @SmallTest
118 @Feature({"Chromoting"})
119 public static void testSelfRemovable() {
120 Event.Executor<Void> event = new Event.Executor<>();
121 final Pointer<Boolean> called = new Pointer<>();
122 final Pointer<Boolean> nextReturn = new Pointer<>();
123 nextReturn.set(true);
124 event.addSelfRemovable(new Event.ParameterCallback<Boolean, Void>() {
125 @Override
126 public Boolean run(Void nil) {
127 called.set(true);
128 return nextReturn.get();
129 }
130 });
131 assertEquals(event.raise(null), 1);
132 assertTrue(called.get());
133 assertFalse(event.isEmpty());
134 called.set(false);
135 nextReturn.set(false);
136 assertEquals(event.raise(null), 1);
137 assertTrue(called.get());
138 assertTrue(event.isEmpty());
139 called.set(false);
140 nextReturn.set(true);
141 assertEquals(event.raise(null), 0);
142 assertFalse(called.get());
143 assertTrue(event.isEmpty());
144 }
145 }
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698