mirror of
https://github.com/zhigang1992/react-native.git
synced 2026-04-30 05:55:48 +08:00
Summary: Runtime annotation processing uses reflection which is slow. We'll use build time annotation processing instead and create at build time static ModuleInfo classes which have "name", "canOverrideExistingModule", "supportsWebWorkers", "needsEagerInit". Reviewed By: lexs Differential Revision: D3752243 fbshipit-source-id: 3518c6f38087d8799a61410864007041389c0e15
107 lines
3.5 KiB
Java
107 lines
3.5 KiB
Java
/**
|
|
* 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";
|
|
}
|
|
}
|
|
}
|