Skip to content

Commit 68ad0ac

Browse files
Mivanova/tests hmr (#196)
* hmr tests * hmr tests * new string * hmr tests * add new test * hmr tests * change logs * change log * change ios screen match * uninstall logs * hmr checkes * hmr test * change structure * hmr test ios * hmr test ios * hmr tests ios * hmr test * hmr test * hmr test * test * test * add fix
1 parent 0018f62 commit 68ad0ac

File tree

6 files changed

+446
-0
lines changed

6 files changed

+446
-0
lines changed
Lines changed: 25 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,25 @@
1+
var Observable = require("tns-core-modules/data/observable").Observable;
2+
3+
function getMessage(counter) {
4+
if (counter <= 0) {
5+
return "Hoorraaay! You unlocked the NativeScript clicker achievement!";
6+
} else {
7+
return counter + " taps left";
8+
}
9+
}
10+
11+
function createViewModel() {
12+
var viewModel = new Observable();
13+
viewModel.counter = 42;
14+
viewModel.message = getMessage(viewModel.counter);
15+
console.log("LOG Hello");
16+
17+
viewModel.onTap = function() {
18+
this.counter--;
19+
this.set("message", getMessage(this.counter));
20+
}
21+
22+
return viewModel;
23+
}
24+
25+
exports.createViewModel = createViewModel;

tests/hmr/__init__.py

Whitespace-only changes.
Lines changed: 128 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,128 @@
1+
import os
2+
import unittest
3+
4+
from core.base_class.BaseClass import BaseClass
5+
from core.device.device import Device
6+
from core.device.emulator import Emulator
7+
from core.device.helpers.adb import Adb
8+
from core.osutils.file import File
9+
from core.settings.settings import EMULATOR_ID, ANDROID_PACKAGE, WEBPACK_PACKAGE, EMULATOR_NAME
10+
from core.tns.replace_helper import ReplaceHelper
11+
from core.tns.tns import Tns
12+
from core.tns.tns_platform_type import Platform
13+
from tests.hmr.helpers_hmr import HelpersHMR
14+
from tests.webpack.helpers.helpers import Helpers
15+
# import hashlib
16+
# import re
17+
18+
19+
class HelloWorldJSHMRAndroid(BaseClass):
20+
21+
22+
@classmethod
23+
def setUpClass(cls):
24+
BaseClass.setUpClass(cls.__name__)
25+
Emulator.stop()
26+
Emulator.ensure_available()
27+
28+
Tns.create_app(cls.app_name, update_modules=True)
29+
Tns.install_npm(package=WEBPACK_PACKAGE, option='--save-dev', folder=cls.app_name)
30+
Tns.platform_add_android(attributes={"--path": cls.app_name, "--frameworkPath": ANDROID_PACKAGE})
31+
32+
def setUp(self):
33+
Tns.kill()
34+
Helpers.emulator_cleanup(app_name=self.app_name)
35+
BaseClass.setUp(self)
36+
37+
def tearDown(self):
38+
Tns.kill()
39+
BaseClass.tearDown(self)
40+
41+
@classmethod
42+
def tearDownClass(cls):
43+
BaseClass.tearDownClass()
44+
45+
def test_001_android_run_hmr(self):
46+
log = Tns.run_android(attributes={'--path': self.app_name, '--device': EMULATOR_ID, '--hmr': ''}, wait=False,
47+
assert_success=False)
48+
49+
Tns.wait_for_log(log_file=log, string_list=HelpersHMR.run_hmr, not_existing_string_list=HelpersHMR.errors_hmr,
50+
timeout=240)
51+
Helpers.android_screen_match(image=HelpersHMR.image_original, timeout=120)
52+
53+
HelpersHMR.apply_changes(app_name=self.app_name, log=log, platform=Platform.ANDROID)
54+
HelpersHMR.revert_changes(app_name=self.app_name, log=log, platform=Platform.ANDROID)
55+
56+
def test_002_android_run_hmr_uninstall_app(self):
57+
log = Tns.run_android(attributes={'--path': self.app_name, '--device': EMULATOR_ID, '--hmr': ''}, wait=False,
58+
assert_success=False)
59+
60+
Tns.wait_for_log(log_file=log, string_list=HelpersHMR.run_hmr_with_platforms, not_existing_string_list=HelpersHMR.errors_hmr,
61+
timeout=240)
62+
Helpers.android_screen_match(image=HelpersHMR.image_original, timeout=120)
63+
64+
HelpersHMR.apply_changes_js(app_name=self.app_name, log=log, platform=Platform.ANDROID)
65+
66+
# Uninstall app while `tns run` is running
67+
Device.uninstall_app(app_prefix='org.nativescript.', platform=Platform.ANDROID)
68+
69+
HelpersHMR.revert_changes_js(app_name=self.app_name, log=log, platform=Platform.ANDROID)
70+
Helpers.android_screen_match(image=HelpersHMR.image_original, timeout=120)
71+
72+
@unittest.skip("https://github.com/NativeScript/nativescript-cli/issues/4123")
73+
def test_003_android_run_hmr_wrong_xml(self):
74+
log = Tns.run_android(attributes={'--path': self.app_name, '--device': EMULATOR_ID, '--hmr': ''}, wait=False,
75+
assert_success=False)
76+
Tns.wait_for_log(log_file=log, string_list=HelpersHMR.run_hmr,
77+
not_existing_string_list=HelpersHMR.errors_hmr, timeout=240)
78+
79+
# Verify app looks correct inside emulator
80+
Device.screen_match(device_name=EMULATOR_NAME, device_id=EMULATOR_ID,
81+
expected_image=HelpersHMR.image_original)
82+
83+
# Break the app with invalid xml changes
84+
ReplaceHelper.replace(self.app_name, ReplaceHelper.CHANGE_XML_INVALID_SYNTAX)
85+
86+
# Verify console notify user for broken xml
87+
# strings = ['for activity org.nativescript.TestApp / com.tns.ErrorReportActivity']
88+
strings = ['com.tns.NativeScriptException', 'Parsing XML at', 'Successfully synced application', EMULATOR_ID]
89+
Tns.wait_for_log(log_file=log, string_list=strings, timeout=120, check_interval=10)
90+
assert Adb.wait_for_text(device_id=EMULATOR_ID, text="Exception", timeout=30), "Error activity not found!"
91+
92+
# Revert changes
93+
ReplaceHelper.rollback(self.app_name, ReplaceHelper.CHANGE_XML_INVALID_SYNTAX)
94+
strings = ['JS: HMR: Sync...', 'JS: HMR: Hot Module Replacement Enabled. Waiting for signal.',
95+
'Successfully synced application', EMULATOR_ID]
96+
Tns.wait_for_log(log_file=log, string_list=strings, timeout=120, check_interval=10)
97+
98+
# Verify app looks correct inside emulator
99+
Device.screen_match(device_name=EMULATOR_NAME, device_id=EMULATOR_ID,
100+
expected_image=HelpersHMR.image_original)
101+
102+
def test_008_android_run_hmr_console_log(self):
103+
source_js = os.path.join('data', "issues", 'console-log-hmr', 'main-view-model.js')
104+
target_js = os.path.join(self.app_name, 'app', 'main-view-model.js')
105+
File.copy(src=source_js, dest=target_js)
106+
107+
log = Tns.run_android(attributes={'--path': self.app_name, '--device': EMULATOR_ID, '--hmr': ''}, wait=False,
108+
assert_success=False)
109+
110+
strings = ['LOG Hello']
111+
Tns.wait_for_log(log_file=log, string_list=strings, timeout=120, check_interval=10)
112+
113+
# Verify app looks correct inside emulator
114+
Device.screen_match(device_name=EMULATOR_NAME, device_id=EMULATOR_ID,
115+
expected_image=HelpersHMR.image_original)
116+
117+
@unittest.skip("Don't clear behavior")
118+
def test_009_android_run_hmr_delete_file(self):
119+
log = Tns.run_android(attributes={'--path': self.app_name, '--device': EMULATOR_ID, '--hmr': ''}, wait=False,
120+
assert_success=False)
121+
122+
Tns.wait_for_log(log_file=log, string_list=HelpersHMR.wp_run, not_existing_string_list=HelpersHMR.wp_errors,
123+
timeout=240)
124+
HelpersHMR.android_screen_match(image=self.image_original, timeout=120)
125+
File.remove(self.app_name + 'app', 'main-view-model.js')
126+
127+
self.apply_changes(app_name=self.app_name, log=log, platform=Platform.ANDROID)
128+
self.revert_changes(app_name=self.app_name, log=log, platform=Platform.ANDROID)
Lines changed: 114 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,114 @@
1+
import os
2+
import unittest
3+
4+
from core.base_class.BaseClass import BaseClass
5+
from core.device.simulator import Simulator
6+
from core.osutils.file import File
7+
from core.settings.settings import IOS_PACKAGE, SIMULATOR_NAME, WEBPACK_PACKAGE, EMULATOR_ID
8+
from core.tns.tns import Tns
9+
from core.tns.tns_platform_type import Platform
10+
from tests.hmr.helpers_hmr import HelpersHMR
11+
from tests.webpack.helpers.helpers import Helpers
12+
# import hashlib
13+
# import re
14+
15+
class HelloWorldJSHMRIOS(BaseClass):
16+
17+
18+
@classmethod
19+
def setUpClass(cls):
20+
BaseClass.setUpClass(cls.__name__)
21+
Simulator.stop()
22+
cls.SIMULATOR_ID = Simulator.ensure_available(simulator_name=SIMULATOR_NAME)
23+
24+
Tns.create_app(cls.app_name, update_modules=True)
25+
Tns.install_npm(package=WEBPACK_PACKAGE, option='--save-dev', folder=cls.app_name)
26+
Tns.platform_add_ios(attributes={'--path': cls.app_name, '--frameworkPath': IOS_PACKAGE})
27+
28+
def setUp(self):
29+
Tns.kill()
30+
BaseClass.setUp(self)
31+
32+
def tearDown(self):
33+
Tns.kill()
34+
BaseClass.tearDown(self)
35+
36+
@classmethod
37+
def tearDownClass(cls):
38+
BaseClass.tearDownClass()
39+
40+
def test_001_ios_run_hmr(self):
41+
log = Tns.run_ios(attributes={'--path': self.app_name, '--emulator': '', '--hmr': ''}, wait=False,
42+
assert_success=False)
43+
44+
Tns.wait_for_log(log_file=log, string_list=HelpersHMR.run_hmr, not_existing_string_list=HelpersHMR.errors_hmr,
45+
timeout=240)
46+
Helpers.ios_screen_match(sim_id=self.SIMULATOR_ID, image=HelpersHMR.image_original, timeout=120)
47+
Helpers.wait_webpack_watcher()
48+
49+
HelpersHMR.apply_changes(app_name=self.app_name, log=log, platform=Platform.IOS)
50+
Helpers.ios_screen_match(sim_id=self.SIMULATOR_ID, image=HelpersHMR.image_change,
51+
timeout=120)
52+
HelpersHMR.revert_changes(app_name=self.app_name, log=log, platform=Platform.IOS)
53+
Helpers.ios_screen_match(sim_id=self.SIMULATOR_ID, image=HelpersHMR.image_original,
54+
timeout=120)
55+
56+
def test_002_ios_run_hmr_uninstall_app(self):
57+
log = Tns.run_ios(attributes={'--path': self.app_name, '--emulator': '', '--hmr': ''}, wait=False,
58+
assert_success=False)
59+
Tns.wait_for_log(log_file=log, string_list=HelpersHMR.run_hmr_with_platforms, not_existing_string_list=HelpersHMR.errors_hmr,
60+
timeout=240)
61+
Helpers.ios_screen_match(sim_id=self.SIMULATOR_ID, image=HelpersHMR.image_original, timeout=120)
62+
Helpers.wait_webpack_watcher()
63+
64+
HelpersHMR.apply_changes_js(app_name=self.app_name, log=log, platform=Platform.IOS)
65+
66+
# Uninstall app while `tns run` is running
67+
Simulator.uninstall("org.nativescript." + self.app_name)
68+
69+
HelpersHMR.revert_changes_js(app_name=self.app_name, log=log, platform=Platform.IOS)
70+
Helpers.ios_screen_match(sim_id=self.SIMULATOR_ID, image=HelpersHMR.image_original, timeout=120)
71+
Helpers.wait_webpack_watcher()
72+
73+
@unittest.skip("https://github.com/NativeScript/nativescript-cli/issues/4123")
74+
def test_003_ios_run_hmr_wrong_xml(self):
75+
log = Tns.run_ios(attributes={'--path': self.app_name, '--emulator': '', '--hmr': ''}, wait=False,
76+
assert_success=False)
77+
Tns.wait_for_log(log_file=log, string_list=HelpersHMR.run_hmr_with_platforms, not_existing_string_list=HelpersHMR.errors_hmr,
78+
timeout=240)
79+
Helpers.ios_screen_match(sim_id=self.SIMULATOR_ID, image=HelpersHMR.image_original, timeout=120)
80+
Helpers.wait_webpack_watcher()
81+
82+
HelpersHMR.apply_changes_js(app_name=self.app_name, log=log, platform=Platform.IOS)
83+
84+
# Uninstall app while `tns run` is running
85+
Simulator.uninstall("org.nativescript." + self.app_name)
86+
87+
HelpersHMR.revert_changes_js(app_name=self.app_name, log=log, platform=Platform.IOS)
88+
Helpers.ios_screen_match(sim_id=self.SIMULATOR_ID, image=HelpersHMR.image_original, timeout=120)
89+
Helpers.wait_webpack_watcher()
90+
91+
def test_008_ios_run_hmr_console_log(self):
92+
source_js = os.path.join('data', "issues", 'console-log-hmr', 'main-view-model.js')
93+
target_js = os.path.join(self.app_name, 'app', 'main-view-model.js')
94+
File.copy(src=source_js, dest=target_js)
95+
96+
log = Tns.run_ios(attributes={'--path': self.app_name, '--emulator': '', '--hmr': ''}, wait=False,
97+
assert_success=False)
98+
strings = ['LOG Hello']
99+
Tns.wait_for_log(log_file=log, string_list=strings)
100+
101+
Helpers.ios_screen_match(sim_id=self.SIMULATOR_ID, image=HelpersHMR.image_original, timeout=120)
102+
103+
@unittest.skip("Don't clear behavior")
104+
def test_004_android_run_hmr_delete_file(self):
105+
log = Tns.run_android(attributes={'--path': self.app_name, '--device': EMULATOR_ID, '--hmr': ''}, wait=False,
106+
assert_success=False)
107+
108+
Tns.wait_for_log(log_file=log, string_list=HelpersHMR.wp_run, not_existing_string_list=HelpersHMR.wp_errors,
109+
timeout=240)
110+
HelpersHMR.android_screen_match(image=self.image_original, timeout=120)
111+
File.remove(self.app_name + 'app', 'main-view-model.js')
112+
113+
self.apply_changes(app_name=self.app_name, log=log, platform=Platform.ANDROID)
114+
self.revert_changes(app_name=self.app_name, log=log, platform=Platform.ANDROID)

0 commit comments

Comments
 (0)