Skip to content

Commit d2bd27f

Browse files
committed
feat: add vue tests
1 parent 2cb2535 commit d2bd27f

File tree

6 files changed

+175
-37
lines changed

6 files changed

+175
-37
lines changed

data/changes.py

+11
Original file line numberDiff line numberDiff line change
@@ -112,3 +112,14 @@ class SharedHelloWorld(object):
112112
HTML = ChangeSet(file_path=os.path.join('src', 'app', 'item', 'items.component.html'),
113113
old_value='"item.name"', new_value='"item.id"',
114114
old_text=None, new_text=None)
115+
116+
class BlankVue(object):
117+
VUE_SCRIPT = ChangeSet(file_path=os.path.join('app', 'components', 'Home.vue'),
118+
old_value='Blank {N}-Vue app', new_value='TEST APP',
119+
old_text='Blank {N}-Vue app', new_text='TEST APP')
120+
VUE_TEMPLATE = ChangeSet(file_path=os.path.join('app', 'components', 'Home.vue'),
121+
old_value='Home', new_value='TITLE',
122+
old_text='Home', new_text='TITLE')
123+
VUE_STYLE = ChangeSet(file_path=os.path.join('app', 'components', 'Home.vue'),
124+
old_value='font-size: 20;', new_value='font-size: 20; color: red;',
125+
old_color=Colors.DARK, new_color=Colors.RED)

data/sync/blank_vue.py

+77
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,77 @@
1+
"""
2+
Sync changes on JS/TS project helper.
3+
"""
4+
import os
5+
6+
from core.enums.app_type import AppType
7+
from core.settings import Settings
8+
from core.utils.wait import Wait
9+
from data.changes import Changes, Sync
10+
from data.const import Colors
11+
from products.nativescript.run_type import RunType
12+
from products.nativescript.tns import Tns
13+
from products.nativescript.tns_logs import TnsLogs
14+
15+
16+
def sync_blank_vue(app_name, platform, device, bundle=False, hmr=False, instrumented=False):
17+
# 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+
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)
23+
24+
# Verify it looks properly
25+
device.wait_for_text(text=Changes.BlankVue.VUE_SCRIPT.old_text)
26+
device.wait_for_text(text=Changes.BlankVue.VUE_TEMPLATE.old_text)
27+
initial_state = os.path.join(Settings.TEST_OUT_IMAGES, device.name, 'initial_state.png')
28+
device.get_screen(path=initial_state)
29+
30+
# Edit script in .vue file
31+
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)
35+
device.wait_for_text(text=Changes.BlankVue.VUE_SCRIPT.new_text)
36+
37+
# Edit template in .vue file
38+
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)
42+
device.wait_for_text(text=Changes.BlankVue.VUE_TEMPLATE.new_text)
43+
44+
# Edit styling in .vue file
45+
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)
49+
style_applied = Wait.until(lambda: device.get_pixels_by_color(Colors.RED) > 100)
50+
assert style_applied, 'Failed to sync changes in style.'
51+
52+
# Revert script in .vue file
53+
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)
57+
device.wait_for_text(text=Changes.BlankVue.VUE_SCRIPT.old_text)
58+
59+
# Revert template in .vue file
60+
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)
64+
device.wait_for_text(text=Changes.BlankVue.VUE_TEMPLATE.old_text)
65+
66+
# Revert styling in .vue file
67+
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)
71+
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.'
75+
76+
# Assert final and initial states are same
77+
device.screen_match(expected_image=initial_state, tolerance=1.0, timeout=30)

data/sync/hello_world_ng.py

