Skip to content

Commit b65b33e

Browse files
committed
feat: add preview tests for vue
1 parent d2bd27f commit b65b33e

File tree

4 files changed

+153
-41
lines changed

4 files changed

+153
-41
lines changed

data/sync/blank_vue.py

+72-26
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@
44
import os
55

66
from core.enums.app_type import AppType
7+
from core.log.log import Log
78
from core.settings import Settings
89
from core.utils.wait import Wait
910
from data.changes import Changes, Sync
@@ -13,13 +14,29 @@
1314
from products.nativescript.tns_logs import TnsLogs
1415

1516

16-
def sync_blank_vue(app_name, platform, device, bundle=False, hmr=False, instrumented=False):
17+
def __run_vue(app_name, platform, bundle, hmr):
1718
# Execute `tns run` and wait until logs are OK
18-
result = Tns.run(app_name=app_name, platform=platform, emulator=True, wait=False, bundle=bundle, hmr=hmr)
19+
return Tns.run(app_name=app_name, platform=platform, emulator=True, wait=False, bundle=bundle, hmr=hmr)
1920

20-
strings = TnsLogs.run_messages(app_name=app_name, platform=platform, run_type=RunType.FULL, bundle=bundle,
21-
hmr=hmr, app_type=AppType.VUE, instrumented=instrumented)
22-
TnsLogs.wait_for_log(log_file=result.log_file, string_list=strings, timeout=240)
21+
22+
def __preview_vue(app_name, bundle, hmr):
23+
# Execute `tns run` and wait until logs are OK
24+
return Tns.preview(app_name=app_name, bundle=bundle, hmr=hmr)
25+
26+
27+
def __workflow(preview, app_name, platform, device, bundle=False, hmr=False):
28+
# Execute tns command
29+
if preview:
30+
result = __preview_vue(app_name=app_name, bundle=bundle, hmr=hmr)
31+
else:
32+
result = __run_vue(app_name=app_name, platform=platform, bundle=bundle, hmr=hmr)
33+
34+
if preview:
35+
Log.info('Skip logs checks.')
36+
else:
37+
strings = TnsLogs.run_messages(app_name=app_name, platform=platform, run_type=RunType.FULL, bundle=bundle,
38+
hmr=hmr, app_type=AppType.VUE)
39+
TnsLogs.wait_for_log(log_file=result.log_file, string_list=strings, timeout=240)
2340

