1 /* 2 * Copyright (C) 2010 The Android Open Source Project 3 * 4 * Licensed under the Apache License, Version 2.0 (the "License"); 5 * you may not use this file except in compliance with the License. 6 * You may obtain a copy of the License at 7 * 8 * http://www.apache.org/licenses/LICENSE-2.0 9 * 10 * Unless required by applicable law or agreed to in writing, software 11 * distributed under the License is distributed on an "AS IS" BASIS, 12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 * See the License for the specific language governing permissions and 14 * limitations under the License. 15 */ 16 17 package com.android.quicksearchbox.util; 18 19 import static com.android.quicksearchbox.util.MockTask.assertRanNever; 20 import static com.android.quicksearchbox.util.MockTask.assertRanOnce; 21 22 import android.test.suitebuilder.annotation.SmallTest; 23 24 import junit.framework.TestCase; 25 26 /** 27 * Tests for {@link PerNameExecutor}. 28 */ 29 @SmallTest 30 public class PerNameExecutorTest extends TestCase { 31 32 private MockNamedTaskExecutorFactory mExecutorFactory; 33 private NamedTaskExecutor mExecutor; 34 35 @Override 36 protected void setUp() throws Exception { 37 super.setUp(); 38 39 mExecutorFactory = new MockNamedTaskExecutorFactory(); 40 mExecutor = new PerNameExecutor(mExecutorFactory); 41 } 42 43 public void testExecute() { 44 MockTask a1 = addTask("a", 1); 45 MockTask a2 = addTask("a", 2); 46 MockTask a3 = addTask("a", 3); 47 MockTask b1 = addTask("b", 1); 48 49 assertRanNever("step 0", a1, a2, a3, b1); 50 step(); // run a1, b1 51 assertRanOnce("step 1", a1, b1); 52 assertRanNever("step 1", a2, a3); 53 step(); // run a2 54 assertRanOnce("step 2", a1, b1, a2); 55 assertRanNever("step 2", a3); 56 step(); // run a3 57 assertRanOnce("step 3", a1, b1, a2, a3); 58 step(); // should do nothing 59 assertRanOnce("step 4", a1, b1, a2, a3); 60 } 61 62 public void testCancelPendingTasks() { 63 MockTask a1 = addTask("a", 1); 64 MockTask a2 = addTask("a", 2); 65 MockTask b1 = addTask("b", 1); 66 67 step(); // run a1, b1 68 assertRanOnce("step 1", a1, b1); 69 assertRanNever("step 1", a2); 70 mExecutor.cancelPendingTasks(); // cancel a2 71 assertRanOnce("step 1, after cancel", a1, b1); 72 assertRanNever("step 1, after cancel", a2); 73 step(); // do nothing 74 assertRanOnce("step 2", a1, b1); 75 assertRanNever("step 2", a2); 76 77 MockTask a3 = addTask("a" , 3); 78 MockTask c1 = addTask("c" , 1); 79 80 assertRanNever("step 2, new tasks", a3, c1, a2); 81 step(); // run a3, c1 82 assertRanOnce("step 3", a1, b1, a3, c1); 83 assertRanNever("step 3", a2); 84 step(); // do nothing 85 assertRanOnce("step 4", a1, b1, a3, c1); 86 assertRanNever("step 4", a2); 87 } 88 89 public void testClose() { 90 MockTask a1 = new MockTask("a", 1); 91 mExecutor.execute(a1); 92 93 assertRanNever("before close()", a1); 94 mExecutor.close(); 95 assertRanNever("after close() 1", a1); 96 mExecutor.close(); 97 assertRanNever("after close() 2", a1); 98 } 99 100 private MockTask addTask(String name, int id) { 101 MockTask task = new MockTask(name, id); 102 mExecutor.execute(task); 103 return task; 104 } 105 106 /** 107 * Run one task for each name. 108 */ 109 private void step() { 110 mExecutorFactory.runNext(); 111 } 112 113 } 114