/** * Copyright (c) 2015-present, Facebook, Inc. * All rights reserved. * * This source code is licensed under the BSD-style license found in the * LICENSE file in the root directory of this source tree. An additional grant * of patent rights can be found in the PATENTS file in the same directory. */ package com.facebook.react.bridge; import com.facebook.react.common.build.ReactBuildConfig; import org.junit.Rule; import org.junit.Test; import org.junit.runner.RunWith; import org.powermock.core.classloader.annotations.PowerMockIgnore; import org.powermock.core.classloader.annotations.PrepareForTest; import org.powermock.core.classloader.annotations.SuppressStaticInitializationFor; import org.powermock.modules.junit4.rule.PowerMockRule; import org.powermock.reflect.Whitebox; import org.robolectric.RobolectricTestRunner; import static org.fest.assertions.api.Assertions.assertThat; import static org.mockito.Mockito.mock; @PowerMockIgnore({"org.mockito.*", "org.robolectric.*", "android.*"}) @SuppressStaticInitializationFor("com.facebook.react.common.build.ReactBuildConfig") @PrepareForTest({ReactBuildConfig.class}) @RunWith(RobolectricTestRunner.class) public class ModuleSpecTest { @Rule public PowerMockRule rule = new PowerMockRule(); @Test(expected = IllegalArgumentException.class) public void testSimpleFailFast() { Whitebox.setInternalState(ReactBuildConfig.class, "DEBUG", true); ModuleSpec.simple(ComplexModule.class, mock(ReactApplicationContext.class)); } @Test(expected = IllegalArgumentException.class) public void testSimpleFailFastDefault() { Whitebox.setInternalState(ReactBuildConfig.class, "DEBUG", true); ModuleSpec.simple(ComplexModule.class); } @Test public void testSimpleNoFailFastRelease() { Whitebox.setInternalState(ReactBuildConfig.class, "DEBUG", false); ModuleSpec.simple(ComplexModule.class, mock(ReactApplicationContext.class)); } @Test(expected = RuntimeException.class) public void testSimpleFailLateRelease() { Whitebox.setInternalState(ReactBuildConfig.class, "DEBUG", false); ModuleSpec spec = ModuleSpec.simple(ComplexModule.class, mock(ReactApplicationContext.class)); spec.getProvider().get(); } @Test public void testSimpleDefaultConstructor() { Whitebox.setInternalState(ReactBuildConfig.class, "DEBUG", true); ModuleSpec spec = ModuleSpec.simple(SimpleModule.class); assertThat(spec.getProvider().get()).isInstanceOf(SimpleModule.class); } @Test public void testSimpleContextConstructor() { Whitebox.setInternalState(ReactBuildConfig.class, "DEBUG", true); ReactApplicationContext context = mock(ReactApplicationContext.class); ModuleSpec spec = ModuleSpec.simple(SimpleContextModule.class, context); NativeModule module = spec.getProvider().get(); assertThat(module).isInstanceOf(SimpleContextModule.class); SimpleContextModule contextModule = (SimpleContextModule) module; assertThat(contextModule.getReactApplicationContext()).isSameAs(context); } public static class ComplexModule extends BaseJavaModule { public ComplexModule(int a, int b) { } public String getName() { return "ComplexModule"; } } public static class SimpleModule extends BaseJavaModule { public String getName() { return "SimpleModule"; } } public static class SimpleContextModule extends ReactContextBaseJavaModule { public SimpleContextModule(ReactApplicationContext context) { super(context); } public String getName() { return "SimpleContextModule"; } } }