| Index: chrome/android/junit/src/org/chromium/chrome/browser/superviseduser/SupervisedUserContentProviderUnitTest.java
|
| diff --git a/chrome/android/junit/src/org/chromium/chrome/browser/superviseduser/SupervisedUserContentProviderUnitTest.java b/chrome/android/junit/src/org/chromium/chrome/browser/superviseduser/SupervisedUserContentProviderUnitTest.java
|
| deleted file mode 100644
|
| index 17348266afd0c186ff54fa672605d8804450987b..0000000000000000000000000000000000000000
|
| --- a/chrome/android/junit/src/org/chromium/chrome/browser/superviseduser/SupervisedUserContentProviderUnitTest.java
|
| +++ /dev/null
|
| @@ -1,230 +0,0 @@
|
| -// Copyright 2015 The Chromium Authors. All rights reserved.
|
| -// Use of this source code is governed by a BSD-style license that can be
|
| -// found in the LICENSE file.
|
| -
|
| -package org.chromium.chrome.browser.superviseduser;
|
| -
|
| -import static org.hamcrest.CoreMatchers.is;
|
| -import static org.junit.Assert.assertThat;
|
| -import static org.mockito.Matchers.any;
|
| -import static org.mockito.Matchers.anyLong;
|
| -import static org.mockito.Matchers.anyString;
|
| -import static org.mockito.Matchers.eq;
|
| -import static org.mockito.Mockito.doAnswer;
|
| -import static org.mockito.Mockito.times;
|
| -import static org.mockito.Mockito.verify;
|
| -
|
| -import android.os.Handler;
|
| -import android.os.Looper;
|
| -import android.util.Pair;
|
| -
|
| -import org.chromium.testing.local.LocalRobolectricTestRunner;
|
| -import org.junit.Before;
|
| -import org.junit.Test;
|
| -import org.junit.runner.RunWith;
|
| -import org.mockito.Mockito;
|
| -import org.mockito.invocation.InvocationOnMock;
|
| -import org.mockito.stubbing.Answer;
|
| -import org.robolectric.Robolectric;
|
| -import org.robolectric.annotation.Config;
|
| -import org.robolectric.annotation.Implementation;
|
| -import org.robolectric.annotation.Implements;
|
| -
|
| -import java.util.concurrent.CountDownLatch;
|
| -
|
| -/**
|
| - * Tests of SupervisedUserContentProvider. This is tested as a simple class, not as a content
|
| - * provider. The content provider aspects are tested with WebRestrictionsContentProviderTest.
|
| - */
|
| -@RunWith(LocalRobolectricTestRunner.class)
|
| -@Config(manifest = Config.NONE,
|
| - shadows = {SupervisedUserContentProviderUnitTest.ShadowHander.class})
|
| -public class SupervisedUserContentProviderUnitTest {
|
| - private static CountDownLatch sLatch;
|
| -
|
| - /**
|
| - * Special Handler shadow class that allows the test to wait for a post() call.
|
| - */
|
| - @Implements(Handler.class)
|
| - public static class ShadowHander extends org.robolectric.shadows.ShadowHandler {
|
| - @Override
|
| - @Implementation
|
| - public boolean post(Runnable r) {
|
| - boolean result = super.post(r);
|
| - // If the test wants to wait it should initialize sLatch before post is called.
|
| - if (sLatch != null) sLatch.countDown();
|
| - return result;
|
| - }
|
| - }
|
| -
|
| - private SupervisedUserContentProvider mSupervisedUserContentProvider;
|
| - private Looper mNativeCallLooper;
|
| -
|
| - @Before
|
| - public void setUp() {
|
| - sLatch = null;
|
| - mNativeCallLooper = null;
|
| - mSupervisedUserContentProvider = Mockito.spy(new SupervisedUserContentProvider());
|
| - mSupervisedUserContentProvider.setNativeSupervisedUserContentProviderForTesting(1234L);
|
| - }
|
| -
|
| - @Test
|
| - public void testShouldProceed() throws InterruptedException {
|
| - // Runnable for test thread.
|
| - class TestRunnable implements Runnable {
|
| - private Pair<Boolean, String> mResult;
|
| -
|
| - @Override
|
| - public void run() {
|
| - this.mResult = mSupervisedUserContentProvider.shouldProceed("url");
|
| - }
|
| -
|
| - public Pair<Boolean, String> getResult() {
|
| - return mResult;
|
| - }
|
| - }
|
| - // Mock the native call for a permitted URL
|
| - doAnswer(new Answer<Void>() {
|
| -
|
| - @Override
|
| - public Void answer(InvocationOnMock invocation) throws Throwable {
|
| - Object args[] = invocation.getArguments();
|
| - mNativeCallLooper = Looper.myLooper();
|
| - ((SupervisedUserContentProvider.SupervisedUserQueryReply) args[1])
|
| - .onQueryComplete(true, null);
|
| - return null;
|
| - }
|
| -
|
| - })
|
| - .when(mSupervisedUserContentProvider)
|
| - .nativeShouldProceed(anyLong(),
|
| - any(SupervisedUserContentProvider.SupervisedUserQueryReply.class),
|
| - anyString());
|
| - TestRunnable r1 = new TestRunnable();
|
| - // Because SupervisedUserContentProvider uses a CountDownLatch (which is a java.util
|
| - // class, so can't be shadowed or mocked) we need to make the calls to shouldProceed on a
|
| - // real thread. This can't be the main thread because Robolectric emulates UI event handling
|
| - // on the main thread.
|
| - Thread t1 = new Thread(r1);
|
| - sLatch = new CountDownLatch(1);
|
| - t1.start();
|
| - // Wait for the event to be posted to the emulated UI thread.
|
| - sLatch.await();
|
| - Robolectric.runUiThreadTasks();
|
| - t1.join();
|
| - verify(mSupervisedUserContentProvider)
|
| - .nativeShouldProceed(eq(1234L),
|
| - any(SupervisedUserContentProvider.SupervisedUserQueryReply.class),
|
| - eq("url"));
|
| - // Assert has to be on main thread for failures to cause test failure.
|
| - assertThat(r1.getResult(), is(new Pair<Boolean, String>(true, null)));
|
| - // Check that the native code was called on the right thread.
|
| - assertThat(mNativeCallLooper, is(Looper.getMainLooper()));
|
| - // Mock the native call for a forbidden URL
|
| - doAnswer(new Answer<Void>() {
|
| -
|
| - @Override
|
| - public Void answer(InvocationOnMock invocation) throws Throwable {
|
| - Object args[] = invocation.getArguments();
|
| - mNativeCallLooper = Looper.myLooper();
|
| - ((SupervisedUserContentProvider.SupervisedUserQueryReply) args[1])
|
| - .onQueryComplete(false, "Hello");
|
| - return null;
|
| - }
|
| -
|
| - })
|
| - .when(mSupervisedUserContentProvider)
|
| - .nativeShouldProceed(anyLong(),
|
| - any(SupervisedUserContentProvider.SupervisedUserQueryReply.class),
|
| - anyString());
|
| - TestRunnable r2 = new TestRunnable();
|
| - // Create a new thread for the second call
|
| - Thread t2 = new Thread(r2);
|
| - sLatch = new CountDownLatch(1);
|
| - t2.start();
|
| - // Wait for the event to be posted to the emulated UI thread.
|
| - sLatch.await();
|
| - Robolectric.runUiThreadTasksIncludingDelayedTasks();
|
| - t2.join();
|
| - assertThat(r2.getResult(), is(new Pair<Boolean, String>(false, "Hello")));
|
| - // Check that the native code was called on the UI thread.
|
| - assertThat(mNativeCallLooper, is(Looper.getMainLooper()));
|
| - }
|
| -
|
| - @Test
|
| - public void testRequestInsert() throws InterruptedException {
|
| - // Runnable for test thread.
|
| - class TestRunnable implements Runnable {
|
| - private boolean mResult;
|
| -
|
| - @Override
|
| - public void run() {
|
| - this.mResult = mSupervisedUserContentProvider.requestInsert("url");
|
| - }
|
| -
|
| - public boolean getResult() {
|
| - return mResult;
|
| - }
|
| - }
|
| - // Mock native call.
|
| - doAnswer(new Answer<Void>() {
|
| -
|
| - @Override
|
| - public Void answer(InvocationOnMock invocation) throws Throwable {
|
| - Object args[] = invocation.getArguments();
|
| - mNativeCallLooper = Looper.myLooper();
|
| - ((SupervisedUserContentProvider.SupervisedUserInsertReply) args[1])
|
| - .onInsertRequestSendComplete(true);
|
| - return null;
|
| - }
|
| -
|
| - })
|
| - .when(mSupervisedUserContentProvider)
|
| - .nativeRequestInsert(anyLong(),
|
| - any(SupervisedUserContentProvider.SupervisedUserInsertReply.class),
|
| - anyString());
|
| - TestRunnable r1 = new TestRunnable();
|
| - Thread t1 = new Thread(r1);
|
| - sLatch = new CountDownLatch(1);
|
| - t1.start();
|
| - sLatch.await();
|
| - Robolectric.runUiThreadTasks();
|
| - t1.join();
|
| - verify(mSupervisedUserContentProvider)
|
| - .nativeRequestInsert(eq(1234L),
|
| - any(SupervisedUserContentProvider.SupervisedUserInsertReply.class),
|
| - eq("url"));
|
| - assertThat(r1.getResult(), is(true));
|
| - assertThat(mNativeCallLooper, is(Looper.getMainLooper()));
|
| - doAnswer(new Answer<Void>() {
|
| -
|
| - @Override
|
| - public Void answer(InvocationOnMock invocation) throws Throwable {
|
| - Object args[] = invocation.getArguments();
|
| - mNativeCallLooper = Looper.myLooper();
|
| - ((SupervisedUserContentProvider.SupervisedUserInsertReply) args[1])
|
| - .onInsertRequestSendComplete(false);
|
| - return null;
|
| - }
|
| -
|
| - })
|
| - .when(mSupervisedUserContentProvider)
|
| - .nativeRequestInsert(anyLong(),
|
| - any(SupervisedUserContentProvider.SupervisedUserInsertReply.class),
|
| - anyString());
|
| - TestRunnable r2 = new TestRunnable();
|
| - Thread t2 = new Thread(r2);
|
| - sLatch = new CountDownLatch(1);
|
| - t2.start();
|
| - sLatch.await();
|
| - Robolectric.runUiThreadTasks();
|
| - t2.join();
|
| - Robolectric.runUiThreadTasks();
|
| - verify(mSupervisedUserContentProvider, times(2))
|
| - .nativeRequestInsert(eq(1234L),
|
| - any(SupervisedUserContentProvider.SupervisedUserInsertReply.class),
|
| - eq("url"));
|
| - assertThat(r2.getResult(), is(false));
|
| - assertThat(mNativeCallLooper, is(Looper.getMainLooper()));
|
| - }
|
| -}
|
|
|