2441
# Verify it looks properly
2542
device.wait_for_text(text=Changes.BlankVue.VUE_SCRIPT.old_text)
@@ -29,49 +46,78 @@ def sync_blank_vue(app_name, platform, device, bundle=False, hmr=False, instrume
2946

3047
# Edit script in .vue file
3148
Sync.replace(app_name=app_name, change_set=Changes.BlankVue.VUE_SCRIPT)
32-
strings = TnsLogs.run_messages(app_name=app_name, platform=platform, run_type=RunType.INCREMENTAL, bundle=bundle,
33-
hmr=hmr, app_type=AppType.VUE, file_name='Home.vue', instrumented=instrumented)
34-
TnsLogs.wait_for_log(log_file=result.log_file, string_list=strings)
49+
if preview:
50+
Log.info('Skip logs checks.')
51+
else:
52+
strings = TnsLogs.run_messages(app_name=app_name, platform=platform, run_type=RunType.INCREMENTAL,
53+
bundle=bundle, hmr=hmr, app_type=AppType.VUE, file_name='Home.vue')
54+
TnsLogs.wait_for_log(log_file=result.log_file, string_list=strings)
3555
device.wait_for_text(text=Changes.BlankVue.VUE_SCRIPT.new_text)
3656

3757
# Edit template in .vue file
3858
Sync.replace(app_name=app_name, change_set=Changes.BlankVue.VUE_TEMPLATE)
39-
strings = TnsLogs.run_messages(app_name=app_name, platform=platform, run_type=RunType.INCREMENTAL, bundle=bundle,
40-
hmr=hmr, app_type=AppType.VUE, file_name='Home.vue', instrumented=instrumented)
41-
TnsLogs.wait_for_log(log_file=result.log_file, string_list=strings)
59+
if preview:
60+
Log.info('Skip logs checks.')
61+
else:
62+
strings = TnsLogs.run_messages(app_name=app_name, platform=platform, run_type=RunType.INCREMENTAL,
63+
bundle=bundle, hmr=hmr, app_type=AppType.VUE, file_name='Home.vue')
64+
TnsLogs.wait_for_log(log_file=result.log_file, string_list=strings)
4265
device.wait_for_text(text=Changes.BlankVue.VUE_TEMPLATE.new_text)
4366

4467
# Edit styling in .vue file
4568
Sync.replace(app_name=app_name, change_set=Changes.BlankVue.VUE_STYLE)
46-
strings = TnsLogs.run_messages(app_name=app_name, platform=platform, run_type=RunType.INCREMENTAL, bundle=bundle,
47-
hmr=hmr, app_type=AppType.VUE, file_name='Home.vue', instrumented=instrumented)
48-
TnsLogs.wait_for_log(log_file=result.log_file, string_list=strings)
69+
if preview:
70+
Log.info('Skip logs checks.')
71+
else:
72+
strings = TnsLogs.run_messages(app_name=app_name, platform=platform, run_type=RunType.INCREMENTAL,
73+
bundle=bundle, hmr=hmr, app_type=AppType.VUE, file_name='Home.vue')
74+
TnsLogs.wait_for_log(log_file=result.log_file, string_list=strings)
4975
style_applied = Wait.until(lambda: device.get_pixels_by_color(Colors.RED) > 100)
5076
assert style_applied, 'Failed to sync changes in style.'
5177

5278
# Revert script in .vue file
5379
Sync.revert(app_name=app_name, change_set=Changes.BlankVue.VUE_SCRIPT)
54-
strings = TnsLogs.run_messages(app_name=app_name, platform=platform, run_type=RunType.INCREMENTAL, bundle=bundle,
55-
hmr=hmr, app_type=AppType.VUE, file_name='Home.vue', instrumented=instrumented)
56-
TnsLogs.wait_for_log(log_file=result.log_file, string_list=strings)
80+
if preview:
81+
Log.info('Skip logs checks.')
82+
else:
83+
strings = TnsLogs.run_messages(app_name=app_name, platform=platform, run_type=RunType.INCREMENTAL,
84+
bundle=bundle, hmr=hmr, app_type=AppType.VUE, file_name='Home.vue')
85+
TnsLogs.wait_for_log(log_file=result.log_file, string_list=strings)
5786
device.wait_for_text(text=Changes.BlankVue.VUE_SCRIPT.old_text)
5887

5988
# Revert template in .vue file
6089
Sync.revert(app_name=app_name, change_set=Changes.BlankVue.VUE_TEMPLATE)
61-
strings = TnsLogs.run_messages(app_name=app_name, platform=platform, run_type=RunType.INCREMENTAL, bundle=bundle,
62-
hmr=hmr, app_type=AppType.VUE, file_name='Home.vue', instrumented=instrumented)
63-
TnsLogs.wait_for_log(log_file=result.log_file, string_list=strings)
90+
if preview:
91+
Log.info('Skip logs checks.')
92+
else:
93+
strings = TnsLogs.run_messages(app_name=app_name, platform=platform, run_type=RunType.INCREMENTAL,
94+
bundle=bundle, hmr=hmr, app_type=AppType.VUE, file_name='Home.vue')
95+
TnsLogs.wait_for_log(log_file=result.log_file, string_list=strings)
6496
device.wait_for_text(text=Changes.BlankVue.VUE_TEMPLATE.old_text)
6597

6698
# Revert styling in .vue file
6799
Sync.revert(app_name=app_name, change_set=Changes.BlankVue.VUE_STYLE)
68-
strings = TnsLogs.run_messages(app_name=app_name, platform=platform, run_type=RunType.INCREMENTAL, bundle=bundle,
69-
hmr=hmr, app_type=AppType.VUE, file_name='Home.vue', instrumented=instrumented)
70-
TnsLogs.wait_for_log(log_file=result.log_file, string_list=strings)
100+
if preview:
101+
Log.info('Skip logs checks.')
102+
else:
103+
strings = TnsLogs.run_messages(app_name=app_name, platform=platform, run_type=RunType.INCREMENTAL,
104+
bundle=bundle,
105+
hmr=hmr, app_type=AppType.VUE, file_name='Home.vue')
106+
TnsLogs.wait_for_log(log_file=result.log_file, string_list=strings)
71107

72-
# Skip next steps because of https://github.com/nativescript-vue/nativescript-vue/issues/425
73-
# style_applied = Wait.until(lambda: device.get_pixels_by_color(Colors.RED) == 0)
74-
# assert style_applied, 'Failed to sync changes in style.'
108+
if hmr:
109+
Log.info('Skip next steps because of https://github.com/nativescript-vue/nativescript-vue/issues/425')
110+
else:
111+
style_applied = Wait.until(lambda: device.get_pixels_by_color(Colors.RED) == 0)
112+
assert style_applied, 'Failed to sync changes in style.'
75113

76114
# Assert final and initial states are same
77115
device.screen_match(expected_image=initial_state, tolerance=1.0, timeout=30)
116+
117+
118+
def sync_blank_vue(app_name, platform, device, bundle=False, hmr=False):
119+
__workflow(preview=False, app_name=app_name, platform=platform, device=device, bundle=bundle, hmr=hmr)
120+
121+
122+
def preview_blank_vue(app_name, platform, device, bundle=False, hmr=False):
123+
__workflow(preview=True, app_name=app_name, platform=platform, device=device, bundle=bundle, hmr=hmr)

products/nativescript/preview_helpers.py

+3-3
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
import os
22
import re
33
import time
4+
45
from core.enums.platform_type import Platform
56
from core.settings import Settings
67
from core.settings.Settings import TEST_SUT_HOME, TEST_RUN_HOME
@@ -97,9 +98,8 @@ def dismiss_simulator_alert():
9798
run(command)
9899

99100
@staticmethod
100-
def run_app(app_name, platform, device, bundle=False, hmr=False, uglify=False, aot=False,
101-
instrumented=False):
102-
result = Tns.preview(app_name=app_name, bundle=bundle, hmr=hmr, aot=aot, uglify=uglify)
101+
def run_app(app_name, platform, device, bundle=False, hmr=False, instrumented=False):
102+
result = Tns.preview(app_name=app_name, bundle=bundle, hmr=hmr)
103103

104104
# Read the log and extract the url to load the app on emulator
105105
log = File.read(result.log_file)

products/nativescript/tns.py

+20-12
Original file line numberDiff line numberDiff line change
@@ -299,6 +299,26 @@ def debug(app_name, platform, emulator=False, device=None, release=False, provis
299299
pass
300300
return result
301301

302+
@staticmethod
303+
def preview(app_name, bundle=False, hmr=False, log_trace=True, verify=True, timeout=120):
304+
"""
305+
Execute `tns preview` command.
306+
:param app_name: Pass --path <app_name>.
307+
:param bundle: If true pass --bundle.
308+
:param hmr: If true pass --hmr.
309+
:param log_trace: If true pass --log trace.
310+
:param verify: If true verify some logs.
311+
:param timeout: Timeout in seconds.
312+
:return: Result of `tns preview` command.
313+
"""
314+
result = Tns.exec_command(command='preview', path=app_name, bundle=bundle, hmr=hmr, wait=False,
315+
log_trace=log_trace, timeout=timeout)
316+
if verify:
317+
strings = [
318+
'Use NativeScript Playground app and scan the QR code above to preview the application on your device']
319+
TnsLogs.wait_for_log(log_file=result.log_file, string_list=strings)
320+
return result
321+
302322
@staticmethod
303323
def test_init(app_name, framework, verify=True):
304324
"""
@@ -381,15 +401,3 @@ def kill():
381401
else:
382402
Process.kill(proc_name='node', proc_cmdline=Settings.Executables.TNS)
383403
Process.kill_by_commandline(cmdline='webpack.js')
384-
385-
@staticmethod
386-
def preview(app_name, bundle=False, hmr=False, aot=False, uglify=False, wait=False,
387-
log_trace=True, verify=True, timeout=60):
388-
result = Tns.exec_command(command='preview', path=app_name, bundle=bundle, hmr=hmr, aot=aot, uglify=uglify,
389-
wait=wait, log_trace=log_trace, timeout=timeout)
390-
if verify:
391-
strings = [
392-
'Use NativeScript Playground app and scan the QR code above to preview the application on your device']
393-
TnsLogs.wait_for_log(log_file=result.log_file, string_list=strings)
394-
395-
return result

tests/vue/test_vue_preview.py

+58
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,58 @@
1+
import os
2+
import unittest
3+
4+
from core.base_test.tns_run_test import TnsRunTest
5+
from core.enums.os_type import OSType
6+
from core.enums.platform_type import Platform
7+
from core.settings import Settings
8+
from core.utils.file_utils import Folder
9+
from data.sync.blank_vue import preview_blank_vue
10+
from data.templates import Template
11+
from products.nativescript.preview_helpers import Preview
12+
from products.nativescript.tns import Tns
13+
14+
15+
class VueJSPreviewTests(TnsRunTest):
16+
app_name = Settings.AppName.DEFAULT
17+
source_project_dir = os.path.join(Settings.TEST_RUN_HOME, app_name)
18+
target_project_dir = os.path.join(Settings.TEST_RUN_HOME, 'data', 'temp', app_name)
19+
20+
@classmethod
21+
def setUpClass(cls):
22+
TnsRunTest.setUpClass()
23+
Preview.install_preview_app(cls.emu, Platform.ANDROID)
24+
if Settings.HOST_OS is OSType.OSX:
25+
Preview.install_preview_app(cls.sim, Platform.IOS)
26+
Preview.install_playground_app(cls.sim, Platform.IOS)
27+
28+
# Create app
29+
Tns.create(app_name=cls.app_name, template=Template.VUE_BLANK.local_package, update=True)
30+
Tns.platform_add_android(app_name=cls.app_name, framework_path=Settings.Android.FRAMEWORK_PATH)
31+
if Settings.HOST_OS is OSType.OSX:
32+
Tns.platform_add_ios(app_name=cls.app_name, framework_path=Settings.IOS.FRAMEWORK_PATH)
33+
34+
# Copy TestApp to data folder.
35+
Folder.copy(source=cls.source_project_dir, target=cls.target_project_dir)
36+
37+
def setUp(self):
38+
TnsRunTest.setUp(self)
39+
# "src" folder of TestApp will be restored before each test.
40+
# This will ensure failures in one test do not cause common failures.
41+
source_src = os.path.join(self.target_project_dir, 'app')
42+
target_src = os.path.join(self.source_project_dir, 'app')
43+
Folder.clean(target_src)
44+
Folder.copy(source=source_src, target=target_src)
45+
46+
def test_100_preview_android_bundle(self):
47+
preview_blank_vue(self.app_name, Platform.ANDROID, self.emu, bundle=True)
48+
49+
@unittest.skipIf(Settings.HOST_OS != OSType.OSX, 'iOS tests can be executed only on macOS.')
50+
def test_100_preview_ios_bundle(self):
51+
preview_blank_vue(self.app_name, Platform.IOS, self.sim, bundle=True)
52+
53+
def test_200_preview_android_bundle_hmr(self):
54+
preview_blank_vue(self.app_name, Platform.ANDROID, self.emu, hmr=True)
55+
56+
@unittest.skipIf(Settings.HOST_OS != OSType.OSX, 'iOS tests can be executed only on macOS.')
57+
def test_200_preview_ios_bundle_hmr(self):
58+
preview_blank_vue(self.app_name, Platform.IOS, self.sim, hmr=True)

0 commit comments

Comments
 (0)