+10-9
Original file line numberDiff line numberDiff line change
@@ -3,24 +3,25 @@
33
"""
44

55
import os
6+
67
from core.enums.app_type import AppType
78
from core.enums.platform_type import Platform
89
from core.settings import Settings
910
from data.changes import Changes, Sync
1011
from data.const import Colors
12+
from products.nativescript.preview_helpers import Preview
1113
from products.nativescript.run_type import RunType
1214
from products.nativescript.tns import Tns
1315
from products.nativescript.tns_logs import TnsLogs
14-
from products.nativescript.preview_helpers import Preview
1516

1617

1718
def sync_hello_world_ng(app_name, platform, device, bundle=False, uglify=False, aot=False, hmr=False,
18-
instrumented=True, app_type=AppType.NG):
19+
instrumented=True):
1920
result = Tns.run(app_name=app_name, platform=platform, emulator=True, wait=False,
2021
bundle=bundle, aot=aot, uglify=uglify, hmr=hmr)
2122
# Check logs
2223
strings = TnsLogs.run_messages(app_name=app_name, platform=platform, bundle=bundle,
23-
hmr=hmr, instrumented=instrumented, app_type=app_type)
24+
hmr=hmr, instrumented=instrumented, app_type=AppType.NG)
2425
TnsLogs.wait_for_log(log_file=result.log_file, string_list=strings, timeout=300)
2526

2627
# Verify it looks properly
@@ -33,7 +34,7 @@ def sync_hello_world_ng(app_name, platform, device, bundle=False, uglify=False,
3334
Sync.replace(app_name=app_name, change_set=Changes.NGHelloWorld.TS)
3435
device.wait_for_text(text=Changes.NGHelloWorld.TS.new_text)
3536
strings = TnsLogs.run_messages(app_name=app_name, platform=platform, run_type=RunType.INCREMENTAL, bundle=bundle,
36-
file_name='item.service.ts', hmr=hmr, instrumented=instrumented, app_type=app_type)
37+
file_name='item.service.ts', hmr=hmr, instrumented=instrumented, app_type=AppType.NG)
3738
TnsLogs.wait_for_log(log_file=result.log_file, string_list=strings, timeout=180)
3839

3940
Sync.replace(app_name=app_name, change_set=Changes.NGHelloWorld.HTML)
@@ -46,7 +47,7 @@ def sync_hello_world_ng(app_name, platform, device, bundle=False, uglify=False,
4647
assert not device.is_text_visible(text=Changes.NGHelloWorld.TS.new_text)
4748
strings = TnsLogs.run_messages(app_name=app_name, platform=platform, run_type=RunType.INCREMENTAL, bundle=bundle,
4849
file_name='items.component.html', hmr=hmr, instrumented=instrumented,
49-
app_type=app_type, aot=aot)
50+
app_type=AppType.NG, aot=aot)
5051
TnsLogs.wait_for_log(log_file=result.log_file, string_list=strings, timeout=180)
5152

5253
Sync.replace(app_name=app_name, change_set=Changes.NGHelloWorld.CSS)
@@ -59,29 +60,29 @@ def sync_hello_world_ng(app_name, platform, device, bundle=False, uglify=False,
5960
device.wait_for_text(text=number)
6061
assert not device.is_text_visible(text=Changes.NGHelloWorld.TS.new_text)
6162
strings = TnsLogs.run_messages(app_name=app_name, platform=platform, run_type=RunType.INCREMENTAL, bundle=bundle,
62-
file_name='app.css', hmr=hmr, instrumented=instrumented, app_type=app_type)
63+
file_name='app.css', hmr=hmr, instrumented=instrumented, app_type=AppType.NG)
6364
TnsLogs.wait_for_log(log_file=result.log_file, string_list=strings, timeout=180)
6465

6566
# Revert changes
6667
Sync.revert(app_name=app_name, change_set=Changes.NGHelloWorld.HTML)
6768
device.wait_for_text(text=Changes.NGHelloWorld.TS.new_text)
6869
strings = TnsLogs.run_messages(app_name=app_name, platform=platform, run_type=RunType.INCREMENTAL, bundle=bundle,
6970
file_name='items.component.html', hmr=hmr, instrumented=instrumented,
70-
app_type=app_type, aot=aot)
71+
app_type=AppType.NG, aot=aot)
7172
TnsLogs.wait_for_log(log_file=result.log_file, string_list=strings, timeout=180)
7273

7374
Sync.revert(app_name=app_name, change_set=Changes.NGHelloWorld.TS)
7475
device.wait_for_text(text=Changes.NGHelloWorld.TS.old_text)
7576
device.wait_for_main_color(color=Colors.DARK)
7677
strings = TnsLogs.run_messages(app_name=app_name, platform=platform, run_type=RunType.INCREMENTAL, bundle=bundle,
77-
file_name='item.service.ts', hmr=hmr, instrumented=instrumented, app_type=app_type)
78+
file_name='item.service.ts', hmr=hmr, instrumented=instrumented, app_type=AppType.NG)
7879
TnsLogs.wait_for_log(log_file=result.log_file, string_list=strings, timeout=180)
7980

8081
Sync.revert(app_name=app_name, change_set=Changes.NGHelloWorld.CSS)
8182
device.wait_for_main_color(color=Colors.WHITE)
8283
device.wait_for_text(text=Changes.NGHelloWorld.TS.old_text)
8384
strings = TnsLogs.run_messages(app_name=app_name, platform=platform, run_type=RunType.INCREMENTAL, bundle=bundle,
84-
file_name='app.css', hmr=hmr, instrumented=instrumented, app_type=app_type)
85+
file_name='app.css', hmr=hmr, instrumented=instrumented, app_type=AppType.NG)
8586
TnsLogs.wait_for_log(log_file=result.log_file, string_list=strings, timeout=180)
8687

8788
# Assert final and initial states are same

products/nativescript/tns_logs.py

+22-27
Original file line numberDiff line numberDiff line change
@@ -64,6 +64,7 @@ def run_messages(app_name, platform, run_type=RunType.FULL, bundle=False, hmr=Fa
6464
:param file_name: Name of changed file.
6565
:param instrumented: If true it will return logs we place inside app (see files in assets/logs).
6666
:param plugins: List of plugins.
67+
:param aot: True if `--env.aot is specified.`
6768
:return: Array of strings.
6869
"""
6970
if plugins is None:
@@ -73,35 +74,31 @@ def run_messages(app_name, platform, run_type=RunType.FULL, bundle=False, hmr=Fa
7374
bundle = True
7475

7576
# Generate prepare messages
76-
if not app_type == AppType.NG:
77-
if run_type in [RunType.FIRST_TIME, RunType.FULL]:
78-
logs.extend(TnsLogs.prepare_messages(platform=platform, plugins=plugins))
77+
if run_type in [RunType.FIRST_TIME, RunType.FULL]:
78+
logs.extend(TnsLogs.prepare_messages(platform=platform, plugins=plugins))
7979

8080
# Generate build messages
8181
# TODO: Check if file is in app resources and require native build
82-
if not app_type == AppType.NG:
83-
logs.extend(TnsLogs.build_messages(platform=platform, run_type=run_type))
82+
logs.extend(TnsLogs.build_messages(platform=platform, run_type=run_type))
8483

8584
# App install messages
86-
if not app_type == AppType.NG:
87-
if run_type in [RunType.FIRST_TIME, RunType.FULL]:
88-
logs.append('Installing on device')
89-
logs.append('Successfully installed')
85+
if run_type in [RunType.FIRST_TIME, RunType.FULL]:
86+
logs.append('Installing on device')
87+
logs.append('Successfully installed')
9088

9189
# File transfer messages
9290
logs.extend(TnsLogs.__file_changed_messages(run_type=run_type, file_name=file_name, platform=platform,
9391
bundle=bundle, hmr=hmr, uglify=uglify, aot=aot))
9492
if run_type in [RunType.FIRST_TIME, RunType.FULL]:
95-
if not app_type == AppType.NG:
96-
if not bundle and not hmr:
97-
if platform == Platform.IOS:
98-
logs.append('Successfully transferred all files on device')
99-
if bundle or hmr:
100-
if platform == Platform.IOS:
101-
logs.append('Successfully transferred bundle.js on device')
102-
logs.append('Successfully transferred package.json on device')
103-
logs.append('Successfully transferred starter.js on device')
104-
logs.append('Successfully transferred vendor.js on device')
93+
if not bundle and not hmr:
94+
if platform == Platform.IOS:
95+
logs.append('Successfully transferred all files on device')
96+
if bundle or hmr:
97+
if platform == Platform.IOS:
98+
logs.append('Successfully transferred bundle.js on device')
99+
logs.append('Successfully transferred package.json on device')
100+
logs.append('Successfully transferred starter.js on device')
101+
logs.append('Successfully transferred vendor.js on device')
105102

106103
# App restart messages:
107104
if TnsLogs.__should_restart(run_type=run_type, bundle=bundle, hmr=hmr, file_name=file_name):
@@ -139,7 +136,8 @@ def __file_changed_messages(run_type, file_name, platform, bundle, hmr, uglify,
139136
if bundle:
140137
logs.append('File change detected.')
141138
logs.append('Starting incremental webpack compilation...')
142-
logs.append(file_name)
139+
if '.vue' not in file_name:
140+
logs.append(file_name)
143141
# When env.aot html files are processed differently and you wont see
144142
# the exact file name in the log
145143
if aot:
@@ -211,18 +209,15 @@ def __app_refresh_messages(instrumented, app_type, hmr=False, file_name=None):
211209

212210
@staticmethod
213211
def __webpack_messages():
214-
logs = []
215-
logs.append('File change detected.')
216-
logs.append('Starting incremental webpack compilation...')
217-
logs.append('Webpack compilation complete.')
218-
logs.append('Webpack build done!')
219-
return logs
212+
return ['File change detected.',
213+
'Starting incremental webpack compilation...',
214+
'Webpack compilation complete.',
215+
'Webpack build done!']
220216

221217
@staticmethod
222218
def preview_initial_messages(platform, bundle=False, hmr=False, instrumented=False):
223219
logs = ['Start sending initial files for platform {0}'.format(str(platform)),
224220
'Successfully sent initial files for platform {0}'.format(str(platform))]
225-
226221
if bundle or hmr:
227222
logs.extend(TnsLogs.__webpack_messages())
228223
if instrumented:

run_common.py

+2-1
Original file line numberDiff line numberDiff line change
@@ -44,7 +44,8 @@ def __get_templates():
4444
local_folder = os.path.join(Settings.TEST_SUT_HOME, 'templates')
4545
Git.clone(repo_url=Template.REPO, branch=branch, local_folder=local_folder)
4646

47-
apps = [Template.HELLO_WORLD_JS, Template.HELLO_WORLD_TS, Template.HELLO_WORLD_NG, Template.MASTER_DETAIL_NG]
47+
apps = [Template.HELLO_WORLD_JS, Template.HELLO_WORLD_TS, Template.HELLO_WORLD_NG, Template.MASTER_DETAIL_NG,
48+
Template.VUE_BLANK]
4849
for app in apps:
4950
template_name = app.name
5051
template_folder = os.path.join(local_folder, 'packages', template_name)

tests/vue/test_vue_run.py

+53
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,53 @@
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 sync_blank_vue
10+
from data.templates import Template
11+
from products.nativescript.tns import Tns
12+
13+
14+
class VueJSTests(TnsRunTest):
15+
app_name = Settings.AppName.DEFAULT
16+
source_project_dir = os.path.join(Settings.TEST_RUN_HOME, app_name)
17+
target_project_dir = os.path.join(Settings.TEST_RUN_HOME, 'data', 'temp', app_name)
18+
19+
@classmethod
20+
def setUpClass(cls):
21+
TnsRunTest.setUpClass()
22+
23+
# Create app
24+
Tns.create(app_name=cls.app_name, template=Template.VUE_BLANK.local_package, update=True)
25+
Tns.platform_add_android(app_name=cls.app_name, framework_path=Settings.Android.FRAMEWORK_PATH)
26+
if Settings.HOST_OS is OSType.OSX:
27+
Tns.platform_add_ios(app_name=cls.app_name, framework_path=Settings.IOS.FRAMEWORK_PATH)
28+
29+
# Copy TestApp to data folder.
30+
Folder.copy(source=cls.source_project_dir, target=cls.target_project_dir)
31+
32+
def setUp(self):
33+
TnsRunTest.setUp(self)
34+
# "src" folder of TestApp will be restored before each test.
35+
# This will ensure failures in one test do not cause common failures.
36+
source_src = os.path.join(self.target_project_dir, 'app')
37+
target_src = os.path.join(self.source_project_dir, 'app')
38+
Folder.clean(target_src)
39+
Folder.copy(source=source_src, target=target_src)
40+
41+
def test_100_run_android_bundle(self):
42+
sync_blank_vue(self.app_name, Platform.ANDROID, self.emu, bundle=True)
43+
44+
@unittest.skipIf(Settings.HOST_OS != OSType.OSX, 'iOS tests can be executed only on macOS.')
45+
def test_100_run_ios_bundle(self):
46+
sync_blank_vue(self.app_name, Platform.IOS, self.sim, bundle=True)
47+
48+
def test_200_run_android_bundle_hmr(self):
49+
sync_blank_vue(self.app_name, Platform.ANDROID, self.emu, hmr=True)
50+
51+
@unittest.skipIf(Settings.HOST_OS != OSType.OSX, 'iOS tests can be executed only on macOS.')
52+
def test_200_run_ios_bundle_hmr(self):
53+
sync_blank_vue(self.app_name, Platform.IOS, self.sim, hmr=True)

0 commit comments

Comments
 (0)