public async Task ReactInstance_Initialize_Dispose() { var mre = new ManualResetEvent(false); var module = new TestNativeModule { OnInitialized = () => mre.Set(), }; var reactContext = new ReactContext(); var registry = new NativeModuleRegistry.Builder(reactContext) .Add(module) .Build(); var executor = new MockJavaScriptExecutor { OnCallFunctionReturnFlushedQueue = (_, __, ___) => JValue.CreateNull(), OnFlushQueue = () => JValue.CreateNull(), OnInvokeCallbackAndReturnFlushedQueue = (_, __) => JValue.CreateNull() }; var builder = new ReactInstance.Builder() { QueueConfiguration = TestReactQueueConfiguration.Create(_ => { }), Registry = registry, JavaScriptExecutorFactory = () => executor, BundleLoader = JavaScriptBundleLoader.CreateFileLoader("ms-appx:///Resources/test.js"), }; var instance = await DispatcherHelpers.CallOnDispatcherAsync(() => builder.Build()); reactContext.InitializeWithInstance(instance); await DispatcherHelpers.CallOnDispatcherAsync(async() => await instance.InitializeAsync()); var caught = false; await DispatcherHelpers.CallOnDispatcherAsync(async() => { try { await instance.InitializeAsync(); } catch (InvalidOperationException) { caught = true; } }); Assert.IsTrue(caught); mre.WaitOne(); Assert.AreEqual(1, module.InitializeCalls); await DispatcherHelpers.CallOnDispatcherAsync(instance.DisposeAsync); Assert.AreEqual(1, module.OnReactInstanceDisposeCalls); // Dispose is idempotent await DispatcherHelpers.CallOnDispatcherAsync(instance.DisposeAsync); Assert.AreEqual(1, module.OnReactInstanceDisposeCalls); Assert.IsTrue(instance.IsDisposed); }
private ReactContext CreateReactContext(IInvocationHandler handler) { var eventEmitter = new RCTDeviceEventEmitter(); eventEmitter.InvocationHandler = handler; var reactInstance = new TestReactInstance(eventEmitter); var reactContext = new ReactContext(); reactContext.InitializeWithInstance(reactInstance); return(reactContext); }
private static async Task <ReactContext> CreateContextAsync(IJavaScriptExecutor executor) { var reactInstance = await DispatcherHelpers.CallOnDispatcherAsync(() => CreateReactInstance(executor)); await InitializeReactInstanceAsync(reactInstance); var context = new ReactContext(); context.InitializeWithInstance(reactInstance); return(context); }
private static NetworkingModule CreateNetworkingModule(IHttpClient httpClient, IInvocationHandler handler) { var context = new ReactContext(); var eventEmitter = new RCTDeviceEventEmitter(); eventEmitter.InvocationHandler = handler; var reactInstance = new TestReactInstance(eventEmitter); context.InitializeWithInstance(reactInstance); return(new NetworkingModule(httpClient, context)); }
private static ReactContext CreateReactContext(IInvocationHandler handler) { var context = new ReactContext(); var jsTimers = new JSTimersExecution { InvocationHandler = handler, }; var reactInstance = new TestReactInstance(jsTimers); context.InitializeWithInstance(reactInstance); return(context); }
private static async Task <ReactContext> CreateContextAsync(IJavaScriptExecutor executor) { var context = new ReactContext(); var reactInstance = await DispatcherHelpers.CallOnDispatcherAsync(async() => { var instance = CreateReactInstance(context, executor); context.InitializeWithInstance(instance); instance.Initialize(); await instance.InitializeBridgeAsync(CancellationToken.None); return(instance); }); return(context); }
private static ReactContext CreateReactContext(IInvocationHandler handler) { var context = new ReactContext(); var ids = new List <int>(); var appStateModule = new AppStateModule(context); appStateModule.Initialize(); var eventEmitter = new RCTDeviceEventEmitter { InvocationHandler = handler, }; var reactInstance = new TestReactInstance(appStateModule, eventEmitter); context.InitializeWithInstance(reactInstance); return(context); }
public async Task ReactInstance_GetModules() { var module = new TestNativeModule(); var reactContext = new ReactContext(); var registry = new NativeModuleRegistry.Builder(reactContext) .Add(module) .Build(); var executor = new MockJavaScriptExecutor { OnCallFunctionReturnFlushedQueue = (_, __, ___) => JValue.CreateNull(), OnFlushQueue = () => JValue.CreateNull(), OnInvokeCallbackAndReturnFlushedQueue = (_, __) => JValue.CreateNull() }; var builder = new ReactInstance.Builder() { QueueConfiguration = TestReactQueueConfiguration.Create(_ => { }), Registry = registry, JavaScriptExecutorFactory = () => executor, BundleLoader = JavaScriptBundleLoader.CreateFileLoader("ms-appx:///Resources/test.js"), }; var instance = await DispatcherHelpers.CallOnDispatcherAsync(() => builder.Build()); reactContext.InitializeWithInstance(instance); var actualModule = instance.GetNativeModule <TestNativeModule>(); Assert.AreSame(module, actualModule); var firstJSModule = instance.GetJavaScriptModule <TestJavaScriptModule>(); var secondJSModule = instance.GetJavaScriptModule <TestJavaScriptModule>(); Assert.AreSame(firstJSModule, secondJSModule); await DispatcherHelpers.CallOnDispatcherAsync(instance.DisposeAsync); }
private async Task <ReactContext> CreateReactContextCoreAsync( Func <IJavaScriptExecutor> jsExecutorFactory, JavaScriptBundleLoader jsBundleLoader, CancellationToken token) { Tracer.Write(ReactConstants.Tag, "Creating React context."); _sourceUrl = jsBundleLoader.SourceUrl; var reactContext = new ReactContext(); if (_useDeveloperSupport) { reactContext.NativeModuleCallExceptionHandler = _nativeModuleCallExceptionHandler ?? _devSupportManager.HandleException; } var nativeRegistryBuilder = new NativeModuleRegistry.Builder(reactContext); using (Tracer.Trace(Tracer.TRACE_TAG_REACT_BRIDGE, "createAndProcessCoreModulesPackage").Start()) { var coreModulesPackage = new CoreModulesPackage( this, InvokeDefaultOnBackPressed, _uiImplementationProvider); ProcessPackage(coreModulesPackage, reactContext, nativeRegistryBuilder); } foreach (var reactPackage in _packages) { using (Tracer.Trace(Tracer.TRACE_TAG_REACT_BRIDGE, "createAndProcessCustomReactPackage").Start()) { ProcessPackage(reactPackage, reactContext, nativeRegistryBuilder); } } var nativeModuleRegistry = default(NativeModuleRegistry); using (Tracer.Trace(Tracer.TRACE_TAG_REACT_BRIDGE, "buildNativeModuleRegistry").Start()) { nativeModuleRegistry = nativeRegistryBuilder.Build(); } var queueConfiguration = ReactQueueConfigurationFactory.Default.Create(reactContext.HandleException); var reactInstanceBuilder = new ReactInstance.Builder { QueueConfiguration = queueConfiguration, JavaScriptExecutorFactory = jsExecutorFactory, Registry = nativeModuleRegistry, BundleLoader = jsBundleLoader, }; var reactInstance = default(ReactInstance); using (Tracer.Trace(Tracer.TRACE_TAG_REACT_BRIDGE, "createReactInstance").Start()) { reactInstance = reactInstanceBuilder.Build(); } // TODO: add bridge idle debug listener reactContext.InitializeWithInstance(reactInstance); reactInstance.Initialize(); using (Tracer.Trace(Tracer.TRACE_TAG_REACT_BRIDGE, "RunJavaScriptBundle").Start()) { await reactInstance.InitializeBridgeAsync(token).ConfigureAwait(false); } return(reactContext); }
private async Task<ReactContext> CreateReactContextAsync( Func<IJavaScriptExecutor> jsExecutorFactory, JavaScriptBundleLoader jsBundleLoader) { Tracer.Write(ReactConstants.Tag, "Creating React context."); _sourceUrl = jsBundleLoader.SourceUrl; var nativeRegistryBuilder = new NativeModuleRegistry.Builder(); var jsModulesBuilder = new JavaScriptModuleRegistry.Builder(); var reactContext = new ReactContext(); if (_useDeveloperSupport) { reactContext.NativeModuleCallExceptionHandler = _devSupportManager.HandleException; } using (Tracer.Trace(Tracer.TRACE_TAG_REACT_BRIDGE, "createAndProcessCoreModulesPackage").Start()) { var coreModulesPackage = new CoreModulesPackage(this, InvokeDefaultOnBackPressed, _uiImplementationProvider); ProcessPackage(coreModulesPackage, reactContext, nativeRegistryBuilder, jsModulesBuilder); } foreach (var reactPackage in _packages) { using (Tracer.Trace(Tracer.TRACE_TAG_REACT_BRIDGE, "createAndProcessCustomReactPackage").Start()) { ProcessPackage(reactPackage, reactContext, nativeRegistryBuilder, jsModulesBuilder); } } var nativeModuleRegistry = default(NativeModuleRegistry); using (Tracer.Trace(Tracer.TRACE_TAG_REACT_BRIDGE, "buildNativeModuleRegistry").Start()) { nativeModuleRegistry = nativeRegistryBuilder.Build(); } var exceptionHandler = _nativeModuleCallExceptionHandler ?? _devSupportManager.HandleException; var reactInstanceBuilder = new ReactInstance.Builder { QueueConfigurationSpec = ReactQueueConfigurationSpec.Default, JavaScriptExecutorFactory = jsExecutorFactory, Registry = nativeModuleRegistry, JavaScriptModuleRegistry = jsModulesBuilder.Build(), BundleLoader = jsBundleLoader, NativeModuleCallExceptionHandler = exceptionHandler, }; var reactInstance = default(ReactInstance); using (Tracer.Trace(Tracer.TRACE_TAG_REACT_BRIDGE, "createReactInstance").Start()) { reactInstance = reactInstanceBuilder.Build(); } // TODO: add bridge idle debug listener reactContext.InitializeWithInstance(reactInstance); reactInstance.Initialize(); using (Tracer.Trace(Tracer.TRACE_TAG_REACT_BRIDGE, "RunJavaScriptBundle").Start()) { await reactInstance.InitializeBridgeAsync().ConfigureAwait(false); } return reactContext; }