Commit b98fe4f4 authored by Fred Mello's avatar Fred Mello Committed by Commit Bot

Unit tests for (module_installer) builder classes

Bug: 1005802
Change-Id: Ie7df2c7d6c2eb1f7e65572bda78c80831c34a04b
Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/1841771
Commit-Queue: Fred Mello <fredmello@chromium.org>
Reviewed-by: default avatarTibor Goldschwendt <tiborg@chromium.org>
Cr-Commit-Position: refs/heads/master@{#703152}
parent 403a6a6d
...@@ -44,6 +44,8 @@ android_library("module_installer_java") { ...@@ -44,6 +44,8 @@ android_library("module_installer_java") {
junit_binary("module_installer_junit_tests") { junit_binary("module_installer_junit_tests") {
java_files = [ java_files = [
"junit/src/org/chromium/components/module_installer/builder/ModuleEngineTest.java",
"junit/src/org/chromium/components/module_installer/builder/ModuleTest.java",
"junit/src/org/chromium/components/module_installer/engine/ApkEngineTest.java", "junit/src/org/chromium/components/module_installer/engine/ApkEngineTest.java",
"junit/src/org/chromium/components/module_installer/engine/SplitCompatEngineTest.java", "junit/src/org/chromium/components/module_installer/engine/SplitCompatEngineTest.java",
"junit/src/org/chromium/components/module_installer/logger/LoggerTestUtil.java", "junit/src/org/chromium/components/module_installer/logger/LoggerTestUtil.java",
......
...@@ -17,8 +17,8 @@ import org.chromium.components.module_installer.engine.InstallListener; ...@@ -17,8 +17,8 @@ import org.chromium.components.module_installer.engine.InstallListener;
* modules can be moved in and out from the base more easily. * modules can be moved in and out from the base more easily.
*/ */
class ModuleEngine implements InstallEngine { class ModuleEngine implements InstallEngine {
private static InstallEngine sInstallEngine; private InstallEngine mInstallEngine;
private static EngineFactory sEngineFactory; private EngineFactory mEngineFactory;
private final String mImplClassName; private final String mImplClassName;
...@@ -28,7 +28,7 @@ class ModuleEngine implements InstallEngine { ...@@ -28,7 +28,7 @@ class ModuleEngine implements InstallEngine {
public ModuleEngine(String implClassName, EngineFactory engineFactory) { public ModuleEngine(String implClassName, EngineFactory engineFactory) {
mImplClassName = implClassName; mImplClassName = implClassName;
sEngineFactory = engineFactory; mEngineFactory = engineFactory;
} }
@Override @Override
...@@ -58,11 +58,11 @@ class ModuleEngine implements InstallEngine { ...@@ -58,11 +58,11 @@ class ModuleEngine implements InstallEngine {
getEngine().install(moduleName, listener); getEngine().install(moduleName, listener);
} }
private static InstallEngine getEngine() { private InstallEngine getEngine() {
// Lazily instantiate the engine - related to crbug/1010887. // Lazily instantiate the engine - related to crbug/1010887.
if (sInstallEngine == null) { if (mInstallEngine == null) {
sInstallEngine = sEngineFactory.getEngine(); mInstallEngine = mEngineFactory.getEngine();
} }
return sInstallEngine; return mInstallEngine;
} }
} }
// Copyright 2019 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.components.module_installer.builder;
import static org.junit.Assert.assertFalse;
import static org.junit.Assert.assertTrue;
import static org.mockito.Mockito.doReturn;
import static org.mockito.Mockito.inOrder;
import static org.mockito.Mockito.mock;
import android.app.Activity;
import org.junit.Before;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.mockito.InOrder;
import org.mockito.Mock;
import org.mockito.MockitoAnnotations;
import org.chromium.base.test.BaseRobolectricTestRunner;
import org.chromium.components.module_installer.engine.EngineFactory;
import org.chromium.components.module_installer.engine.InstallEngine;
import org.chromium.components.module_installer.engine.InstallListener;
/**
* Test suite for the ModuleEngine class.
*/
@RunWith(BaseRobolectricTestRunner.class)
public class ModuleEngineTest {
@Mock
private InstallEngine mInstallEngineMock;
@Mock
private EngineFactory mEngineFactoryMock;
private ModuleEngine mModuleEngine;
private static class ModuleStub {}
@Before
public void setUp() {
MockitoAnnotations.initMocks(this);
doReturn(mInstallEngineMock).when(mEngineFactoryMock).getEngine();
mModuleEngine = new ModuleEngine(ModuleStub.class.getName(), mEngineFactoryMock);
}
@Test
public void whenInitActivity_verifyActivityInitialized() {
// Arrange.
Activity activityMock = mock(Activity.class);
InOrder inOrder = inOrder(mInstallEngineMock);
// Act.
mModuleEngine.initActivity(activityMock);
// Assert.
inOrder.verify(mInstallEngineMock).initActivity(activityMock);
inOrder.verifyNoMoreInteractions();
}
@Test
public void whenVerifyingIsInstalled_VerifyTrue() {
// Arrange.
String moduleName = "any name";
// Act.
Boolean isInstalled = mModuleEngine.isInstalled(moduleName);
// Assert.
assertTrue(isInstalled);
}
@Test
public void whenVerifyingIsInstalled_VerifyFalse() {
// Arrange.
String moduleName = "any name";
ModuleEngine engine = new ModuleEngine("non_existent_class", mEngineFactoryMock);
// Act.
Boolean isInstalled = engine.isInstalled(moduleName);
// Assert.
assertFalse(isInstalled);
}
@Test
public void whenInstallDeferred_verifyInstalled() {
// Arrange.
String moduleName = "whenInstallDeferred_verifyInstalled";
InOrder inOrder = inOrder(mInstallEngineMock);
// Act.
mModuleEngine.installDeferred(moduleName);
// Assert.
inOrder.verify(mInstallEngineMock).installDeferred(moduleName);
inOrder.verifyNoMoreInteractions();
}
@Test
public void whenInstall_verifyInstalled() {
// Arrange.
String moduleName = "whenInstall_verifyInstalled";
InstallListener listenerMock = mock(InstallListener.class);
InOrder inOrder = inOrder(mInstallEngineMock);
// Act.
mModuleEngine.install(moduleName, listenerMock);
// Assert.
inOrder.verify(mInstallEngineMock).install(moduleName, listenerMock);
inOrder.verifyNoMoreInteractions();
}
}
// Copyright 2019 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.components.module_installer.builder;
import static org.junit.Assert.assertEquals;
import static org.mockito.Mockito.doReturn;
import static org.mockito.Mockito.inOrder;
import static org.mockito.Mockito.mock;
import org.junit.Before;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.mockito.InOrder;
import org.mockito.Mock;
import org.mockito.MockitoAnnotations;
import org.chromium.base.test.BaseRobolectricTestRunner;
import org.chromium.components.module_installer.engine.InstallEngine;
import org.chromium.components.module_installer.engine.InstallListener;
/**
* Test suite for the Module class.
*/
@RunWith(BaseRobolectricTestRunner.class)
public class ModuleTest {
@Mock
private InstallEngine mInstallEngineMock;
private final String mModuleName = "module_stub";
private final Class mInterface = ModuleTestStubInterface.class;
private final String mImplName = ModuleTestStub.class.getName();
private Module<ModuleTestStub> mModule;
/**
* This class needs to be static (for testing purposes).
* https://stackoverflow.com/questions/31396758/why-i-get-java-lang-instantiationexception-here
*/
public static class ModuleTestStub implements ModuleTestStubInterface {}
private interface ModuleTestStubInterface {}
@Before
public void setUp() {
MockitoAnnotations.initMocks(this);
mModule = new Module<ModuleTestStub>(mModuleName, mInterface, mImplName);
mModule.setInstallEngine(mInstallEngineMock);
}
@Test
public void whenVerifyingIsInstalled_VerifySequence() {
// Arrange.
InOrder inOrder = inOrder(mInstallEngineMock);
// Act.
mModule.isInstalled();
// Assert.
inOrder.verify(mInstallEngineMock).isInstalled(mModuleName);
inOrder.verifyNoMoreInteractions();
}
@Test
public void whenInstalling_VerifySequence() {
// Arrange.
InstallListener listenerMock = mock(InstallListener.class);
InOrder inOrder = inOrder(mInstallEngineMock, listenerMock);
// Act.
mModule.install(listenerMock);
// Assert.
inOrder.verify(mInstallEngineMock).install(mModuleName, listenerMock);
inOrder.verifyNoMoreInteractions();
}
@Test
public void whenInstallingDeferred_VerifySequence() {
// Arrange.
InOrder inOrder = inOrder(mInstallEngineMock);
// Act.
mModule.installDeferred();
// Assert.
inOrder.verify(mInstallEngineMock).installDeferred(mModuleName);
inOrder.verifyNoMoreInteractions();
}
@Test
public void whenGetImpl_VerifyCorrectInstance() {
// Arrange.
Class expectedType = ModuleTestStub.class;
doReturn(true).when(mInstallEngineMock).isInstalled(mModuleName);
// Act.
ModuleTestStub impl = mModule.getImpl();
// Assert.
assertEquals(expectedType, impl.getClass());
}
@Test(expected = RuntimeException.class)
public void whenGettingUnknownImpl_VerifyError() {
// Arrange.
String impl = "some unknown type";
Module<ModuleTestStub> module = new Module<ModuleTestStub>(mModuleName, mInterface, impl);
doReturn(true).when(mInstallEngineMock).isInstalled(mModuleName);
module.setInstallEngine(mInstallEngineMock);
// Act & Assert.
module.getImpl();
}
}
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment