190ff9d99SŁukasz Kosmaty'use strict'; 290ff9d99SŁukasz Kosmaty 390ff9d99SŁukasz Kosmatyimport { Platform } from '@unimodules/core'; 490ff9d99SŁukasz Kosmatyimport Constants from 'expo-constants'; 590ff9d99SŁukasz Kosmaty 690ff9d99SŁukasz Kosmatyimport ExponentTest from './ExponentTest'; 790ff9d99SŁukasz Kosmatyimport { isDeviceFarm } from './utils/Environment'; 890ff9d99SŁukasz Kosmaty 990ff9d99SŁukasz Kosmatyfunction browserSupportsWebGL() { 1090ff9d99SŁukasz Kosmaty try { 1190ff9d99SŁukasz Kosmaty const canvas = document.createElement('canvas'); 1290ff9d99SŁukasz Kosmaty return ( 1390ff9d99SŁukasz Kosmaty !!window.WebGLRenderingContext && 1490ff9d99SŁukasz Kosmaty (canvas.getContext('webgl') || canvas.getContext('experimental-webgl')) 1590ff9d99SŁukasz Kosmaty ); 1690ff9d99SŁukasz Kosmaty } catch (e) { 1790ff9d99SŁukasz Kosmaty return false; 1890ff9d99SŁukasz Kosmaty } 1990ff9d99SŁukasz Kosmaty} 2090ff9d99SŁukasz Kosmaty 2190ff9d99SŁukasz Kosmatyfunction optionalRequire(requirer) { 2290ff9d99SŁukasz Kosmaty try { 2390ff9d99SŁukasz Kosmaty return requirer(); 2490ff9d99SŁukasz Kosmaty } catch (e) { 2590ff9d99SŁukasz Kosmaty // eslint-disable-next-line 2690ff9d99SŁukasz Kosmaty return; 2790ff9d99SŁukasz Kosmaty } 2890ff9d99SŁukasz Kosmaty} 2990ff9d99SŁukasz Kosmaty 3090ff9d99SŁukasz Kosmaty// Both Location and TaskManager test suites define tasks in TaskManager. 3190ff9d99SŁukasz Kosmaty// Since tasks can only be defined during initialization phase (not as a result 3290ff9d99SŁukasz Kosmaty// of calling some function when the application is running, but rather in global scope), 3390ff9d99SŁukasz Kosmaty// we need to trigger code execution of these modules here (not in `getTestModules` 3490ff9d99SŁukasz Kosmaty// which is called in one of the components). 3590ff9d99SŁukasz Kosmatyconst LocationTestScreen = optionalRequire(() => require('./tests/Location')); 3690ff9d99SŁukasz Kosmatyconst TaskManagerTestScreen = optionalRequire(() => require('./tests/TaskManager')); 3790ff9d99SŁukasz Kosmaty// I have a hunch that optionalRequire doesn't work when *not* in global scope 3890ff9d99SŁukasz Kosmaty// since I had to move Camera screen import here too to get rid of an error 3990ff9d99SŁukasz Kosmaty// caused by missing native module. 4090ff9d99SŁukasz Kosmatyconst CameraTestScreen = optionalRequire(() => require('./tests/Camera')); 4190ff9d99SŁukasz Kosmaty 4290ff9d99SŁukasz Kosmaty// List of all modules for tests. Each file path must be statically present for 4390ff9d99SŁukasz Kosmaty// the packager to pick them all up. 4490ff9d99SŁukasz Kosmatyexport function getTestModules() { 4590ff9d99SŁukasz Kosmaty const modules = [ 4690ff9d99SŁukasz Kosmaty // Sanity 4790ff9d99SŁukasz Kosmaty require('./tests/Basic'), 4890ff9d99SŁukasz Kosmaty ]; 4990ff9d99SŁukasz Kosmaty 5090ff9d99SŁukasz Kosmaty // Expo core modules should run everywhere 5190ff9d99SŁukasz Kosmaty modules.push( 5290ff9d99SŁukasz Kosmaty require('./tests/Asset'), 5390ff9d99SŁukasz Kosmaty require('./tests/Constants'), 5490ff9d99SŁukasz Kosmaty require('./tests/FileSystem'), 5590ff9d99SŁukasz Kosmaty require('./tests/Font'), 5690ff9d99SŁukasz Kosmaty require('./tests/Permissions'), 57e16679f7SStanisław Chmiela require('./tests/ImagePicker'), 58e16679f7SStanisław Chmiela optionalRequire(() => require('./tests/Image')) 5990ff9d99SŁukasz Kosmaty ); 6090ff9d99SŁukasz Kosmaty 6190ff9d99SŁukasz Kosmaty // Universally tested APIs 6290ff9d99SŁukasz Kosmaty modules.push( 6390ff9d99SŁukasz Kosmaty require('./tests/Random'), 6490ff9d99SŁukasz Kosmaty require('./tests/Crypto'), 6590ff9d99SŁukasz Kosmaty require('./tests/KeepAwake'), 6690ff9d99SŁukasz Kosmaty require('./tests/Blur'), 6790ff9d99SŁukasz Kosmaty require('./tests/LinearGradient'), 6890ff9d99SŁukasz Kosmaty require('./tests/Facebook'), 6990ff9d99SŁukasz Kosmaty require('./tests/HTML'), 7090ff9d99SŁukasz Kosmaty require('./tests/FirebaseCore'), 719158859eSHein Rutjes require('./tests/FirebaseAnalytics'), 72e11b7986SStanisław Chmiela require('./tests/FirebaseRecaptcha'), 73e11b7986SStanisław Chmiela optionalRequire(() => require('./tests/SQLite')) 7490ff9d99SŁukasz Kosmaty ); 7590ff9d99SŁukasz Kosmaty 7690ff9d99SŁukasz Kosmaty if (Platform.OS === 'android') { 7790ff9d99SŁukasz Kosmaty modules.push(require('./tests/JSC')); 7890ff9d99SŁukasz Kosmaty } 7990ff9d99SŁukasz Kosmaty 8090ff9d99SŁukasz Kosmaty if (global.DETOX) { 8190ff9d99SŁukasz Kosmaty modules.push( 8290ff9d99SŁukasz Kosmaty require('./tests/Contacts'), 8390ff9d99SŁukasz Kosmaty require('./tests/Haptics'), 8490ff9d99SŁukasz Kosmaty require('./tests/Localization'), 8590ff9d99SŁukasz Kosmaty require('./tests/SecureStore'), 8690ff9d99SŁukasz Kosmaty require('./tests/SMS'), 8790ff9d99SŁukasz Kosmaty require('./tests/StoreReview'), 8890ff9d99SŁukasz Kosmaty require('./tests/NewNotifications') 8990ff9d99SŁukasz Kosmaty ); 9090ff9d99SŁukasz Kosmaty return modules; 9190ff9d99SŁukasz Kosmaty } 9290ff9d99SŁukasz Kosmaty 9390ff9d99SŁukasz Kosmaty if (Platform.OS === 'web') { 9490ff9d99SŁukasz Kosmaty modules.push( 9590ff9d99SŁukasz Kosmaty require('./tests/Contacts'), 9690ff9d99SŁukasz Kosmaty // require('./tests/SVG'), 9790ff9d99SŁukasz Kosmaty require('./tests/Localization'), 9890ff9d99SŁukasz Kosmaty optionalRequire(() => require('./tests/NewNotifications')) 9990ff9d99SŁukasz Kosmaty ); 10090ff9d99SŁukasz Kosmaty 10190ff9d99SŁukasz Kosmaty if (browserSupportsWebGL()) { 10290ff9d99SŁukasz Kosmaty modules.push(optionalRequire(() => require('./tests/GLView'))); 10390ff9d99SŁukasz Kosmaty } 10490ff9d99SŁukasz Kosmaty 10590ff9d99SŁukasz Kosmaty if (ExponentTest && !ExponentTest.isInCI) { 10690ff9d99SŁukasz Kosmaty // modules.push(optionalRequire(() => require('./tests/Speech'))); 10790ff9d99SŁukasz Kosmaty } 10890ff9d99SŁukasz Kosmaty return modules.filter(Boolean); 10990ff9d99SŁukasz Kosmaty } 11090ff9d99SŁukasz Kosmaty 11190ff9d99SŁukasz Kosmaty modules.push( 11290ff9d99SŁukasz Kosmaty optionalRequire(() => require('./tests/Application')), 11356b27c56SEvan Bacon optionalRequire(() => require('./tests/AuthSession')), 11490ff9d99SŁukasz Kosmaty optionalRequire(() => require('./tests/Device')), 11590ff9d99SŁukasz Kosmaty optionalRequire(() => require('./tests/GLView')), 11690ff9d99SŁukasz Kosmaty optionalRequire(() => require('./tests/Haptics')), 11790ff9d99SŁukasz Kosmaty optionalRequire(() => require('./tests/Localization')), 11890ff9d99SŁukasz Kosmaty optionalRequire(() => require('./tests/Network')), 11990ff9d99SŁukasz Kosmaty optionalRequire(() => require('./tests/SecureStore')), 12090ff9d99SŁukasz Kosmaty optionalRequire(() => require('./tests/Segment')), 12190ff9d99SŁukasz Kosmaty optionalRequire(() => require('./tests/Speech')), 12290ff9d99SŁukasz Kosmaty optionalRequire(() => require('./tests/Recording')), 12390ff9d99SŁukasz Kosmaty optionalRequire(() => require('./tests/ScreenOrientation')), 12490ff9d99SŁukasz Kosmaty optionalRequire(() => require('./tests/Payments')), 12590ff9d99SŁukasz Kosmaty optionalRequire(() => require('./tests/AdMobInterstitial')), 12690ff9d99SŁukasz Kosmaty optionalRequire(() => require('./tests/AdMobRewarded')), 12790ff9d99SŁukasz Kosmaty optionalRequire(() => require('./tests/FBBannerAd')), 12890ff9d99SŁukasz Kosmaty optionalRequire(() => require('./tests/NewNotifications')) 12990ff9d99SŁukasz Kosmaty ); 13090ff9d99SŁukasz Kosmaty 13190ff9d99SŁukasz Kosmaty if (!isDeviceFarm()) { 13290ff9d99SŁukasz Kosmaty // Times out sometimes 13390ff9d99SŁukasz Kosmaty modules.push( 13490ff9d99SŁukasz Kosmaty optionalRequire(() => require('./tests/AdMobPublisherBanner')), 13590ff9d99SŁukasz Kosmaty optionalRequire(() => require('./tests/AdMobBanner')) 13690ff9d99SŁukasz Kosmaty ); 13790ff9d99SŁukasz Kosmaty // Invalid placementId in CI (all tests fail) 13890ff9d99SŁukasz Kosmaty modules.push(optionalRequire(() => require('./tests/FBNativeAd'))); 13990ff9d99SŁukasz Kosmaty // Requires interaction (sign in popup) 14090ff9d99SŁukasz Kosmaty modules.push(optionalRequire(() => require('./tests/GoogleSignIn'))); 14190ff9d99SŁukasz Kosmaty // Popup to request device's location which uses Google's location service 14290ff9d99SŁukasz Kosmaty modules.push(LocationTestScreen); 14390ff9d99SŁukasz Kosmaty // Fails to redirect because of malformed URL in published version with release channel parameter 14490ff9d99SŁukasz Kosmaty modules.push(optionalRequire(() => require('./tests/Linking'))); 14590ff9d99SŁukasz Kosmaty // Has uncontrolled view controllers 14690ff9d99SŁukasz Kosmaty modules.push(require('./tests/SMS')); 14790ff9d99SŁukasz Kosmaty // Requires permission 148*9b1f804bSŁukasz Kosmaty modules.push(optionalRequire(() => require('./tests/Contacts'))); 14990ff9d99SŁukasz Kosmaty modules.push(optionalRequire(() => require('./tests/Calendar'))); 150aa2d439aSTomasz Sapeta modules.push(optionalRequire(() => require('./tests/CalendarReminders'))); 15190ff9d99SŁukasz Kosmaty modules.push(optionalRequire(() => require('./tests/MediaLibrary'))); 15290ff9d99SŁukasz Kosmaty modules.push(optionalRequire(() => require('./tests/Notifications'))); 15390ff9d99SŁukasz Kosmaty 15490ff9d99SŁukasz Kosmaty modules.push(optionalRequire(() => require('./tests/Battery'))); 15590ff9d99SŁukasz Kosmaty if (Constants.isDevice) { 15690ff9d99SŁukasz Kosmaty modules.push(optionalRequire(() => require('./tests/Brightness'))); 15790ff9d99SŁukasz Kosmaty } 15890ff9d99SŁukasz Kosmaty // Crashes app when mounting component 15990ff9d99SŁukasz Kosmaty modules.push(optionalRequire(() => require('./tests/Video'))); 16090ff9d99SŁukasz Kosmaty // "sdkUnversionedTestSuite failed: java.lang.NullPointerException: Attempt to invoke interface method 16190ff9d99SŁukasz Kosmaty // 'java.util.Map org.unimodules.interfaces.taskManager.TaskInterface.getOptions()' on a null object reference" 16290ff9d99SŁukasz Kosmaty modules.push(TaskManagerTestScreen); 16390ff9d99SŁukasz Kosmaty // Audio tests are flaky in CI due to asynchronous fetching of resources 16490ff9d99SŁukasz Kosmaty modules.push(optionalRequire(() => require('./tests/Audio'))); 16590ff9d99SŁukasz Kosmaty // The Camera tests are flaky on iOS, i.e. they fail randomly 16690ff9d99SŁukasz Kosmaty if (Constants.isDevice && Platform.OS === 'android') { 16790ff9d99SŁukasz Kosmaty modules.push(CameraTestScreen); 16890ff9d99SŁukasz Kosmaty } 16990ff9d99SŁukasz Kosmaty } 17090ff9d99SŁukasz Kosmaty if (Constants.isDevice) { 17190ff9d99SŁukasz Kosmaty modules.push(optionalRequire(() => require('./tests/Cellular'))); 17290ff9d99SŁukasz Kosmaty modules.push(optionalRequire(() => require('./tests/BarCodeScanner'))); 17390ff9d99SŁukasz Kosmaty } 17490ff9d99SŁukasz Kosmaty return modules.filter(Boolean); 17590ff9d99SŁukasz Kosmaty} 176