| @ -0,0 +1,6 @@ | |||
| [android] | |||
| target = Google Inc.:Google APIs:23 | |||
| [maven_repositories] | |||
| central = https://repo1.maven.org/maven2 | |||
| @ -0,0 +1,97 @@ | |||
| [ignore] | |||
| # We fork some components by platform. | |||
| .*/*.web.js | |||
| .*/*.android.js | |||
| # Some modules have their own node_modules with overlap | |||
| .*/node_modules/node-haste/.* | |||
| # Ugh | |||
| .*/node_modules/babel.* | |||
| .*/node_modules/babylon.* | |||
| .*/node_modules/invariant.* | |||
| # Ignore react and fbjs where there are overlaps, but don't ignore | |||
| # anything that react-native relies on | |||
| .*/node_modules/fbjs/lib/Map.js | |||
| .*/node_modules/fbjs/lib/ErrorUtils.js | |||
| # Flow has a built-in definition for the 'react' module which we prefer to use | |||
| # over the currently-untyped source | |||
| .*/node_modules/react/react.js | |||
| .*/node_modules/react/lib/React.js | |||
| .*/node_modules/react/lib/ReactDOM.js | |||
| .*/__mocks__/.* | |||
| .*/__tests__/.* | |||
| .*/commoner/test/source/widget/share.js | |||
| # Ignore commoner tests | |||
| .*/node_modules/commoner/test/.* | |||
| # See https://github.com/facebook/flow/issues/442 | |||
| .*/react-tools/node_modules/commoner/lib/reader.js | |||
| # Ignore jest | |||
| .*/node_modules/jest-cli/.* | |||
| # Ignore Website | |||
| .*/website/.* | |||
| # Ignore generators | |||
| .*/local-cli/generator.* | |||
| # Ignore BUCK generated folders | |||
| .*\.buckd/ | |||
| # Ignore RNPM | |||
| .*/local-cli/rnpm/.* | |||
| .*/node_modules/is-my-json-valid/test/.*\.json | |||
| .*/node_modules/iconv-lite/encodings/tables/.*\.json | |||
| .*/node_modules/y18n/test/.*\.json | |||
| .*/node_modules/spdx-license-ids/spdx-license-ids.json | |||
| .*/node_modules/spdx-exceptions/index.json | |||
| .*/node_modules/resolve/test/subdirs/node_modules/a/b/c/x.json | |||
| .*/node_modules/resolve/lib/core.json | |||
| .*/node_modules/jsonparse/samplejson/.*\.json | |||
| .*/node_modules/json5/test/.*\.json | |||
| .*/node_modules/ua-parser-js/test/.*\.json | |||
| .*/node_modules/builtin-modules/builtin-modules.json | |||
| .*/node_modules/binary-extensions/binary-extensions.json | |||
| .*/node_modules/url-regex/tlds.json | |||
| .*/node_modules/joi/.*\.json | |||
| .*/node_modules/isemail/.*\.json | |||
| .*/node_modules/tr46/.*\.json | |||
| [include] | |||
| [libs] | |||
| node_modules/react-native/Libraries/react-native/react-native-interface.js | |||
| node_modules/react-native/flow | |||
| flow/ | |||
| [options] | |||
| module.system=haste | |||
| esproposal.class_static_fields=enable | |||
| esproposal.class_instance_fields=enable | |||
| munge_underscores=true | |||
| module.name_mapper='^image![a-zA-Z0-9$_-]+$' -> 'GlobalImageStub' | |||
| module.name_mapper='^[./a-zA-Z0-9$_-]+\.\(bmp\|gif\|jpg\|jpeg\|png\|psd\|svg\|webp\|m4v\|mov\|mp4\|mpeg\|mpg\|webm\|aac\|aiff\|caf\|m4a\|mp3\|wav\|html\|pdf\)$' -> 'RelativeImageStub' | |||
| suppress_type=$FlowIssue | |||
| suppress_type=$FlowFixMe | |||
| suppress_type=$FixMe | |||
| suppress_comment=\\(.\\|\n\\)*\\$FlowFixMe\\($\\|[^(]\\|(\\(>=0\\.\\(2[0-5]\\|1[0-9]\\|[0-9]\\).[0-9]\\)? *\\(site=[a-z,_]*react_native[a-z,_]*\\)?)\\) | |||
| suppress_comment=\\(.\\|\n\\)*\\$FlowIssue\\((\\(>=0\\.\\(2[0-5]\\|1[0-9]\\|[0-9]\\).[0-9]\\)? *\\(site=[a-z,_]*react_native[a-z,_]*\\)?)\\)?:? #[0-9]+ | |||
| suppress_comment=\\(.\\|\n\\)*\\$FlowFixedInNextDeploy | |||
| [version] | |||
| ^0.25.0 | |||
| @ -0,0 +1,40 @@ | |||
| # OSX | |||
| # | |||
| .DS_Store | |||
| # Xcode | |||
| # | |||
| build/ | |||
| *.pbxuser | |||
| !default.pbxuser | |||
| *.mode1v3 | |||
| !default.mode1v3 | |||
| *.mode2v3 | |||
| !default.mode2v3 | |||
| *.perspectivev3 | |||
| !default.perspectivev3 | |||
| xcuserdata | |||
| *.xccheckout | |||
| *.moved-aside | |||
| DerivedData | |||
| *.hmap | |||
| *.ipa | |||
| *.xcuserstate | |||
| project.xcworkspace | |||
| # Android/IJ | |||
| # | |||
| .idea | |||
| .gradle | |||
| local.properties | |||
| # node.js | |||
| # | |||
| node_modules/ | |||
| npm-debug.log | |||
| # BUCK | |||
| buck-out/ | |||
| \.buckd/ | |||
| android/app/libs | |||
| android/keystores/debug.keystore | |||
| @ -0,0 +1 @@ | |||
| {} | |||
| @ -0,0 +1,54 @@ | |||
| > detox | |||
| # React Native Demo Project | |||
| ## Requirements | |||
| * Make sure you have Xcode installed (tested with Xcode 8.1-8.2). | |||
| * make sure you have node installed (`brew install node`, node 8.3.0 and up is required for native async-await support, otherwise you'll have to babel the tests). | |||
| * Make sure you have react-native dependencies installed: | |||
| * react-native-cli is installed (`npm install -g react-native-cli`) | |||
| * watchman is installed (`brew install watchman`) | |||
| ### Step 1: Npm install | |||
| * Make sure you're in folder `examples/demo-react-native`. | |||
| * Run `npm install`. | |||
| ## To test Release build of your app | |||
| ### Step 2: Build | |||
| * Build the demo project | |||
| ```sh | |||
| detox build --configuration ios.sim.release | |||
| ``` | |||
| ### Step 3: Test | |||
| * Run tests on the demo project | |||
| ```sh | |||
| detox test --configuration ios.sim.release | |||
| ``` | |||
| This action will open a new simulator and run the tests on it. | |||
| ## To test Debug build of your app | |||
| ### Step 2: Build | |||
| * Build the demo project | |||
| ```sh | |||
| detox build --configuration ios.sim.debug | |||
| ``` | |||
| ### Step 3: Test | |||
| * start react-native packager | |||
| ```sh | |||
| npm run start | |||
| ``` | |||
| * Run tests on the demo project | |||
| ```sh | |||
| detox test --configuration ios.sim.debug | |||
| ``` | |||
| This action will open a new simulator and run the tests on it. | |||
| @ -0,0 +1,66 @@ | |||
| import re | |||
| # To learn about Buck see [Docs](https://buckbuild.com/). | |||
| # To run your application with Buck: | |||
| # - install Buck | |||
| # - `npm start` - to start the packager | |||
| # - `cd android` | |||
| # - `keytool -genkey -v -keystore keystores/debug.keystore -storepass android -alias androiddebugkey -keypass android -dname "CN=Android Debug,O=Android,C=US` | |||
| # - `./gradlew :app:copyDownloadableDepsToLibs` - make all Gradle compile dependencies available to Buck | |||
| # - `buck install -r android/app` - compile, install and run application | |||
| # | |||
| lib_deps = [] | |||
| for jarfile in glob(['libs/*.jar']): | |||
| name = 'jars__' + re.sub(r'^.*/([^/]+)\.jar$', r'\1', jarfile) | |||
| lib_deps.append(':' + name) | |||
| prebuilt_jar( | |||
| name = name, | |||
| binary_jar = jarfile, | |||
| ) | |||
| for aarfile in glob(['libs/*.aar']): | |||
| name = 'aars__' + re.sub(r'^.*/([^/]+)\.aar$', r'\1', aarfile) | |||
| lib_deps.append(':' + name) | |||
| android_prebuilt_aar( | |||
| name = name, | |||
| aar = aarfile, | |||
| ) | |||
| android_library( | |||
| name = 'all-libs', | |||
| exported_deps = lib_deps | |||
| ) | |||
| android_library( | |||
| name = 'app-code', | |||
| srcs = glob([ | |||
| 'src/main/java/**/*.java', | |||
| ]), | |||
| deps = [ | |||
| ':all-libs', | |||
| ':build_config', | |||
| ':res', | |||
| ], | |||
| ) | |||
| android_build_config( | |||
| name = 'build_config', | |||
| package = 'com.example', | |||
| ) | |||
| android_resource( | |||
| name = 'res', | |||
| res = 'src/main/res', | |||
| package = 'com.example', | |||
| ) | |||
| android_binary( | |||
| name = 'app', | |||
| package_type = 'debug', | |||
| manifest = 'src/main/AndroidManifest.xml', | |||
| keystore = '//android/keystores:debug', | |||
| deps = [ | |||
| ':app-code', | |||
| ], | |||
| ) | |||
| @ -0,0 +1,88 @@ | |||
| apply plugin: "com.android.application" | |||
| import com.android.build.OutputFile | |||
| apply from: "../../node_modules/react-native/react.gradle" | |||
| android { | |||
| compileSdkVersion 28 | |||
| buildToolsVersion '28.0.3' | |||
| defaultConfig { | |||
| applicationId "com.detox.rn.example" | |||
| minSdkVersion 18 | |||
| targetSdkVersion 28 | |||
| versionCode 1 | |||
| versionName "1.0" | |||
| ndk { | |||
| abiFilters "armeabi-v7a", "x86" | |||
| } | |||
| testBuildType System.getProperty('testBuildType', 'debug') | |||
| testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner" | |||
| } | |||
| splits { | |||
| abi { | |||
| reset() | |||
| enable false | |||
| universalApk false // If true, also generate a universal APK | |||
| include "armeabi-v7a", "x86" | |||
| } | |||
| } | |||
| signingConfigs { | |||
| release { | |||
| storeFile file("keystore.jks") | |||
| storePassword "12345678" | |||
| keyAlias "key0" | |||
| keyPassword "12345678" | |||
| } | |||
| } | |||
| buildTypes { | |||
| release { | |||
| minifyEnabled true | |||
| proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro' | |||
| proguardFile "${rootProject.projectDir}/../node_modules/detox/android/detox/proguard-rules-app.pro" | |||
| signingConfig signingConfigs.release | |||
| } | |||
| } | |||
| // applicationVariants are e.g. debug, release | |||
| applicationVariants.all { variant -> | |||
| variant.outputs.each { output -> | |||
| // For each separate APK per architecture, set a unique version code as described here: | |||
| // http://tools.android.com/tech-docs/new-build-system/user-guide/apk-splits | |||
| def versionCodes = ["armeabi-v7a": 1, "x86": 2] | |||
| def abi = output.getFilter(OutputFile.ABI) | |||
| if (abi != null) { // null for the universal-debug, universal-release variants | |||
| output.versionCodeOverride = | |||
| versionCodes.get(abi) * 1048576 + defaultConfig.versionCode | |||
| } | |||
| } | |||
| } | |||
| packagingOptions { | |||
| exclude 'META-INF/DEPENDENCIES' | |||
| exclude 'META-INF/NOTICE' | |||
| exclude 'META-INF/LICENSE' | |||
| exclude 'META-INF/LICENSE.txt' | |||
| exclude 'META-INF/NOTICE.txt' | |||
| } | |||
| } | |||
| dependencies { | |||
| implementation project(':react-native-date-picker') | |||
| implementation 'com.android.support:appcompat-v7:28.0.0' | |||
| // noinspection GradleDynamicVersion | |||
| implementation 'com.facebook.react:react-native:+' | |||
| androidTestImplementation('com.wix:detox:+') { transitive = true } | |||
| androidTestImplementation 'junit:junit:4.12' | |||
| } | |||
| // Run this once to be able to run the application with BUCK | |||
| // puts all compile dependencies into folder libs for BUCK to use | |||
| task copyDownloadableDepsToLibs(type: Copy) { | |||
| from configurations.compile | |||
| into 'libs' | |||
| } | |||
| @ -0,0 +1,16 @@ | |||
| # | |||
| # Most needed rules come from React Native's proguard-rules.pro (either .aar or source) -- hence | |||
| # the lean configuration file. | |||
| ### | |||
| -dontobfuscate | |||
| -dontnote android.net.** | |||
| -dontnote org.apache.** | |||
| # An addition to RN's 'keep' and 'dontwarn' configs -- need to also 'dontnote' some stuff. | |||
| -dontnote com.facebook.** | |||
| -dontnote sun.misc.Unsafe | |||
| -dontnote okhttp3.** | |||
| -dontnote okio.** | |||
| @ -0,0 +1,24 @@ | |||
| package com.example; | |||
| import com.wix.detox.Detox; | |||
| import org.junit.Rule; | |||
| import org.junit.Test; | |||
| import org.junit.runner.RunWith; | |||
| import androidx.test.ext.junit.runners.AndroidJUnit4; | |||
| import androidx.test.filters.LargeTest; | |||
| import androidx.test.rule.ActivityTestRule; | |||
| @RunWith(AndroidJUnit4.class) | |||
| @LargeTest | |||
| public class DetoxTest { | |||
| @Rule | |||
| public ActivityTestRule<MainActivity> mActivityRule = new ActivityTestRule<>(MainActivity.class, false, false); | |||
| @Test | |||
| public void runDetoxTests() { | |||
| Detox.runTests(mActivityRule); | |||
| } | |||
| } | |||
| @ -0,0 +1,30 @@ | |||
| <manifest xmlns:android="http://schemas.android.com/apk/res/android" | |||
| package="com.example" | |||
| android:versionCode="1" | |||
| android:versionName="1.0" | |||
| > | |||
| <uses-permission android:name="android.permission.INTERNET" /> | |||
| <uses-permission android:name="android.permission.SYSTEM_ALERT_WINDOW"/> | |||
| <application | |||
| android:name=".MainApplication" | |||
| android:allowBackup="true" | |||
| android:label="@string/app_name" | |||
| android:icon="@mipmap/ic_launcher" | |||
| android:theme="@style/AppTheme" | |||
| android:usesCleartextTraffic="true" | |||
| > | |||
| <activity | |||
| android:name=".MainActivity" | |||
| android:label="@string/app_name" | |||
| android:configChanges="keyboard|keyboardHidden|orientation|screenSize"> | |||
| <intent-filter> | |||
| <action android:name="android.intent.action.MAIN" /> | |||
| <category android:name="android.intent.category.LAUNCHER" /> | |||
| </intent-filter> | |||
| </activity> | |||
| <activity android:name="com.facebook.react.devsupport.DevSettingsActivity" /> | |||
| </application> | |||
| </manifest> | |||
| @ -0,0 +1,15 @@ | |||
| package com.example; | |||
| import com.facebook.react.ReactActivity; | |||
| public class MainActivity extends ReactActivity { | |||
| /** | |||
| * Returns the name of the main component registered from JavaScript. | |||
| * This is used to schedule rendering of the component. | |||
| */ | |||
| @Override | |||
| protected String getMainComponentName() { | |||
| return "example"; | |||
| } | |||
| } | |||
| @ -0,0 +1,42 @@ | |||
| package com.example; | |||
| import android.app.Application; | |||
| import com.facebook.react.ReactApplication; | |||
| import com.henninghall.date_picker.DatePickerPackage; | |||
| import com.facebook.react.ReactNativeHost; | |||
| import com.facebook.react.ReactPackage; | |||
| import com.facebook.react.shell.MainReactPackage; | |||
| import com.facebook.soloader.SoLoader; | |||
| import java.util.Arrays; | |||
| import java.util.List; | |||
| public class MainApplication extends Application implements ReactApplication { | |||
| private final ReactNativeHost mReactNativeHost = new ReactNativeHost(this) { | |||
| @Override | |||
| public boolean getUseDeveloperSupport() { | |||
| return BuildConfig.DEBUG; | |||
| } | |||
| @Override | |||
| protected List<ReactPackage> getPackages() { | |||
| return Arrays.<ReactPackage>asList( | |||
| new MainReactPackage(), | |||
| new DatePickerPackage() | |||
| ); | |||
| } | |||
| }; | |||
| @Override | |||
| public ReactNativeHost getReactNativeHost() { | |||
| return mReactNativeHost; | |||
| } | |||
| @Override | |||
| public void onCreate() { | |||
| super.onCreate(); | |||
| SoLoader.init(this, /* native exopackage */ false); | |||
| } | |||
| } | |||
| @ -0,0 +1,3 @@ | |||
| <resources> | |||
| <string name="app_name">example</string> | |||
| </resources> | |||
| @ -0,0 +1,8 @@ | |||
| <resources> | |||
| <!-- Base application theme. --> | |||
| <style name="AppTheme" parent="Theme.AppCompat.Light.NoActionBar"> | |||
| <!-- Customize your theme here. --> | |||
| </style> | |||
| </resources> | |||
| @ -0,0 +1,27 @@ | |||
| buildscript { | |||
| ext.kotlinVersion = '1.3.0' | |||
| ext.detoxKotlinVersion = ext.kotlinVersion | |||
| repositories { | |||
| jcenter() | |||
| google() | |||
| } | |||
| dependencies { | |||
| classpath 'com.android.tools.build:gradle:3.3.2' | |||
| classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlinVersion" | |||
| } | |||
| } | |||
| allprojects { | |||
| repositories { | |||
| mavenLocal() | |||
| jcenter() | |||
| google() | |||
| maven { | |||
| url "$rootDir/../node_modules/react-native/android" | |||
| } | |||
| maven { | |||
| url "$rootDir/../node_modules/detox/Detox-android" | |||
| } | |||
| } | |||
| } | |||
| @ -0,0 +1,20 @@ | |||
| # Project-wide Gradle settings. | |||
| # IDE (e.g. Android Studio) users: | |||
| # Gradle settings configured through the IDE *will override* | |||
| # any settings specified in this file. | |||
| # For more details on how to configure your build environment visit | |||
| # http://www.gradle.org/docs/current/userguide/build_environment.html | |||
| # Specifies the JVM arguments used for the daemon process. | |||
| # The setting is particularly useful for tweaking memory settings. | |||
| # Default value: -Xmx10248m -XX:MaxPermSize=256m | |||
| org.gradle.jvmargs=-Xmx2048m -XX:MaxPermSize=512m -XX:+HeapDumpOnOutOfMemoryError -Dfile.encoding=UTF-8 | |||
| # When configured, Gradle will run in incubating parallel mode. | |||
| # This option should only be used with decoupled projects. More details, visit | |||
| # http://www.gradle.org/docs/current/userguide/multi_project_builds.html#sec:decoupled_projects | |||
| # org.gradle.parallel=true | |||
| android.useDeprecatedNdk=true | |||
| @ -0,0 +1,6 @@ | |||
| #Mon Jun 03 11:38:02 IDT 2019 | |||
| distributionBase=GRADLE_USER_HOME | |||
| distributionPath=wrapper/dists | |||
| zipStoreBase=GRADLE_USER_HOME | |||
| zipStorePath=wrapper/dists | |||
| distributionUrl=https\://services.gradle.org/distributions/gradle-4.10.2-all.zip | |||
| @ -0,0 +1,164 @@ | |||
| #!/usr/bin/env bash | |||
| ############################################################################## | |||
| ## | |||
| ## Gradle start up script for UN*X | |||
| ## | |||
| ############################################################################## | |||
| # Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script. | |||
| DEFAULT_JVM_OPTS="" | |||
| APP_NAME="Gradle" | |||
| APP_BASE_NAME=`basename "$0"` | |||
| # Use the maximum available, or set MAX_FD != -1 to use that value. | |||
| MAX_FD="maximum" | |||
| warn ( ) { | |||
| echo "$*" | |||
| } | |||
| die ( ) { | |||
| echo | |||
| echo "$*" | |||
| echo | |||
| exit 1 | |||
| } | |||
| # OS specific support (must be 'true' or 'false'). | |||
| cygwin=false | |||
| msys=false | |||
| darwin=false | |||
| case "`uname`" in | |||
| CYGWIN* ) | |||
| cygwin=true | |||
| ;; | |||
| Darwin* ) | |||
| darwin=true | |||
| ;; | |||
| MINGW* ) | |||
| msys=true | |||
| ;; | |||
| esac | |||
| # For Cygwin, ensure paths are in UNIX format before anything is touched. | |||
| if $cygwin ; then | |||
| [ -n "$JAVA_HOME" ] && JAVA_HOME=`cygpath --unix "$JAVA_HOME"` | |||
| fi | |||
| # Attempt to set APP_HOME | |||
| # Resolve links: $0 may be a link | |||
| PRG="$0" | |||
| # Need this for relative symlinks. | |||
| while [ -h "$PRG" ] ; do | |||
| ls=`ls -ld "$PRG"` | |||
| link=`expr "$ls" : '.*-> \(.*\)$'` | |||
| if expr "$link" : '/.*' > /dev/null; then | |||
| PRG="$link" | |||
| else | |||
| PRG=`dirname "$PRG"`"/$link" | |||
| fi | |||
| done | |||
| SAVED="`pwd`" | |||
| cd "`dirname \"$PRG\"`/" >&- | |||
| APP_HOME="`pwd -P`" | |||
| cd "$SAVED" >&- | |||
| CLASSPATH=$APP_HOME/gradle/wrapper/gradle-wrapper.jar | |||
| # Determine the Java command to use to start the JVM. | |||
| if [ -n "$JAVA_HOME" ] ; then | |||
| if [ -x "$JAVA_HOME/jre/sh/java" ] ; then | |||
| # IBM's JDK on AIX uses strange locations for the executables | |||
| JAVACMD="$JAVA_HOME/jre/sh/java" | |||
| else | |||
| JAVACMD="$JAVA_HOME/bin/java" | |||
| fi | |||
| if [ ! -x "$JAVACMD" ] ; then | |||
| die "ERROR: JAVA_HOME is set to an invalid directory: $JAVA_HOME | |||
| Please set the JAVA_HOME variable in your environment to match the | |||
| location of your Java installation." | |||
| fi | |||
| else | |||
| JAVACMD="java" | |||
| which java >/dev/null 2>&1 || die "ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH. | |||
| Please set the JAVA_HOME variable in your environment to match the | |||
| location of your Java installation." | |||
| fi | |||
| # Increase the maximum file descriptors if we can. | |||
| if [ "$cygwin" = "false" -a "$darwin" = "false" ] ; then | |||
| MAX_FD_LIMIT=`ulimit -H -n` | |||
| if [ $? -eq 0 ] ; then | |||
| if [ "$MAX_FD" = "maximum" -o "$MAX_FD" = "max" ] ; then | |||
| MAX_FD="$MAX_FD_LIMIT" | |||
| fi | |||
| ulimit -n $MAX_FD | |||
| if [ $? -ne 0 ] ; then | |||
| warn "Could not set maximum file descriptor limit: $MAX_FD" | |||
| fi | |||
| else | |||
| warn "Could not query maximum file descriptor limit: $MAX_FD_LIMIT" | |||
| fi | |||
| fi | |||
| # For Darwin, add options to specify how the application appears in the dock | |||
| if $darwin; then | |||
| GRADLE_OPTS="$GRADLE_OPTS \"-Xdock:name=$APP_NAME\" \"-Xdock:icon=$APP_HOME/media/gradle.icns\"" | |||
| fi | |||
| # For Cygwin, switch paths to Windows format before running java | |||
| if $cygwin ; then | |||
| APP_HOME=`cygpath --path --mixed "$APP_HOME"` | |||
| CLASSPATH=`cygpath --path --mixed "$CLASSPATH"` | |||
| # We build the pattern for arguments to be converted via cygpath | |||
| ROOTDIRSRAW=`find -L / -maxdepth 1 -mindepth 1 -type d 2>/dev/null` | |||
| SEP="" | |||
| for dir in $ROOTDIRSRAW ; do | |||
| ROOTDIRS="$ROOTDIRS$SEP$dir" | |||
| SEP="|" | |||
| done | |||
| OURCYGPATTERN="(^($ROOTDIRS))" | |||
| # Add a user-defined pattern to the cygpath arguments | |||
| if [ "$GRADLE_CYGPATTERN" != "" ] ; then | |||
| OURCYGPATTERN="$OURCYGPATTERN|($GRADLE_CYGPATTERN)" | |||
| fi | |||
| # Now convert the arguments - kludge to limit ourselves to /bin/sh | |||
| i=0 | |||
| for arg in "$@" ; do | |||
| CHECK=`echo "$arg"|egrep -c "$OURCYGPATTERN" -` | |||
| CHECK2=`echo "$arg"|egrep -c "^-"` ### Determine if an option | |||
| if [ $CHECK -ne 0 ] && [ $CHECK2 -eq 0 ] ; then ### Added a condition | |||
| eval `echo args$i`=`cygpath --path --ignore --mixed "$arg"` | |||
| else | |||
| eval `echo args$i`="\"$arg\"" | |||
| fi | |||
| i=$((i+1)) | |||
| done | |||
| case $i in | |||
| (0) set -- ;; | |||
| (1) set -- "$args0" ;; | |||
| (2) set -- "$args0" "$args1" ;; | |||
| (3) set -- "$args0" "$args1" "$args2" ;; | |||
| (4) set -- "$args0" "$args1" "$args2" "$args3" ;; | |||
| (5) set -- "$args0" "$args1" "$args2" "$args3" "$args4" ;; | |||
| (6) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" ;; | |||
| (7) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" ;; | |||
| (8) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" "$args7" ;; | |||
| (9) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" "$args7" "$args8" ;; | |||
| esac | |||
| fi | |||
| # Split up the JVM_OPTS And GRADLE_OPTS values into an array, following the shell quoting and substitution rules | |||
| function splitJvmOpts() { | |||
| JVM_OPTS=("$@") | |||
| } | |||
| eval splitJvmOpts $DEFAULT_JVM_OPTS $JAVA_OPTS $GRADLE_OPTS | |||
| JVM_OPTS[${#JVM_OPTS[*]}]="-Dorg.gradle.appname=$APP_BASE_NAME" | |||
| exec "$JAVACMD" "${JVM_OPTS[@]}" -classpath "$CLASSPATH" org.gradle.wrapper.GradleWrapperMain "$@" | |||
| @ -0,0 +1,90 @@ | |||
| @if "%DEBUG%" == "" @echo off | |||
| @rem ########################################################################## | |||
| @rem | |||
| @rem Gradle startup script for Windows | |||
| @rem | |||
| @rem ########################################################################## | |||
| @rem Set local scope for the variables with windows NT shell | |||
| if "%OS%"=="Windows_NT" setlocal | |||
| @rem Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script. | |||
| set DEFAULT_JVM_OPTS= | |||
| set DIRNAME=%~dp0 | |||
| if "%DIRNAME%" == "" set DIRNAME=. | |||
| set APP_BASE_NAME=%~n0 | |||
| set APP_HOME=%DIRNAME% | |||
| @rem Find java.exe | |||
| if defined JAVA_HOME goto findJavaFromJavaHome | |||
| set JAVA_EXE=java.exe | |||
| %JAVA_EXE% -version >NUL 2>&1 | |||
| if "%ERRORLEVEL%" == "0" goto init | |||
| echo. | |||
| echo ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH. | |||
| echo. | |||
| echo Please set the JAVA_HOME variable in your environment to match the | |||
| echo location of your Java installation. | |||
| goto fail | |||
| :findJavaFromJavaHome | |||
| set JAVA_HOME=%JAVA_HOME:"=% | |||
| set JAVA_EXE=%JAVA_HOME%/bin/java.exe | |||
| if exist "%JAVA_EXE%" goto init | |||
| echo. | |||
| echo ERROR: JAVA_HOME is set to an invalid directory: %JAVA_HOME% | |||
| echo. | |||
| echo Please set the JAVA_HOME variable in your environment to match the | |||
| echo location of your Java installation. | |||
| goto fail | |||
| :init | |||
| @rem Get command-line arguments, handling Windowz variants | |||
| if not "%OS%" == "Windows_NT" goto win9xME_args | |||
| if "%@eval[2+2]" == "4" goto 4NT_args | |||
| :win9xME_args | |||
| @rem Slurp the command line arguments. | |||
| set CMD_LINE_ARGS= | |||
| set _SKIP=2 | |||
| :win9xME_args_slurp | |||
| if "x%~1" == "x" goto execute | |||
| set CMD_LINE_ARGS=%* | |||
| goto execute | |||
| :4NT_args | |||
| @rem Get arguments from the 4NT Shell from JP Software | |||
| set CMD_LINE_ARGS=%$ | |||
| :execute | |||
| @rem Setup the command line | |||
| set CLASSPATH=%APP_HOME%\gradle\wrapper\gradle-wrapper.jar | |||
| @rem Execute Gradle | |||
| "%JAVA_EXE%" %DEFAULT_JVM_OPTS% %JAVA_OPTS% %GRADLE_OPTS% "-Dorg.gradle.appname=%APP_BASE_NAME%" -classpath "%CLASSPATH%" org.gradle.wrapper.GradleWrapperMain %CMD_LINE_ARGS% | |||
| :end | |||
| @rem End local scope for the variables with windows NT shell | |||
| if "%ERRORLEVEL%"=="0" goto mainEnd | |||
| :fail | |||
| rem Set variable GRADLE_EXIT_CONSOLE if you need the _script_ return code instead of | |||
| rem the _cmd.exe /c_ return code! | |||
| if not "" == "%GRADLE_EXIT_CONSOLE%" exit 1 | |||
| exit /b 1 | |||
| :mainEnd | |||
| if "%OS%"=="Windows_NT" endlocal | |||
| :omega | |||
| @ -0,0 +1,8 @@ | |||
| keystore( | |||
| name = 'debug', | |||
| store = 'debug.keystore', | |||
| properties = 'debug.keystore.properties', | |||
| visibility = [ | |||
| 'PUBLIC', | |||
| ], | |||
| ) | |||
| @ -0,0 +1,4 @@ | |||
| key.store=debug.keystore | |||
| key.alias=androiddebugkey | |||
| key.store.password=android | |||
| key.alias.password=android | |||
| @ -0,0 +1,5 @@ | |||
| rootProject.name = 'DetoxRNExample' | |||
| include ':react-native-date-picker' | |||
| project(':react-native-date-picker').projectDir = new File(rootProject.projectDir, '../node_modules/react-native-date-picker/android') | |||
| include ':app' | |||
| @ -0,0 +1,55 @@ | |||
| /** | |||
| * Sample React Native App | |||
| * https://github.com/facebook/react-native | |||
| * @flow | |||
| */ | |||
| import React, { Component } from 'react'; | |||
| import { | |||
| AppRegistry, | |||
| StyleSheet, | |||
| Text, | |||
| View, | |||
| TouchableOpacity | |||
| } from 'react-native'; | |||
| class example extends Component { | |||
| constructor(props) { | |||
| super(props); | |||
| this.state = { | |||
| greeting: undefined | |||
| }; | |||
| } | |||
| render() { | |||
| if (this.state.greeting) return this.renderAfterButton(); | |||
| return ( | |||
| <View testID='welcome' style={{flex: 1, paddingTop: 20, justifyContent: 'center', alignItems: 'center'}}> | |||
| <Text style={{fontSize: 25, marginBottom: 30}}> | |||
| Welcome | |||
| </Text> | |||
| <TouchableOpacity testID='hello_button' onPress={this.onButtonPress.bind(this, 'Hello')}> | |||
| <Text style={{color: 'blue', marginBottom: 20}}>Say Hello</Text> | |||
| </TouchableOpacity> | |||
| <TouchableOpacity testID='world_button' onPress={this.onButtonPress.bind(this, 'World')}> | |||
| <Text style={{color: 'blue', marginBottom: 20}}>Say World</Text> | |||
| </TouchableOpacity> | |||
| </View> | |||
| ); | |||
| } | |||
| renderAfterButton() { | |||
| return ( | |||
| <View style={{flex: 1, paddingTop: 20, justifyContent: 'center', alignItems: 'center'}}> | |||
| <Text style={{fontSize: 25}}> | |||
| {this.state.greeting}!!! | |||
| </Text> | |||
| </View> | |||
| ); | |||
| } | |||
| onButtonPress(greeting) { | |||
| this.setState({ | |||
| greeting: greeting | |||
| }); | |||
| } | |||
| } | |||
| AppRegistry.registerComponent('example', () => example); | |||
| @ -0,0 +1,19 @@ | |||
| describe('Example', () => { | |||
| beforeEach(async () => { | |||
| await device.reloadReactNative(); | |||
| }); | |||
| it('should have welcome screen', async () => { | |||
| await expect(element(by.id('welcome'))).toBeVisible(); | |||
| }); | |||
| it('should show hello screen after tap', async () => { | |||
| await element(by.id('hello_button')).tap(); | |||
| await expect(element(by.text('Hello!!!'))).toBeVisible(); | |||
| }); | |||
| it('should show world screen after tap', async () => { | |||
| await element(by.id('world_button')).tap(); | |||
| await expect(element(by.text('World!!!'))).toBeVisible(); | |||
| }); | |||
| }); | |||
| @ -0,0 +1,19 @@ | |||
| const detox = require('detox'); | |||
| const config = require('../package.json').detox; | |||
| const adapter = require('detox/runners/mocha/adapter'); | |||
| before(async () => { | |||
| await detox.init(config); | |||
| }); | |||
| beforeEach(async function () { | |||
| await adapter.beforeEach(this); | |||
| }); | |||
| afterEach(async function () { | |||
| await adapter.afterEach(this); | |||
| }); | |||
| after(async () => { | |||
| await detox.cleanup(); | |||
| }); | |||
| @ -0,0 +1,4 @@ | |||
| --recursive | |||
| --timeout 300000 | |||
| --bail | |||
| --file e2e/init.js | |||
| @ -0,0 +1,26 @@ | |||
| const {device, expect, element, by, waitFor} = require('detox'); | |||
| describe('Example', () => { | |||
| beforeEach(async () => { | |||
| await device.reloadReactNative(); | |||
| }); | |||
| it('should have welcome screen', async () => { | |||
| await expect(element(by.id('welcome'))).toBeVisible(); | |||
| }); | |||
| it('should show hello screen after tap', async () => { | |||
| await element(by.id('hello_button')).tap(); | |||
| await expect(element(by.text('Hello!!!'))).toBeVisible(); | |||
| }); | |||
| it('should show world screen after tap', async () => { | |||
| await element(by.id('world_button')).tap(); | |||
| await expect(element(by.text('World!!!'))).toBeVisible(); | |||
| }); | |||
| it('waitFor should be exported', async () => { | |||
| await waitFor(element(by.id('welcome'))).toExist().withTimeout(2000); | |||
| await expect(element(by.id('welcome'))).toExist(); | |||
| }); | |||
| }); | |||
| @ -0,0 +1,14 @@ | |||
| const detox = require('detox'); | |||
| const config = require('../package.json').detox; | |||
| /* | |||
| Example showing how to use Detox with required objects rather than globally exported. | |||
| e.g `const {device, expect, element, by, waitFor} = require('detox');` | |||
| */ | |||
| before(async () => { | |||
| await detox.init(config, {initGlobals: false}); | |||
| }); | |||
| after(async () => { | |||
| await detox.cleanup(); | |||
| }); | |||
| @ -0,0 +1,3 @@ | |||
| --recursive | |||
| --timeout 300000 | |||
| --bail | |||
| @ -0,0 +1 @@ | |||
| require('./app'); | |||
| @ -0,0 +1 @@ | |||
| require('./app'); | |||
| @ -0,0 +1,129 @@ | |||
| <?xml version="1.0" encoding="UTF-8"?> | |||
| <Scheme | |||
| LastUpgradeVersion = "0820" | |||
| version = "1.3"> | |||
| <BuildAction | |||
| parallelizeBuildables = "NO" | |||
| buildImplicitDependencies = "YES"> | |||
| <BuildActionEntries> | |||
| <BuildActionEntry | |||
| buildForTesting = "YES" | |||
| buildForRunning = "YES" | |||
| buildForProfiling = "YES" | |||
| buildForArchiving = "YES" | |||
| buildForAnalyzing = "YES"> | |||
| <BuildableReference | |||
| BuildableIdentifier = "primary" | |||
| BlueprintIdentifier = "83CBBA2D1A601D0E00E9B192" | |||
| BuildableName = "libReact.a" | |||
| BlueprintName = "React" | |||
| ReferencedContainer = "container:../node_modules/react-native/React/React.xcodeproj"> | |||
| </BuildableReference> | |||
| </BuildActionEntry> | |||
| <BuildActionEntry | |||
| buildForTesting = "YES" | |||
| buildForRunning = "YES" | |||
| buildForProfiling = "YES" | |||
| buildForArchiving = "YES" | |||
| buildForAnalyzing = "YES"> | |||
| <BuildableReference | |||
| BuildableIdentifier = "primary" | |||
| BlueprintIdentifier = "13B07F861A680F5B00A75B9A" | |||
| BuildableName = "example.app" | |||
| BlueprintName = "example" | |||
| ReferencedContainer = "container:example.xcodeproj"> | |||
| </BuildableReference> | |||
| </BuildActionEntry> | |||
| <BuildActionEntry | |||
| buildForTesting = "YES" | |||
| buildForRunning = "YES" | |||
| buildForProfiling = "NO" | |||
| buildForArchiving = "NO" | |||
| buildForAnalyzing = "YES"> | |||
| <BuildableReference | |||
| BuildableIdentifier = "primary" | |||
| BlueprintIdentifier = "00E356ED1AD99517003FC87E" | |||
| BuildableName = "exampleTests.xctest" | |||
| BlueprintName = "exampleTests" | |||
| ReferencedContainer = "container:example.xcodeproj"> | |||
| </BuildableReference> | |||
| </BuildActionEntry> | |||
| </BuildActionEntries> | |||
| </BuildAction> | |||
| <TestAction | |||
| buildConfiguration = "Debug" | |||
| selectedDebuggerIdentifier = "Xcode.DebuggerFoundation.Debugger.LLDB" | |||
| selectedLauncherIdentifier = "Xcode.DebuggerFoundation.Launcher.LLDB" | |||
| shouldUseLaunchSchemeArgsEnv = "YES"> | |||
| <Testables> | |||
| <TestableReference | |||
| skipped = "NO"> | |||
| <BuildableReference | |||
| BuildableIdentifier = "primary" | |||
| BlueprintIdentifier = "00E356ED1AD99517003FC87E" | |||
| BuildableName = "exampleTests.xctest" | |||
| BlueprintName = "exampleTests" | |||
| ReferencedContainer = "container:example.xcodeproj"> | |||
| </BuildableReference> | |||
| </TestableReference> | |||
| </Testables> | |||
| <MacroExpansion> | |||
| <BuildableReference | |||
| BuildableIdentifier = "primary" | |||
| BlueprintIdentifier = "13B07F861A680F5B00A75B9A" | |||
| BuildableName = "example.app" | |||
| BlueprintName = "example" | |||
| ReferencedContainer = "container:example.xcodeproj"> | |||
| </BuildableReference> | |||
| </MacroExpansion> | |||
| <AdditionalOptions> | |||
| </AdditionalOptions> | |||
| </TestAction> | |||
| <LaunchAction | |||
| buildConfiguration = "Release" | |||
| selectedDebuggerIdentifier = "" | |||
| selectedLauncherIdentifier = "Xcode.IDEFoundation.Launcher.PosixSpawn" | |||
| launchStyle = "0" | |||
| useCustomWorkingDirectory = "NO" | |||
| ignoresPersistentStateOnLaunch = "NO" | |||
| debugDocumentVersioning = "YES" | |||
| debugServiceExtension = "internal" | |||
| allowLocationSimulation = "YES"> | |||
| <BuildableProductRunnable | |||
| runnableDebuggingMode = "0"> | |||
| <BuildableReference | |||
| BuildableIdentifier = "primary" | |||
| BlueprintIdentifier = "13B07F861A680F5B00A75B9A" | |||
| BuildableName = "example.app" | |||
| BlueprintName = "example" | |||
| ReferencedContainer = "container:example.xcodeproj"> | |||
| </BuildableReference> | |||
| </BuildableProductRunnable> | |||
| <AdditionalOptions> | |||
| </AdditionalOptions> | |||
| </LaunchAction> | |||
| <ProfileAction | |||
| buildConfiguration = "Release" | |||
| shouldUseLaunchSchemeArgsEnv = "YES" | |||
| savedToolIdentifier = "" | |||
| useCustomWorkingDirectory = "NO" | |||
| debugDocumentVersioning = "YES"> | |||
| <BuildableProductRunnable | |||
| runnableDebuggingMode = "0"> | |||
| <BuildableReference | |||
| BuildableIdentifier = "primary" | |||
| BlueprintIdentifier = "13B07F861A680F5B00A75B9A" | |||
| BuildableName = "example.app" | |||
| BlueprintName = "example" | |||
| ReferencedContainer = "container:example.xcodeproj"> | |||
| </BuildableReference> | |||
| </BuildableProductRunnable> | |||
| </ProfileAction> | |||
| <AnalyzeAction | |||
| buildConfiguration = "Debug"> | |||
| </AnalyzeAction> | |||
| <ArchiveAction | |||
| buildConfiguration = "Release" | |||
| revealArchiveInOrganizer = "YES"> | |||
| </ArchiveAction> | |||
| </Scheme> | |||
| @ -0,0 +1,105 @@ | |||
| <?xml version="1.0" encoding="UTF-8"?> | |||
| <Scheme | |||
| LastUpgradeVersion = "0820" | |||
| version = "1.3"> | |||
| <BuildAction | |||
| parallelizeBuildables = "NO" | |||
| buildImplicitDependencies = "YES"> | |||
| <BuildActionEntries> | |||
| <BuildActionEntry | |||
| buildForTesting = "YES" | |||
| buildForRunning = "YES" | |||
| buildForProfiling = "YES" | |||
| buildForArchiving = "YES" | |||
| buildForAnalyzing = "YES"> | |||
| <BuildableReference | |||
| BuildableIdentifier = "primary" | |||
| BlueprintIdentifier = "83CBBA2D1A601D0E00E9B192" | |||
| BuildableName = "libReact.a" | |||
| BlueprintName = "React" | |||
| ReferencedContainer = "container:../node_modules/react-native/React/React.xcodeproj"> | |||
| </BuildableReference> | |||
| </BuildActionEntry> | |||
| <BuildActionEntry | |||
| buildForTesting = "YES" | |||
| buildForRunning = "YES" | |||
| buildForProfiling = "YES" | |||
| buildForArchiving = "YES" | |||
| buildForAnalyzing = "YES"> | |||
| <BuildableReference | |||
| BuildableIdentifier = "primary" | |||
| BlueprintIdentifier = "13B07F861A680F5B00A75B9A" | |||
| BuildableName = "example.app" | |||
| BlueprintName = "example" | |||
| ReferencedContainer = "container:example.xcodeproj"> | |||
| </BuildableReference> | |||
| </BuildActionEntry> | |||
| </BuildActionEntries> | |||
| </BuildAction> | |||
| <TestAction | |||
| buildConfiguration = "Debug" | |||
| selectedDebuggerIdentifier = "Xcode.DebuggerFoundation.Debugger.LLDB" | |||
| selectedLauncherIdentifier = "Xcode.DebuggerFoundation.Launcher.LLDB" | |||
| shouldUseLaunchSchemeArgsEnv = "YES"> | |||
| <Testables> | |||
| </Testables> | |||
| <MacroExpansion> | |||
| <BuildableReference | |||
| BuildableIdentifier = "primary" | |||
| BlueprintIdentifier = "13B07F861A680F5B00A75B9A" | |||
| BuildableName = "example.app" | |||
| BlueprintName = "example" | |||
| ReferencedContainer = "container:example.xcodeproj"> | |||
| </BuildableReference> | |||
| </MacroExpansion> | |||
| <AdditionalOptions> | |||
| </AdditionalOptions> | |||
| </TestAction> | |||
| <LaunchAction | |||
| buildConfiguration = "Debug" | |||
| selectedDebuggerIdentifier = "Xcode.DebuggerFoundation.Debugger.LLDB" | |||
| selectedLauncherIdentifier = "Xcode.DebuggerFoundation.Launcher.LLDB" | |||
| launchStyle = "0" | |||
| useCustomWorkingDirectory = "NO" | |||
| ignoresPersistentStateOnLaunch = "NO" | |||
| debugDocumentVersioning = "YES" | |||
| debugServiceExtension = "internal" | |||
| allowLocationSimulation = "YES"> | |||
| <BuildableProductRunnable | |||
| runnableDebuggingMode = "0"> | |||
| <BuildableReference | |||
| BuildableIdentifier = "primary" | |||
| BlueprintIdentifier = "13B07F861A680F5B00A75B9A" | |||
| BuildableName = "example.app" | |||
| BlueprintName = "example" | |||
| ReferencedContainer = "container:example.xcodeproj"> | |||
| </BuildableReference> | |||
| </BuildableProductRunnable> | |||
| <AdditionalOptions> | |||
| </AdditionalOptions> | |||
| </LaunchAction> | |||
| <ProfileAction | |||
| buildConfiguration = "Release" | |||
| shouldUseLaunchSchemeArgsEnv = "YES" | |||
| savedToolIdentifier = "" | |||
| useCustomWorkingDirectory = "NO" | |||
| debugDocumentVersioning = "YES"> | |||
| <BuildableProductRunnable | |||
| runnableDebuggingMode = "0"> | |||
| <BuildableReference | |||
| BuildableIdentifier = "primary" | |||
| BlueprintIdentifier = "13B07F861A680F5B00A75B9A" | |||
| BuildableName = "example.app" | |||
| BlueprintName = "example" | |||
| ReferencedContainer = "container:example.xcodeproj"> | |||
| </BuildableReference> | |||
| </BuildableProductRunnable> | |||
| </ProfileAction> | |||
| <AnalyzeAction | |||
| buildConfiguration = "Debug"> | |||
| </AnalyzeAction> | |||
| <ArchiveAction | |||
| buildConfiguration = "Release" | |||
| revealArchiveInOrganizer = "YES"> | |||
| </ArchiveAction> | |||
| </Scheme> | |||
| @ -0,0 +1,16 @@ | |||
| /** | |||
| * 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. | |||
| */ | |||
| #import <UIKit/UIKit.h> | |||
| @interface AppDelegate : UIResponder <UIApplicationDelegate> | |||
| @property (nonatomic, strong) UIWindow *window; | |||
| @end | |||
| @ -0,0 +1,37 @@ | |||
| /** | |||
| * 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. | |||
| */ | |||
| #import "AppDelegate.h" | |||
| #import <React/RCTRootView.h> | |||
| #import <React/RCTBundleURLProvider.h> | |||
| @implementation AppDelegate | |||
| - (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions | |||
| { | |||
| NSURL *jsCodeLocation; | |||
| jsCodeLocation = [[RCTBundleURLProvider sharedSettings] jsBundleURLForBundleRoot:@"index" fallbackResource:nil]; | |||
| RCTRootView *rootView = [[RCTRootView alloc] initWithBundleURL:jsCodeLocation | |||
| moduleName:@"example" | |||
| initialProperties:nil | |||
| launchOptions:launchOptions]; | |||
| rootView.backgroundColor = [[UIColor alloc] initWithRed:1.0f green:1.0f blue:1.0f alpha:1]; | |||
| self.window = [[UIWindow alloc] initWithFrame:[UIScreen mainScreen].bounds]; | |||
| UIViewController *rootViewController = [UIViewController new]; | |||
| rootViewController.view = rootView; | |||
| self.window.rootViewController = rootViewController; | |||
| [self.window makeKeyAndVisible]; | |||
| return YES; | |||
| } | |||
| @end | |||
| @ -0,0 +1,42 @@ | |||
| <?xml version="1.0" encoding="UTF-8" standalone="no"?> | |||
| <document type="com.apple.InterfaceBuilder3.CocoaTouch.XIB" version="3.0" toolsVersion="7702" systemVersion="14D136" targetRuntime="iOS.CocoaTouch" propertyAccessControl="none" useAutolayout="YES" launchScreen="YES" useTraitCollections="YES"> | |||
| <dependencies> | |||
| <deployment identifier="iOS"/> | |||
| <plugIn identifier="com.apple.InterfaceBuilder.IBCocoaTouchPlugin" version="7701"/> | |||
| <capability name="Constraints with non-1.0 multipliers" minToolsVersion="5.1"/> | |||
| </dependencies> | |||
| <objects> | |||
| <placeholder placeholderIdentifier="IBFilesOwner" id="-1" userLabel="File's Owner"/> | |||
| <placeholder placeholderIdentifier="IBFirstResponder" id="-2" customClass="UIResponder"/> | |||
| <view contentMode="scaleToFill" id="iN0-l3-epB"> | |||
| <rect key="frame" x="0.0" y="0.0" width="480" height="480"/> | |||
| <autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/> | |||
| <subviews> | |||
| <label opaque="NO" clipsSubviews="YES" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="Powered by React Native" textAlignment="center" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" minimumFontSize="9" translatesAutoresizingMaskIntoConstraints="NO" id="8ie-xW-0ye"> | |||
| <rect key="frame" x="20" y="439" width="441" height="21"/> | |||
| <fontDescription key="fontDescription" type="system" pointSize="17"/> | |||
| <color key="textColor" cocoaTouchSystemColor="darkTextColor"/> | |||
| <nil key="highlightedColor"/> | |||
| </label> | |||
| <label opaque="NO" clipsSubviews="YES" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="example" textAlignment="center" lineBreakMode="middleTruncation" baselineAdjustment="alignBaselines" minimumFontSize="18" translatesAutoresizingMaskIntoConstraints="NO" id="kId-c2-rCX"> | |||
| <rect key="frame" x="20" y="140" width="441" height="43"/> | |||
| <fontDescription key="fontDescription" type="boldSystem" pointSize="36"/> | |||
| <color key="textColor" cocoaTouchSystemColor="darkTextColor"/> | |||
| <nil key="highlightedColor"/> | |||
| </label> | |||
| </subviews> | |||
| <color key="backgroundColor" white="1" alpha="1" colorSpace="custom" customColorSpace="calibratedWhite"/> | |||
| <constraints> | |||
| <constraint firstItem="kId-c2-rCX" firstAttribute="centerY" secondItem="iN0-l3-epB" secondAttribute="bottom" multiplier="1/3" constant="1" id="5cJ-9S-tgC"/> | |||
| <constraint firstAttribute="centerX" secondItem="kId-c2-rCX" secondAttribute="centerX" id="Koa-jz-hwk"/> | |||
| <constraint firstAttribute="bottom" secondItem="8ie-xW-0ye" secondAttribute="bottom" constant="20" id="Kzo-t9-V3l"/> | |||
| <constraint firstItem="8ie-xW-0ye" firstAttribute="leading" secondItem="iN0-l3-epB" secondAttribute="leading" constant="20" symbolic="YES" id="MfP-vx-nX0"/> | |||
| <constraint firstAttribute="centerX" secondItem="8ie-xW-0ye" secondAttribute="centerX" id="ZEH-qu-HZ9"/> | |||
| <constraint firstItem="kId-c2-rCX" firstAttribute="leading" secondItem="iN0-l3-epB" secondAttribute="leading" constant="20" symbolic="YES" id="fvb-Df-36g"/> | |||
| </constraints> | |||
| <nil key="simulatedStatusBarMetrics"/> | |||
| <freeformSimulatedSizeMetrics key="simulatedDestinationMetrics"/> | |||
| <point key="canvasLocation" x="548" y="455"/> | |||
| </view> | |||
| </objects> | |||
| </document> | |||
| @ -0,0 +1,48 @@ | |||
| { | |||
| "images" : [ | |||
| { | |||
| "idiom" : "iphone", | |||
| "size" : "20x20", | |||
| "scale" : "2x" | |||
| }, | |||
| { | |||
| "idiom" : "iphone", | |||
| "size" : "20x20", | |||
| "scale" : "3x" | |||
| }, | |||
| { | |||
| "idiom" : "iphone", | |||
| "size" : "29x29", | |||
| "scale" : "2x" | |||
| }, | |||
| { | |||
| "idiom" : "iphone", | |||
| "size" : "29x29", | |||
| "scale" : "3x" | |||
| }, | |||
| { | |||
| "idiom" : "iphone", | |||
| "size" : "40x40", | |||
| "scale" : "2x" | |||
| }, | |||
| { | |||
| "idiom" : "iphone", | |||
| "size" : "40x40", | |||
| "scale" : "3x" | |||
| }, | |||
| { | |||
| "idiom" : "iphone", | |||
| "size" : "60x60", | |||
| "scale" : "2x" | |||
| }, | |||
| { | |||
| "idiom" : "iphone", | |||
| "size" : "60x60", | |||
| "scale" : "3x" | |||
| } | |||
| ], | |||
| "info" : { | |||
| "version" : 1, | |||
| "author" : "xcode" | |||
| } | |||
| } | |||
| @ -0,0 +1,47 @@ | |||
| <?xml version="1.0" encoding="UTF-8"?> | |||
| <!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd"> | |||
| <plist version="1.0"> | |||
| <dict> | |||
| <key>CFBundleDevelopmentRegion</key> | |||
| <string>en</string> | |||
| <key>CFBundleExecutable</key> | |||
| <string>$(EXECUTABLE_NAME)</string> | |||
| <key>CFBundleIdentifier</key> | |||
| <string>$(PRODUCT_BUNDLE_IDENTIFIER)</string> | |||
| <key>CFBundleInfoDictionaryVersion</key> | |||
| <string>6.0</string> | |||
| <key>CFBundleName</key> | |||
| <string>$(PRODUCT_NAME)</string> | |||
| <key>CFBundlePackageType</key> | |||
| <string>APPL</string> | |||
| <key>CFBundleShortVersionString</key> | |||
| <string>1.0</string> | |||
| <key>CFBundleSignature</key> | |||
| <string>????</string> | |||
| <key>CFBundleVersion</key> | |||
| <string>1</string> | |||
| <key>LSRequiresIPhoneOS</key> | |||
| <true/> | |||
| <key>NSAppTransportSecurity</key> | |||
| <dict> | |||
| <key>NSAllowsArbitraryLoads</key> | |||
| <true/> | |||
| </dict> | |||
| <key>NSLocationWhenInUseUsageDescription</key> | |||
| <string></string> | |||
| <key>UILaunchStoryboardName</key> | |||
| <string>LaunchScreen</string> | |||
| <key>UIRequiredDeviceCapabilities</key> | |||
| <array> | |||
| <string>armv7</string> | |||
| </array> | |||
| <key>UISupportedInterfaceOrientations</key> | |||
| <array> | |||
| <string>UIInterfaceOrientationPortrait</string> | |||
| <string>UIInterfaceOrientationLandscapeLeft</string> | |||
| <string>UIInterfaceOrientationLandscapeRight</string> | |||
| </array> | |||
| <key>UIViewControllerBasedStatusBarAppearance</key> | |||
| <false/> | |||
| </dict> | |||
| </plist> | |||
| @ -0,0 +1,18 @@ | |||
| /** | |||
| * 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. | |||
| */ | |||
| #import <UIKit/UIKit.h> | |||
| #import "AppDelegate.h" | |||
| int main(int argc, char * argv[]) { | |||
| @autoreleasepool { | |||
| return UIApplicationMain(argc, argv, nil, NSStringFromClass([AppDelegate class])); | |||
| } | |||
| } | |||
| @ -0,0 +1,24 @@ | |||
| <?xml version="1.0" encoding="UTF-8"?> | |||
| <!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd"> | |||
| <plist version="1.0"> | |||
| <dict> | |||
| <key>CFBundleDevelopmentRegion</key> | |||
| <string>en</string> | |||
| <key>CFBundleExecutable</key> | |||
| <string>$(EXECUTABLE_NAME)</string> | |||
| <key>CFBundleIdentifier</key> | |||
| <string>$(PRODUCT_BUNDLE_IDENTIFIER)</string> | |||
| <key>CFBundleInfoDictionaryVersion</key> | |||
| <string>6.0</string> | |||
| <key>CFBundleName</key> | |||
| <string>$(PRODUCT_NAME)</string> | |||
| <key>CFBundlePackageType</key> | |||
| <string>BNDL</string> | |||
| <key>CFBundleShortVersionString</key> | |||
| <string>1.0</string> | |||
| <key>CFBundleSignature</key> | |||
| <string>????</string> | |||
| <key>CFBundleVersion</key> | |||
| <string>1</string> | |||
| </dict> | |||
| </plist> | |||
| @ -0,0 +1,70 @@ | |||
| /** | |||
| * 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. | |||
| */ | |||
| #import <UIKit/UIKit.h> | |||
| #import <XCTest/XCTest.h> | |||
| #import <React/RCTLog.h> | |||
| #import <React/RCTRootView.h> | |||
| #define TIMEOUT_SECONDS 600 | |||
| #define TEXT_TO_LOOK_FOR @"Welcome to React Native!" | |||
| @interface exampleTests : XCTestCase | |||
| @end | |||
| @implementation exampleTests | |||
| - (BOOL)findSubviewInView:(UIView *)view matching:(BOOL(^)(UIView *view))test | |||
| { | |||
| if (test(view)) { | |||
| return YES; | |||
| } | |||
| for (UIView *subview in [view subviews]) { | |||
| if ([self findSubviewInView:subview matching:test]) { | |||
| return YES; | |||
| } | |||
| } | |||
| return NO; | |||
| } | |||
| - (void)testRendersWelcomeScreen | |||
| { | |||
| UIViewController *vc = [[[[UIApplication sharedApplication] delegate] window] rootViewController]; | |||
| NSDate *date = [NSDate dateWithTimeIntervalSinceNow:TIMEOUT_SECONDS]; | |||
| BOOL foundElement = NO; | |||
| __block NSString *redboxError = nil; | |||
| RCTSetLogFunction(^(RCTLogLevel level, RCTLogSource source, NSString *fileName, NSNumber *lineNumber, NSString *message) { | |||
| if (level >= RCTLogLevelError) { | |||
| redboxError = message; | |||
| } | |||
| }); | |||
| while ([date timeIntervalSinceNow] > 0 && !foundElement && !redboxError) { | |||
| [[NSRunLoop mainRunLoop] runMode:NSDefaultRunLoopMode beforeDate:[NSDate dateWithTimeIntervalSinceNow:0.1]]; | |||
| [[NSRunLoop mainRunLoop] runMode:NSRunLoopCommonModes beforeDate:[NSDate dateWithTimeIntervalSinceNow:0.1]]; | |||
| foundElement = [self findSubviewInView:vc.view matching:^BOOL(UIView *view) { | |||
| if ([view.accessibilityLabel isEqualToString:TEXT_TO_LOOK_FOR]) { | |||
| return YES; | |||
| } | |||
| return NO; | |||
| }]; | |||
| } | |||
| RCTSetLogFunction(RCTDefaultLogFunction); | |||
| XCTAssertNil(redboxError, @"RedBox error: %@", redboxError); | |||
| XCTAssertTrue(foundElement, @"Couldn't find element with text '%@' in %d seconds", TEXT_TO_LOOK_FOR, TIMEOUT_SECONDS); | |||
| } | |||
| @end | |||
| @ -0,0 +1,67 @@ | |||
| { | |||
| "name": "example", | |||
| "version": "14.0.1", | |||
| "private": true, | |||
| "scripts": { | |||
| "start": "react-native start", | |||
| "build:ios": "detox build --configuration ios.sim.debug", | |||
| "build:android-debug": "detox build --configuration android.emu.debug", | |||
| "build:android-release": "detox build --configuration android.emu.release", | |||
| "test:ios": "detox test --configuration ios.sim.debug", | |||
| "test:android-debug": "detox test --configuration android.emu.debug -l verbose", | |||
| "test:android-release": "detox test --configuration android.emu.release -l verbose", | |||
| "test:android-explicit-require": "detox test e2eExplicitRequire -c android.emu.release -l verbose --runner-config e2eExplicitRequire/mocha.opts", | |||
| "e2e:ios": "npm run build:ios && npm run test:ios", | |||
| "e2e:android-debug": "npm run build:android-debug && npm run test:android-debug", | |||
| "e2e:android-release": "npm run build:android-release && npm run test:android-release" | |||
| }, | |||
| "dependencies": { | |||
| "react": "16.8.3", | |||
| "react-native": "0.59.9", | |||
| "react-native-date-picker": "^2.6.1" | |||
| }, | |||
| "devDependencies": { | |||
| "detox": "^14.0.1", | |||
| "mocha": "^6.1.3" | |||
| }, | |||
| "detox": { | |||
| "test-runner": "mocha", | |||
| "runner-config": "e2e/mocha.opts", | |||
| "configurations": { | |||
| "ios.sim.release": { | |||
| "binaryPath": "ios/build/Build/Products/Release-iphonesimulator/example.app", | |||
| "build": "export RCT_NO_LAUNCH_PACKAGER=true && xcodebuild -project ios/example.xcodeproj -UseNewBuildSystem=NO -scheme example -configuration Release -sdk iphonesimulator -derivedDataPath ios/build -quiet", | |||
| "type": "ios.simulator", | |||
| "name": "iPhone X" | |||
| }, | |||
| "ios.sim.debug": { | |||
| "binaryPath": "ios/build/Build/Products/Debug-iphonesimulator/example.app", | |||
| "build": "xcodebuild -project ios/example.xcodeproj -UseNewBuildSystem=NO -scheme example -configuration Debug -sdk iphonesimulator -derivedDataPath ios/build", | |||
| "type": "ios.simulator", | |||
| "name": "iPhone X" | |||
| }, | |||
| "ios.none": { | |||
| "binaryPath": "ios/build/Build/Products/Debug-iphonesimulator/example.app", | |||
| "build": "xcodebuild -project ios/example.xcodeproj -UseNewBuildSystem=NO -scheme example -configuration Debug -sdk iphonesimulator -derivedDataPath ios/build", | |||
| "type": "ios.none", | |||
| "name": "iPhone X", | |||
| "session": { | |||
| "server": "ws://localhost:8099", | |||
| "sessionId": "com.wix.demo.react.native" | |||
| } | |||
| }, | |||
| "android.emu.debug": { | |||
| "binaryPath": "android/app/build/outputs/apk/debug/app-debug.apk", | |||
| "build": "cd android ; ./gradlew assembleDebug assembleAndroidTest -DtestBuildType=debug ; cd -", | |||
| "type": "android.emulator", | |||
| "name": "Nexus_4_API_28" | |||
| }, | |||
| "android.emu.release": { | |||
| "binaryPath": "android/app/build/outputs/apk/release/app-release.apk", | |||
| "build": "cd android ; ./gradlew assembleRelease assembleAndroidTest -DtestBuildType=release ; cd -", | |||
| "type": "android.emulator", | |||
| "name": "Nexus_4_API_28" | |||
| } | |||
| } | |||
| } | |||
| } | |||
| @ -0,0 +1,12 @@ | |||
| let metroBundler; | |||
| try { | |||
| metroBundler = require('metro'); | |||
| } catch (ex) { | |||
| metroBundler = require('metro-bundler'); | |||
| } | |||
| module.exports = { | |||
| getBlacklistRE: function() { | |||
| return metroBundler.createBlacklist([/test\/.*/, /detox\/node_modules\/.*/]); | |||
| } | |||
| }; | |||