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 dd10e6bf..2f64e9a9 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 @@ -348,13 +352,17 @@ 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 "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 + 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) @@ -377,24 +385,29 @@ 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 + 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(): @@ -410,9 +423,13 @@ 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 + 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) @@ -422,7 +439,11 @@ 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 + 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/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 index bb005194..0815dc7f 100644 Binary files a/data/images/Emulator-Api19-Default/t-ng-live-template-live-n.png and b/data/images/Emulator-Api19-Default/t-ng-live-template-live-n.png differ 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 0afaa09f..00000000 Binary files a/data/images/Emulator-Api19-Default/t-ng-live-template-next-n.png and /dev/null differ diff --git a/data/images/iPhone7N/t-ng-live-template-live-n.png b/data/images/iPhone7N/t-ng-live-template-live-n.png index 5b6900eb..aaebdab3 100644 Binary files a/data/images/iPhone7N/t-ng-live-template-live-n.png and b/data/images/iPhone7N/t-ng-live-template-live-n.png differ 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 a47a26e1..f93bc6bb 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 @@ -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 @@ -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/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..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,14 +132,29 @@ 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." + @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/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..e4725d8f 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}) @@ -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): 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) 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): 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)