From f3513a03ddb5d6153500fa45267e2860bc560fc0 Mon Sep 17 00:00:00 2001 From: dtopuzov Date: Mon, 21 Aug 2017 15:51:52 +0300 Subject: [PATCH 1/8] Make tests passing with https://github.com/NativeScript/nativescript-cli/pull/3070 MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - Make tests passing with https://github.com/NativeScript/nativescript-cli/pull/3070 - Enable —provision tests for Xcode9 --- core/tns/tns.py | 20 ++++++++++++-------- tests/build/ios/build_ios_provision_tests.py | 5 ----- tests/build/ios/build_ios_tests.py | 14 +++++++------- 3 files changed, 19 insertions(+), 20 deletions(-) diff --git a/core/tns/tns.py b/core/tns/tns.py index dd10e6bf..186df50b 100644 --- a/core/tns/tns.py +++ b/core/tns/tns.py @@ -377,24 +377,26 @@ def build_android(attributes={}, assert_success=True, tns_path=None): return output @staticmethod - def build_ios(attributes={}, assert_success=True, tns_path=None): + def build_ios(attributes={}, assert_success=True, tns_path=None, log_trace=False): if "--provision" not in attributes.keys(): attr = {"--teamId": DEVELOPMENT_TEAM} attributes.update(attr) - output = Tns.run_tns_command("build ios", attributes=attributes, tns_path=tns_path) + output = Tns.run_tns_command("build ios", attributes=attributes, tns_path=tns_path, log_trace=log_trace) app_name = Tns.__get_app_name_from_attributes(attributes=attributes) app_name = app_name.replace("\"", "") # Handle projects with space app_id = Tns.__get_final_package_name(app_name, platform=Platform.IOS) if assert_success: - assert "BUILD SUCCEEDED" in output assert "Project successfully built" in output assert "ERROR" not in output assert "malformed" not in output - assert "CodeSign" in output + + if log_trace: + assert "BUILD SUCCEEDED" in output + assert "CodeSign" in output # Verify release/debug builds if "--release" in attributes.keys(): @@ -410,9 +412,10 @@ def build_ios(attributes={}, assert_success=True, tns_path=None): device_folder = app_name + "/platforms/ios/build/device/" emu_folder = app_name + "/platforms/ios/build/emulator/" if "--forDevice" in attributes.keys() or "--for-device" in attributes.keys(): - assert "build/device/" + app_id + ".app" in output - assert "ARCHIVE SUCCEEDED" in output - assert "EXPORT SUCCEEDED" in output + if log_trace: + assert "build/device/" + app_id + ".app" in output + assert "ARCHIVE SUCCEEDED" in output + assert "EXPORT SUCCEEDED" in output assert File.exists(device_folder + app_id + ".ipa"), "IPA file not found!" bundle_content = File.read(device_folder + app_id + ".app/" + app_id) xcode_project = Tns.__get_xcode_project_file(app_name) @@ -422,7 +425,8 @@ def build_ios(attributes={}, assert_success=True, tns_path=None): assert DEVELOPMENT_TEAM in xcode_project or DISTRIBUTION_PROVISIONING in xcode_project, \ "TeamID not passed to Xcode!" else: - assert "build/emulator/" + app_id + ".app" in output + if log_trace: + assert "build/emulator/" + app_id + ".app" in output assert File.exists(app_name + "/platforms/ios/" + app_id + "/" + app_id + "-Prefix.pch") assert File.exists(emu_folder + app_id + ".app") bundle_content = File.read(emu_folder + app_id + ".app/" + app_id) diff --git a/tests/build/ios/build_ios_provision_tests.py b/tests/build/ios/build_ios_provision_tests.py index e148d0c1..4066ddaf 100644 --- a/tests/build/ios/build_ios_provision_tests.py +++ b/tests/build/ios/build_ios_provision_tests.py @@ -2,7 +2,6 @@ Test for --provision options """ import os -import unittest from core.base_class.BaseClass import BaseClass from core.device.simulator import Simulator @@ -47,14 +46,10 @@ def test_200_build_ios_list_provisions(self): assert DISTRIBUTION_PROVISIONING in output assert DEVELOPMENT_TEAM in output - @unittest.skipIf("9." in Xcode.get_version(), - "Skip on Xcode 9 because of https://github.com/NativeScript/nativescript-cli/issues/3046") def test_201_build_ios_with_provision(self): build_attributes = {"--path": self.app_name, "--forDevice": "", "--release": "", "--provision": PROVISIONING} Tns.build_ios(attributes=build_attributes) - @unittest.skipIf("9." in Xcode.get_version(), - "Skip on Xcode 9 because of https://github.com/NativeScript/nativescript-cli/issues/3046") def test_202_build_ios_with_distribution_provision(self): build_attributes = {"--path": self.app_name, "--forDevice": "", "--release": "", "--provision": DISTRIBUTION_PROVISIONING} diff --git a/tests/build/ios/build_ios_tests.py b/tests/build/ios/build_ios_tests.py index 12dbb738..490c1fdd 100644 --- a/tests/build/ios/build_ios_tests.py +++ b/tests/build/ios/build_ios_tests.py @@ -59,17 +59,17 @@ def tearDownClass(cls): def test_001_build_ios(self): Tns.create_app(self.app_name) Tns.platform_add_ios(attributes={"--path": self.app_name, "--frameworkPath": IOS_RUNTIME_PATH}) - Tns.build_ios(attributes={"--path": self.app_name}) + Tns.build_ios(attributes={"--path": self.app_name}, log_trace=True) Folder.cleanup(os.path.join(self.app_name, 'platforms', 'ios')) - Tns.build_ios(attributes={"--path": self.app_name, "--release": ""}) + Tns.build_ios(attributes={"--path": self.app_name, "--release": ""}, log_trace=True) Folder.cleanup(os.path.join(self.app_name, 'platforms', 'ios')) - Tns.build_ios(attributes={"--path": self.app_name, "--forDevice": ""}) + Tns.build_ios(attributes={"--path": self.app_name, "--forDevice": ""}, log_trace=True) Folder.cleanup(os.path.join(self.app_name, 'platforms', 'ios')) Tns.platform_add_android(attributes={"--path": self.app_name, "--frameworkPath": ANDROID_RUNTIME_PATH}) - Tns.build_ios(attributes={"--path": self.app_name, "--forDevice": "", "--release": ""}) + Tns.build_ios(attributes={"--path": self.app_name, "--forDevice": "", "--release": ""}, log_trace=True) # Verify no aar and frameworks in platforms folder assert not File.pattern_exists(self.app_name + "/platforms/ios", "*.aar") @@ -82,17 +82,17 @@ def test_001_build_ios(self): assert "armv7" in output assert "arm64" in output - def test_211_build_ios_inside_project(self): + def test_200_build_ios_inside_project(self): Tns.create_app(self.app_name) Tns.platform_add_ios(attributes={"--path": self.app_name, "--frameworkPath": IOS_RUNTIME_PATH}) Folder.navigate_to(self.app_name) output = Tns.build_ios(tns_path=os.path.join("..", TNS_PATH), attributes={"--path": self.app_name}, - assert_success=False) + assert_success=False, log_trace=True) Folder.navigate_to(TEST_RUN_HOME, relative_from_current_folder=False) assert "build/emulator/TestApp.app" in output assert File.exists(self.app_name + "/platforms/ios/build/emulator/TestApp.app") - def test_213_build_ios_platform_not_added_or_platforms_deleted(self): + def test_210_build_ios_platform_not_added_or_platforms_deleted(self): Tns.create_app(self.app_name_noplatform) Tns.build_ios(attributes={"--path": self.app_name_noplatform}) From 546ca4abf515a4eec61e1367d1063e89a677a628 Mon Sep 17 00:00:00 2001 From: dtopuzov Date: Mon, 21 Aug 2017 16:25:47 +0300 Subject: [PATCH 2/8] Fix RunIOSSimulatorTests.test_370_tns_run_plugin_add --- tests/simulator/run_ios_tests.py | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/tests/simulator/run_ios_tests.py b/tests/simulator/run_ios_tests.py index 9581fe7e..56a9afcb 100644 --- a/tests/simulator/run_ios_tests.py +++ b/tests/simulator/run_ios_tests.py @@ -320,7 +320,8 @@ def test_370_tns_run_plugin_add(self): `tns run ios` should do full rebuild after plugin is added. """ # `tns run ios` and wait until app is deployed - log = Tns.run_ios(attributes={'--path': self.app_name, '--emulator': ''}, wait=False, assert_success=False) + log = Tns.run_ios(attributes={'--path': self.app_name, '--emulator': ''}, wait=False, assert_success=False, + log_trace=True) strings = ['Project successfully built', 'Successfully installed on device with identifier', self.SIMULATOR_ID] Tns.wait_for_log(log_file=log, string_list=strings, timeout=150, check_interval=10) From 8c963c35cecfe376bc717e57f6e81afef17ce51f Mon Sep 17 00:00:00 2001 From: dtopuzov Date: Mon, 21 Aug 2017 17:01:29 +0300 Subject: [PATCH 3/8] Fix android tests --- core/tns/tns.py | 18 +++++++++++++++--- tests/build/android/build_android_tests.py | 8 ++++---- tests/device/run_ios_device_tests.py | 2 +- 3 files changed, 20 insertions(+), 8 deletions(-) diff --git a/core/tns/tns.py b/core/tns/tns.py index 186df50b..55dac5bf 100644 --- a/core/tns/tns.py +++ b/core/tns/tns.py @@ -348,13 +348,16 @@ def prepare_ios(attributes={}, assert_success=True, log_trace=False, tns_path=No return output @staticmethod - def build_android(attributes={}, assert_success=True, tns_path=None): - output = Tns.run_tns_command("build android", attributes=attributes, tns_path=tns_path) + def build_android(attributes={}, assert_success=True, tns_path=None, log_trace=False): + output = Tns.run_tns_command("build android", attributes=attributes, tns_path=tns_path, log_trace=log_trace) if assert_success: # Verify output of build command - assert "BUILD SUCCESSFUL" in output, "Build failed!" + os.linesep + output assert "Project successfully built" in output, "Build failed!" + os.linesep + output assert "NOT FOUND" not in output # Test for https://github.com/NativeScript/android-runtime/issues/390 + if log_trace: + assert "BUILD SUCCESSFUL" in output, "Build failed!" + os.linesep + output + else: + assert "BUILD SUCCESSFUL" not in output, "Native build out is displayed even without --log trace" # Verify apk packages app_name = Tns.__get_app_name_from_attributes(attributes=attributes) @@ -397,6 +400,9 @@ def build_ios(attributes={}, assert_success=True, tns_path=None, log_trace=False if log_trace: assert "BUILD SUCCEEDED" in output assert "CodeSign" in output + else: + assert "BUILD SUCCEEDED" not in output, "Native build out is displayed even without --log trace" + assert "CodeSign" not in output, "Native build out is displayed even without --log trace" # Verify release/debug builds if "--release" in attributes.keys(): @@ -416,6 +422,9 @@ def build_ios(attributes={}, assert_success=True, tns_path=None, log_trace=False assert "build/device/" + app_id + ".app" in output assert "ARCHIVE SUCCEEDED" in output assert "EXPORT SUCCEEDED" in output + else: + assert "ARCHIVE SUCCEEDED" not in output, "Native build out is displayed even without --log trace" + assert "EXPORT SUCCEEDED" not in output, "Native build out is displayed even without --log trace" assert File.exists(device_folder + app_id + ".ipa"), "IPA file not found!" bundle_content = File.read(device_folder + app_id + ".app/" + app_id) xcode_project = Tns.__get_xcode_project_file(app_name) @@ -427,6 +436,9 @@ def build_ios(attributes={}, assert_success=True, tns_path=None, log_trace=False else: if log_trace: assert "build/emulator/" + app_id + ".app" in output + else: + assert "build/emulator/" + app_id + ".app" not in output, \ + "Native build out is displayed even without --log trace" assert File.exists(app_name + "/platforms/ios/" + app_id + "/" + app_id + "-Prefix.pch") assert File.exists(emu_folder + app_id + ".app") bundle_content = File.read(emu_folder + app_id + ".app/" + app_id) diff --git a/tests/build/android/build_android_tests.py b/tests/build/android/build_android_tests.py index a47a26e1..f894ef61 100644 --- a/tests/build/android/build_android_tests.py +++ b/tests/build/android/build_android_tests.py @@ -105,7 +105,7 @@ def test_002_build_android_release(self): "--keyStoreAlias": ANDROID_KEYSTORE_ALIAS, "--keyStoreAliasPassword": ANDROID_KEYSTORE_ALIAS_PASS, "--release": "" - }) + }, log_trace=True) # Configs are respected assert 'release' in File.read(os.path.join(self.app_name, TnsAsserts.PLATFORM_ANDROID_APP_PATH, 'config.json')) @@ -113,7 +113,7 @@ def test_002_build_android_release(self): def test_200_build_android_inside_project_folder(self): Folder.navigate_to(self.app_name) output = Tns.build_android(tns_path=os.path.join("..", TNS_PATH), attributes={"--path": self.app_name}, - assert_success=False) + assert_success=False, log_trace=True) Folder.navigate_to(TEST_RUN_HOME, relative_from_current_folder=False) assert successfully_prepared in output assert build_successful in output @@ -311,8 +311,8 @@ def test_390_build_project_with_foursquare_android_oauth(self): Tns.platform_add_android(attributes={"--path": self.app_name, "--frameworkPath": ANDROID_RUNTIME_PATH}) # Add foursquare native library as dependency - source = os.path.join('data','issues','android-runtime-755','app.gradle') - target = os.path.join(self.app_name, 'app','App_Resources','Android','app.gradle') + source = os.path.join('data', 'issues', 'android-runtime-755', 'app.gradle') + target = os.path.join(self.app_name, 'app', 'App_Resources', 'Android', 'app.gradle') File.copy(src=source, dest=target) # Build the project diff --git a/tests/device/run_ios_device_tests.py b/tests/device/run_ios_device_tests.py index 83cdddec..320acaf3 100644 --- a/tests/device/run_ios_device_tests.py +++ b/tests/device/run_ios_device_tests.py @@ -232,7 +232,7 @@ def test_330_tns_run_ios_after_rebuild_of_native_project(self): # `tns run ios` and wait until app is deployed log = Tns.run_ios(attributes={'--path': self.app_name, '--device': self.DEVICE_ID}, wait=False, - assert_success=False) + assert_success=False, log_trace=True) strings = [self.DEVICE_ID, 'Successfully synced application'] Tns.wait_for_log(log_file=log, string_list=strings, timeout=120, check_interval=10) From ee03417f65ddd02e9e55b9cc9e08da4660c324f3 Mon Sep 17 00:00:00 2001 From: dtopuzov Date: Mon, 21 Aug 2017 17:21:15 +0300 Subject: [PATCH 4/8] Fix android ng tests --- core/tns/angular_helper.py | 15 ----------- core/tns/tns.py | 4 +++ tests/build/android/build_android_ng_tests.py | 25 ++++++------------- tests/build/android/build_android_tests.py | 2 +- 4 files changed, 12 insertions(+), 34 deletions(-) delete mode 100644 core/tns/angular_helper.py diff --git a/core/tns/angular_helper.py b/core/tns/angular_helper.py deleted file mode 100644 index d6125f16..00000000 --- a/core/tns/angular_helper.py +++ /dev/null @@ -1,15 +0,0 @@ -from core.osutils.file import File -from core.osutils.folder import Folder - -def assert_angular_project(app_name): - output = File.read(app_name + "/package.json") - assert "nativescript-angular" in output - assert "tns-core-modules" in output - assert "nativescript-dev-typescript" in output - - assert Folder.exists(app_name + "/node_modules/nativescript-angular") - assert Folder.exists(app_name + "/node_modules/nativescript-dev-typescript") - assert Folder.exists(app_name + "/node_modules/tns-core-modules") - - assert Folder.exists(app_name + "/hooks") - assert Folder.exists(app_name + "/app/App_Resources") diff --git a/core/tns/tns.py b/core/tns/tns.py index 55dac5bf..cf3c9551 100644 --- a/core/tns/tns.py +++ b/core/tns/tns.py @@ -221,6 +221,10 @@ def create_app_ng(app_name, attributes={}, log_trace=False, assert_success=True, if Npm.version() < 5: assert "nativescript-angular" in output assert File.exists(os.path.join(app_name, 'node_modules', 'nativescript-theme-core')) + package_json = File.read(os.path.join(app_name, 'package.json')) + assert "tns-core-modules" in package_json + assert "nativescript-angular" in package_json + assert "nativescript-dev-typescript" in package_json return output diff --git a/tests/build/android/build_android_ng_tests.py b/tests/build/android/build_android_ng_tests.py index c0b964e6..a39b4571 100644 --- a/tests/build/android/build_android_ng_tests.py +++ b/tests/build/android/build_android_ng_tests.py @@ -1,13 +1,10 @@ import os from core.base_class.BaseClass import BaseClass -from core.osutils.file import File from core.osutils.folder import Folder from core.settings.settings import ANDROID_RUNTIME_PATH, \ ANDROID_KEYSTORE_PASS, ANDROID_KEYSTORE_ALIAS, ANDROID_KEYSTORE_PATH, ANDROID_KEYSTORE_ALIAS_PASS from core.tns.tns import Tns -from core.tns import angular_helper as angular -from core.settings.strings import * class BuildAndroidNGTests(BaseClass): @@ -25,21 +22,13 @@ def tearDownClass(cls): Folder.cleanup(cls.app_name) def test_001_build_android_ng_project(self): - angular.assert_angular_project(self.app_name) Tns.build_android(attributes={"--path": self.app_name}) - assert File.exists(os.path.join(self.app_name, debug_apk_path)) def test_200_build_android_ng_project_release(self): - print ANDROID_KEYSTORE_PATH - output = Tns.build_android(attributes={"--keyStorePath": ANDROID_KEYSTORE_PATH, - "--keyStorePassword": ANDROID_KEYSTORE_PASS, - "--keyStoreAlias": ANDROID_KEYSTORE_ALIAS, - "--keyStoreAliasPassword": ANDROID_KEYSTORE_ALIAS_PASS, - "--release": "", - "--path": self.app_name - }) - assert successfully_prepared in output - assert build_successful in output - - assert successfully_built in output - assert File.exists(os.path.join(self.app_name, release_apk_path)) + Tns.build_android(attributes={"--keyStorePath": ANDROID_KEYSTORE_PATH, + "--keyStorePassword": ANDROID_KEYSTORE_PASS, + "--keyStoreAlias": ANDROID_KEYSTORE_ALIAS, + "--keyStoreAliasPassword": ANDROID_KEYSTORE_ALIAS_PASS, + "--release": "", + "--path": self.app_name + }) diff --git a/tests/build/android/build_android_tests.py b/tests/build/android/build_android_tests.py index f894ef61..f93bc6bb 100644 --- a/tests/build/android/build_android_tests.py +++ b/tests/build/android/build_android_tests.py @@ -130,7 +130,7 @@ def test_201_build_android_with_additional_prepare(self): def test_202_build_android_with_log_trace_and_platform_not_added_or_empty(self): """'tns build android' with log trace options should output more logs.""" Tns.create_app(self.app_no_platform) - output = Tns.build_android(attributes={"--path": self.app_no_platform, "--log trace": ""}) + output = Tns.build_android(attributes={"--path": self.app_no_platform}, log_trace=True) # Assert log trace show gradle logs assert "[DEBUG]" in output From 79d5fe64d3e76b2b2407a512628a3e640afa4f63 Mon Sep 17 00:00:00 2001 From: dtopuzov Date: Tue, 22 Aug 2017 08:55:48 +0300 Subject: [PATCH 5/8] Fix test_310_build_ios_with_copy_to(self): --- core/tns/tns.py | 1 + tests/build/android/plugin_android_tests.py | 9 +-------- tests/build/android/prepare_android_tests.py | 9 --------- tests/build/ios/build_ios_tests.py | 5 +++-- 4 files changed, 5 insertions(+), 19 deletions(-) diff --git a/core/tns/tns.py b/core/tns/tns.py index cf3c9551..2f64e9a9 100644 --- a/core/tns/tns.py +++ b/core/tns/tns.py @@ -357,6 +357,7 @@ def build_android(attributes={}, assert_success=True, tns_path=None, log_trace=F if assert_success: # Verify output of build command assert "Project successfully built" in output, "Build failed!" + os.linesep + output + assert "FAILURE" not in output assert "NOT FOUND" not in output # Test for https://github.com/NativeScript/android-runtime/issues/390 if log_trace: assert "BUILD SUCCESSFUL" in output, "Build failed!" + os.linesep + output diff --git a/tests/build/android/plugin_android_tests.py b/tests/build/android/plugin_android_tests.py index 7f523214..a0af6d7c 100644 --- a/tests/build/android/plugin_android_tests.py +++ b/tests/build/android/plugin_android_tests.py @@ -113,14 +113,7 @@ def test_200_build_app_with_plugin_added_inside_project(self): os.chdir(current_dir) assert "Successfully installed plugin tns-plugin" in output - output = Tns.build_android(attributes={"--path": self.app_name}) - assert successfully_prepared in output - - assert build_successful in output - assert successfully_built in output - assert error not in output.lower() - assert "FAILURE" not in output - + Tns.build_android(attributes={"--path": self.app_name}, log_trace=True) assert File.exists(self.app_name + "/platforms/android/build/outputs/apk/TestApp-debug.apk") assert File.exists(self.app_name + "/platforms/android/src/main/assets/app/tns_modules/tns-plugin/index.js") diff --git a/tests/build/android/prepare_android_tests.py b/tests/build/android/prepare_android_tests.py index f94c07cf..228e8861 100644 --- a/tests/build/android/prepare_android_tests.py +++ b/tests/build/android/prepare_android_tests.py @@ -129,15 +129,6 @@ def test_310_prepare_should_flatten_scoped_dependencies(self): ng_path = os.path.join(self.app_name, TnsAsserts.PLATFORM_ANDROID_NPM_MODULES_PATH, '@angular', 'core') assert File.exists(ng_path), "Scoped dependencies are flattened, please see #1783!" - @unittest.skip("TODO: Fix the test") - def test_320_unmet_peer_dependencies_do_not_stop_prepare(self): - Tns.create_app_ng(self.app_name, update_modules=True) - # Cleanup node_modules and let CLI install npm dependencies - Folder.cleanup(os.path.join(TEST_RUN_HOME, self.app_name, 'node_modules')) - output = Tns.prepare_android(attributes={"--path": self.app_name}) - assert "requires a peer of tns-core-modules" in output, "No npm warning for unmet peer dependencies." - assert "but none was installed" in output, "No npm warning for unmet peer dependencies." - def test_400_prepare_missing_or_missing_platform(self): Tns.create_app(self.app_name, update_modules=False) diff --git a/tests/build/ios/build_ios_tests.py b/tests/build/ios/build_ios_tests.py index 490c1fdd..e4725d8f 100644 --- a/tests/build/ios/build_ios_tests.py +++ b/tests/build/ios/build_ios_tests.py @@ -124,10 +124,11 @@ def test_310_build_ios_with_copy_to(self): Tns.create_app(self.app_name) Tns.platform_add_ios(attributes={"--path": self.app_name, "--frameworkPath": IOS_RUNTIME_PATH}) - Tns.build_ios(attributes={"--path": self.app_name, "--copy-to": "./"}) + Tns.build_ios(attributes={"--path": self.app_name, "--copy-to": "./"}, log_trace=True) assert File.exists("TestApp.app") - Tns.build_ios(attributes={"--path": self.app_name, "--forDevice": "", "--release": "", "--copy-to": "./"}) + Tns.build_ios(attributes={"--path": self.app_name, "--forDevice": "", "--release": "", "--copy-to": "./"}, + log_trace=True) assert File.exists("TestApp.ipa") def test_320_build_ios_with_custom_entitlements(self): From ecbc0ae83031871a24fcbc8ae8744fbf35570dcf Mon Sep 17 00:00:00 2001 From: dtopuzov Date: Tue, 22 Aug 2017 17:44:32 +0300 Subject: [PATCH 6/8] Update images --- .../t-ng-live-template-live-n.png | Bin 8430 -> 0 bytes .../t-ng-live-template-next-n.png | Bin 8215 -> 0 bytes .../iPhone7N/t-ng-live-template-live-n.png | Bin 29215 -> 0 bytes 3 files changed, 0 insertions(+), 0 deletions(-) delete mode 100644 data/images/Emulator-Api19-Default/t-ng-live-template-live-n.png delete mode 100644 data/images/Emulator-Api19-Default/t-ng-live-template-next-n.png delete mode 100644 data/images/iPhone7N/t-ng-live-template-live-n.png diff --git a/data/images/Emulator-Api19-Default/t-ng-live-template-live-n.png b/data/images/Emulator-Api19-Default/t-ng-live-template-live-n.png deleted file mode 100644 index bb0051943e6c3e8bd7e0d3cd36ed6a73d81af917..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 8430 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 E0e26kN&o-= diff --git a/data/images/Emulator-Api19-Default/t-ng-live-template-next-n.png b/data/images/Emulator-Api19-Default/t-ng-live-template-next-n.png deleted file mode 100644 index 0afaa09f1460b19780e076e301a43eaf7be5acf4..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 8215 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 L-*3vlK6&BqA0!w{ diff --git a/data/images/iPhone7N/t-ng-live-template-live-n.png b/data/images/iPhone7N/t-ng-live-template-live-n.png deleted file mode 100644 index 5b6900eb0159a449a3fb272053746be0f41025b8..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 29215 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 Xi)@Mz&%poqXmDWP;l1SDCola!0%im~ From ee9124273ffe17db7ef728111864d7e6594425c6 Mon Sep 17 00:00:00 2001 From: dtopuzov Date: Tue, 22 Aug 2017 17:44:58 +0300 Subject: [PATCH 7/8] Update templates images --- .../t-ng-live-template-live-n.png | Bin 0 -> 8798 bytes .../iPhone7N/t-ng-live-template-live-n.png | Bin 0 -> 29952 bytes 2 files changed, 0 insertions(+), 0 deletions(-) create mode 100644 data/images/Emulator-Api19-Default/t-ng-live-template-live-n.png create mode 100644 data/images/iPhone7N/t-ng-live-template-live-n.png diff --git a/data/images/Emulator-Api19-Default/t-ng-live-template-live-n.png b/data/images/Emulator-Api19-Default/t-ng-live-template-live-n.png new file mode 100644 index 0000000000000000000000000000000000000000..0815dc7febc4ea0d79be4252d9b21d43ef9c0acb GIT binary patch literal 8798 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%0A2MFW*0ALNhF z!_$m{f&$zRHOQkOARIgwOz?A6%4s!DQR3+t$TiaS^qMgGA|bw1Y)prqE#h>1 zb;==MA>A&Qg`}^4wzR6AUDN9m2k+q0<}aZQUuuA8VFdQ#yBgg4YVgXs1OH@m|MY?( zSx<7>UUzCxUTnea@>B(f4ZDs}v2rR1-Nwb&g|H4>HFOv;H(%!JlL<{ioa0nP0o}Lr5Re&2S@u{hf)P<(pcWD?{UOWXGq7wHC zW6;bzmvptjl#&TrSq*|t#(|xpo>FdLrlIPiL#A244+Tz{R8d(SIgzVK2j;l39KAA| zLKG1}W1i?KaZkOr#r7LG555c^qaya4DQO0u8(qBu_MHc-1h7l(;CLc{#R{C`w`{kG z@CW(sK7nmx;^q~89FB+f)tjM<_gBBHs;WA;A@87Hql<}OrE{(Ac!r-DS-Aw-COSKS zZ7V8)J^02i_BMk6#%RE?GY%TT&w%K{E?~Mx@;3U9*muAGGy(Fbi|xddoCH}v#>3$i zQd*2veG6X-tk+z=X~J%phC!@DVwFSTIdD^T`9DLqH*Z3}p3Y7uX(J^-V z{xAEgjaJS?r{jRT^9sp5aPCM}c6J5eZd{t~p-a9elJzp5L|yHbok)NM1aJfuA)d9Ln&tS&H4<_hUl3h_3(MYFP}L#Sg)wtKm}v$#zh%K2X$K#-XYDX#!BCi(`1R zi|>9Xi9@h$0B%``Sm0C%;34_@29hqP@|9AKE44k#5;W4>56m|DjZl8`JsS{cQbW=8 z00|*>wmnY9o#irllRGWC@OdGMzU!8^uu3oO`^G#dYq=)8 z;S*0rvU<|fr3AQq=74^sNvTdAmAJAMw(nac#m=Ctx@ZQ`IUbMGyv(k2B^k~v&5otM zaA|}c1C>SiVHw8mOzDxarWDr{1A8jVd~#@Rp1_UzkbD-*K+a(4Gr<1_f#HpKWf5c@ zt2FL|#E7ZTIvjn|#PIN1D7TojItP5<@-(q78!*}+k(U66-mz17&m81$fa2kHn647$ z!SjP+x3aM7OE8DR)2UG$JIk^-Ts2?bwm-y95gR|wq0x{MmN}gKx?RyVo(iY()9vvK zlYf^DwRHsKE+I?GZUg2wYrA=%e}8!Zh6*MP;-1nY7||v{{B)JczJ2@P0SKJL5!||H zra8{2-=`)n0OU7h?%{;N@FoEpDRJtu4G$q|DwoDmtjPuz7k=!A5ukXz`y)TM{l(@+BM3NQM)2=BfYy6H`TMJDT0(Hp-&6Hs`S+Mn%W@%F z9XsZ@$u>^Wr3EHJB;}Z)E7flP?NKo*tOB@uI2jT~Z)__7#fV*a@1{FyxBT%j;r(eh z!9Yma&?wo~5AJtoFnJpCO86|kwTz+?!8{B?Lco4tJC*OTs?!TQEuFF~c7v%!3rHh< zFUM;@qJ>8s0D5eAm;?^X!r;5|LRdx;CjTumhzaI{y1mDUM45Cr^7U4S(1mw@`~fy4 z6rU`7i0lSYX$STQWv;~p9>u+JSPe;Huxn$0ub1~QY9FXoJT(aXD-tzXtf5iQWRC)xBw20t;ud&vbCav8tQy$Q^1AF~f1nk4XFl$J$p&lhnu-v$OW1CMi zFwc|#pdS;wItrYk6Rc`s2Dicu+~4nAJ=N22*fvBLdKZIT^CcwPCTYW*g`SmxiRFK9 zN&l&9gFWlNydcX8IHIcMub>e|($@dALHr*r^)K(`(*=JAjZby>RENL682VI)Pj&du zUle}A!zVm^!o&Z~4LL*FlMu9OJ^a4_pA65xc8LGK-N+TS7CYiW#>2*BJ_LR+$6by+ JJ>q-y-vMWSYOMeO literal 0 HcmV?d00001 diff --git a/data/images/iPhone7N/t-ng-live-template-live-n.png b/data/images/iPhone7N/t-ng-live-template-live-n.png new file mode 100644 index 0000000000000000000000000000000000000000..aaebdab3812dac83b8375a34b33a3de7a7767053 GIT binary patch literal 29952 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 T`v4GAT1O6f94y;^?%IC=!6Cn= literal 0 HcmV?d00001 From 2986ae6cbd2e77bbd5aaa35c359731b824695e51 Mon Sep 17 00:00:00 2001 From: dtopuzov Date: Wed, 23 Aug 2017 16:50:59 +0300 Subject: [PATCH 8/8] Add test for https://github.com/NativeScript/nativescript-cli/pull/3080 --- tests/build/android/prepare_android_tests.py | 27 ++++++++++++++++++++ tests/emulator/run_android_tests.py | 2 +- 2 files changed, 28 insertions(+), 1 deletion(-) diff --git a/tests/build/android/prepare_android_tests.py b/tests/build/android/prepare_android_tests.py index 228e8861..6c4d7a47 100644 --- a/tests/build/android/prepare_android_tests.py +++ b/tests/build/android/prepare_android_tests.py @@ -6,7 +6,9 @@ import unittest from core.base_class.BaseClass import BaseClass +from core.git.git import Git from core.npm.npm import Npm +from core.osutils.command import run from core.osutils.file import File from core.osutils.folder import Folder from core.osutils.os_type import OSType @@ -21,6 +23,7 @@ class PrepareAndroidTests(BaseClass): def setUp(self): BaseClass.setUp(self) + Folder.navigate_to(folder=TEST_RUN_HOME, relative_from_current_folder=False) def test_101_prepare_android(self): Tns.create_app(self.app_name, update_modules=False) @@ -129,6 +132,30 @@ def test_310_prepare_should_flatten_scoped_dependencies(self): ng_path = os.path.join(self.app_name, TnsAsserts.PLATFORM_ANDROID_NPM_MODULES_PATH, '@angular', 'core') assert File.exists(ng_path), "Scoped dependencies are flattened, please see #1783!" + @unittest.skipIf(CURRENT_OS == OSType.WINDOWS, "Skip on Windows") + def test_320_prepare_scoped_plugins(self): + """ + Test for https://github.com/NativeScript/nativescript-cli/pull/3080 + + Before this change we copied all NG components at following location (js demo of nativescript-facebook): + platforms/android/src/main/assets/app/tns_modules/nativescript-facebook/node_modules/@angular + + Now folder above should be empty (or not existing at all). + """ + + Folder.cleanup("nativescript-facebook") + Git.clone_repo(repo_url='git@github.com:NativeScript/nativescript-facebook.git', + local_folder="nativescript-facebook") + Folder.navigate_to(folder="nativescript-facebook/src") + output = run(command="npm run build") + Folder.navigate_to(folder=TEST_RUN_HOME, relative_from_current_folder=False) + assert "tsc" in output + assert "ERR" not in output + Tns.prepare_android(attributes={"--path": "nativescript-facebook/demo"}) + output = run(command="find nativescript-facebook/demo/platforms/android/ | grep @") + assert "@angular/core" not in output, "@angular/* should not be in platforms folder." + assert "@angular/router" not in output, "@angular/* should not be in platforms folder." + def test_400_prepare_missing_or_missing_platform(self): Tns.create_app(self.app_name, update_modules=False) diff --git a/tests/emulator/run_android_tests.py b/tests/emulator/run_android_tests.py index 2c7da90b..cc71c3b1 100644 --- a/tests/emulator/run_android_tests.py +++ b/tests/emulator/run_android_tests.py @@ -519,7 +519,7 @@ def test_390_tns_run_android_should_warn_if_package_ids_do_not_match(self): output = Tns.run_android(attributes={'--path': self.app_name, '--justlaunch': ''}) assert "The Application identifier is different from the one inside 'package.json' file." in output assert "NativeScript CLI might not work properly." in output - assert "BUILD SUCCESSFUL" in output + assert "Project successfully built" in output @unittest.skipIf(CURRENT_OS == OSType.LINUX, "`shell cp -r` fails for some reason on emulators on Linux.") def test_400_tns_run_android_respect_adb_errors(self):