From 62630337efae219fd046c11ba7be4da066a61662 Mon Sep 17 00:00:00 2001 From: Vasil Chimev Date: Thu, 27 Jun 2019 20:19:34 +0300 Subject: [PATCH] refactor: livesync tests (#7415) * refactor: livesync tests * refactor: renamings --- .vscode/launch.json | 4 +- tests/app/button-page.xml | 5 - tests/app/{ => livesync}/app-new-page.css | 0 .../app-new-scss-page.scss} | 0 tests/app/{ => livesync}/application-page.css | 0 .../button-css-page.css} | 0 tests/app/livesync/button-scss-page.scss | 3 + tests/app/livesync/livesync-button-page.scss | 3 - tests/app/livesync/livesync-tests.ts | 141 ++++++++++-------- tests/app/test-runner.ts | 5 +- tests/package.json | 2 +- 11 files changed, 86 insertions(+), 77 deletions(-) delete mode 100644 tests/app/button-page.xml rename tests/app/{ => livesync}/app-new-page.css (100%) rename tests/app/{app-new-sass-page.scss => livesync/app-new-scss-page.scss} (100%) rename tests/app/{ => livesync}/application-page.css (100%) rename tests/app/{button-page.css => livesync/button-css-page.css} (100%) create mode 100644 tests/app/livesync/button-scss-page.scss diff --git a/.vscode/launch.json b/.vscode/launch.json index 75e18bd2f..38041cb91 100644 --- a/.vscode/launch.json +++ b/.vscode/launch.json @@ -66,10 +66,8 @@ "platform": "android", "appRoot": "${workspaceRoot}/tests", "sourceMaps": true, + "stopOnEntry": true, "watch": true, - // "tnsArgs": [ - // "--debug-brk" - // ] }, // { // "name": "Test on Android", diff --git a/tests/app/button-page.xml b/tests/app/button-page.xml deleted file mode 100644 index 3af435952..000000000 --- a/tests/app/button-page.xml +++ /dev/null @@ -1,5 +0,0 @@ - - - - - \ No newline at end of file diff --git a/tests/app/app-new-page.css b/tests/app/livesync/app-new-page.css similarity index 100% rename from tests/app/app-new-page.css rename to tests/app/livesync/app-new-page.css diff --git a/tests/app/app-new-sass-page.scss b/tests/app/livesync/app-new-scss-page.scss similarity index 100% rename from tests/app/app-new-sass-page.scss rename to tests/app/livesync/app-new-scss-page.scss diff --git a/tests/app/application-page.css b/tests/app/livesync/application-page.css similarity index 100% rename from tests/app/application-page.css rename to tests/app/livesync/application-page.css diff --git a/tests/app/button-page.css b/tests/app/livesync/button-css-page.css similarity index 100% rename from tests/app/button-page.css rename to tests/app/livesync/button-css-page.css diff --git a/tests/app/livesync/button-scss-page.scss b/tests/app/livesync/button-scss-page.scss new file mode 100644 index 000000000..1f811bb24 --- /dev/null +++ b/tests/app/livesync/button-scss-page.scss @@ -0,0 +1,3 @@ +Button { + color: green; +} \ No newline at end of file diff --git a/tests/app/livesync/livesync-button-page.scss b/tests/app/livesync/livesync-button-page.scss index 3b012936e..e69de29bb 100644 --- a/tests/app/livesync/livesync-button-page.scss +++ b/tests/app/livesync/livesync-button-page.scss @@ -1,3 +0,0 @@ -Button { - color: cyan; -} \ No newline at end of file diff --git a/tests/app/livesync/livesync-tests.ts b/tests/app/livesync/livesync-tests.ts index 04d54584c..7bf950f90 100644 --- a/tests/app/livesync/livesync-tests.ts +++ b/tests/app/livesync/livesync-tests.ts @@ -3,40 +3,57 @@ import * as TKUnit from "../tk-unit"; import * as app from "tns-core-modules/application/application"; import * as frame from "tns-core-modules/ui/frame"; -import * as fs from "tns-core-modules/file-system"; import { Color } from "tns-core-modules/color"; import { createViewFromEntry } from "tns-core-modules/ui/builder"; import { Page } from "tns-core-modules/ui/page"; import { Frame } from "tns-core-modules/ui/frame"; -const appCssFileName = "/application-page.css"; -const appNewCssFileName = "app-new-page.css"; -const appNewScssFileName = "app-new-sass-page.css"; -const buttonCssFileName = "/button-page.css"; +const LIVESYNC_FOLDER = "livesync/"; -const buttonPageModuleName = "livesync/livesync-button-page"; -const buttonHtmlPageFileName = "./livesync/livesync-button-page.html"; -const buttonXmlPageFileName = "./livesync/livesync-button-page.xml"; -const buttonJsPageFileName = "./livesync/livesync-button-page.js"; -const buttonTsPageFileName = "./livesync/livesync-button-page.ts"; -const buttonScssPageFileName = "./livesync/livesync-button-page.scss"; -const labelPageModuleName = "livesync/livesync-label-page"; +const appCssFileName = `${LIVESYNC_FOLDER}application-page.css`; +const appNewCssFileName = `${LIVESYNC_FOLDER}app-new-page.css`; +// `.scss` module registers in webpack as `.css` +// https://github.com/NativeScript/NativeScript/blob/5.4.2/tns-core-modules/globals/globals.ts#L32-L33 +const appNewScssFileNameAsCss = `${LIVESYNC_FOLDER}app-new-scss-page.css`; +const appNewScssFileName = `${LIVESYNC_FOLDER}app-new-scss-page.scss`; + +const buttonCssModuleName = `${LIVESYNC_FOLDER}button-css-page`; +const buttonScssModuleName = `${LIVESYNC_FOLDER}button-scss-page`; +const buttonCssFileName = `${LIVESYNC_FOLDER}button-css-page.css`; +const buttonScssFileName = `${LIVESYNC_FOLDER}button-scss-page.scss`; + +const buttonPageModuleName = `${LIVESYNC_FOLDER}livesync-button-page`; +const buttonHtmlPageFileName = `${LIVESYNC_FOLDER}livesync-button-page.html`; +const buttonXmlPageFileName = `${LIVESYNC_FOLDER}livesync-button-page.xml`; +const buttonJsPageFileName = `${LIVESYNC_FOLDER}livesync-button-page.js`; +const buttonTsPageFileName = `${LIVESYNC_FOLDER}livesync-button-page.ts`; +const buttonScssPageFileName = `${LIVESYNC_FOLDER}livesync-button-page.scss`; +const labelPageModuleName = `${LIVESYNC_FOLDER}livesync-label-page`; const green = new Color("green"); +export function setUp() { + const labelPage = createViewFromEntry(({ moduleName: labelPageModuleName })); + helper.navigate(() => labelPage); +} + +export function tearDown() { + app.setCssFileName(appCssFileName); +} + export function test_onLiveSync_ModuleContext_AppStyle_AppNewCss() { - _test_onLiveSync_ModuleContext_AppStyle(appNewCssFileName); + _test_onLiveSync_ModuleContext_AppStyle(appNewCssFileName, appNewCssFileName); } export function test_onLiveSync_ModuleContext_AppStyle_AppNewScss() { - _test_onLiveSync_ModuleContext_AppStyle(appNewScssFileName); + _test_onLiveSync_ModuleContext_AppStyle(appNewScssFileNameAsCss, appNewScssFileName); } -export function test_onLiveSync_ModuleContext_ContextUndefined() { +export function test_onLiveSync_ModuleContext_Undefined() { _test_onLiveSync_ModuleContext({ type: undefined, path: undefined }); } -export function test_onLiveSync_ModuleContext_ModuleUndefined() { +export function test_onLiveSync_ModuleContext_PathUndefined() { _test_onLiveSync_ModuleContext({ type: "script", path: undefined }); } @@ -49,7 +66,11 @@ export function test_onLiveSync_ModuleContext_Script_TsFile() { } export function test_onLiveSync_ModuleContext_Style_CssFile() { - _test_onLiveSync_ModuleContext_TypeStyle({ type: "style", path: fs.knownFolders.currentApp().path + buttonCssFileName }); + _test_onLiveSync_ModuleContext_TypeStyle(buttonCssModuleName, buttonCssFileName); +} + +export function test_onLiveSync_ModuleContext_Style_ScssFile() { + _test_onLiveSync_ModuleContext_TypeStyle(buttonScssModuleName, buttonScssFileName); } export function test_onLiveSync_ModuleContext_Markup_HtmlFile() { @@ -60,14 +81,14 @@ export function test_onLiveSync_ModuleContext_Markup_XmlFile() { _test_onLiveSync_ModuleReplace({ type: "markup", path: buttonXmlPageFileName }); } -export function test_onLiveSync_ModuleContext_Markup_Script_XmlFile() { +export function test_onLiveSync_ModuleContext_MarkupXml_ScriptTs_Files() { _test_onLiveSync_ModuleReplace_Multiple([ { type: "script", path: buttonTsPageFileName }, { type: "markup", path: buttonXmlPageFileName } ]); } -export function test_onLiveSync_ModuleContext_Markup_Script_Style_XmlFile() { +export function test_onLiveSync_ModuleContext_MarkupXml_ScriptTs_StyleScss_Files() { _test_onLiveSync_ModuleReplace_Multiple([ { type: "script", path: buttonTsPageFileName }, { type: "markup", path: buttonXmlPageFileName }, @@ -75,14 +96,14 @@ export function test_onLiveSync_ModuleContext_Markup_Script_Style_XmlFile() { ]); } -export function test_onLiveSync_ModuleContext_Markup_Script_HtmlFile() { +export function test_onLiveSync_ModuleContext_MarkupHtml_ScriptTs_Files() { _test_onLiveSync_ModuleReplace_Multiple([ { type: "script", path: buttonTsPageFileName }, { type: "markup", path: buttonHtmlPageFileName } ]); } -export function test_onLiveSync_ModuleContext_Markup_Script_Style_HtmlFile() { +export function test_onLiveSync_ModuleContext_MarkupHtml_ScriptTs_StyleScss_Files() { _test_onLiveSync_ModuleReplace_Multiple([ { type: "script", path: buttonTsPageFileName }, { type: "markup", path: buttonHtmlPageFileName }, @@ -90,23 +111,14 @@ export function test_onLiveSync_ModuleContext_Markup_Script_Style_HtmlFile() { ]); } -export function setUp() { - const labelPage = createViewFromEntry(({ moduleName: labelPageModuleName })); - helper.navigate(() => labelPage); -} - -export function tearDown() { - app.setCssFileName(fs.knownFolders.currentApp().path + appCssFileName); -} - -function _test_onLiveSync_ModuleContext_AppStyle(styleFileName: string) { +function _test_onLiveSync_ModuleContext_AppStyle(appStyleFileName: string, livesyncStyleFileName: string) { const pageBeforeNavigation = helper.getCurrentPage(); const buttonPage = createViewFromEntry(({ moduleName: buttonPageModuleName })); helper.navigateWithHistory(() => buttonPage); - app.setCssFileName(fs.knownFolders.currentApp().path + "/" + styleFileName); + app.setCssFileName(appStyleFileName); const pageBeforeLiveSync = helper.getCurrentPage(); - global.__onLiveSync({ type: "style", path: fs.knownFolders.currentApp().path + "/" + styleFileName }); + livesync({ type: "style", path: livesyncStyleFileName }); const pageAfterLiveSync = helper.getCurrentPage(); TKUnit.waitUntilReady(() => pageAfterLiveSync.getViewById("button").style.color.toString() === green.toString()); @@ -121,10 +133,10 @@ function _test_onLiveSync_ModuleContext_AppStyle(styleFileName: string) { TKUnit.assertTrue(pageAfterNavigationBack._cssState.isSelectorsLatestVersionApplied(), "Latest selectors version is NOT applied!"); } -function _test_onLiveSync_ModuleContext(context: { type, path }) { +function _test_onLiveSync_ModuleContext(context: ModuleContext) { const buttonPage = createViewFromEntry(({ moduleName: buttonPageModuleName })); helper.navigateWithHistory(() => buttonPage); - global.__onLiveSync({ type: context.type, path: context.path }); + livesync({ type: context.type, path: context.path }); TKUnit.waitUntilReady(() => !!frame.topmost()); const topmostFrame = frame.topmost(); @@ -132,12 +144,12 @@ function _test_onLiveSync_ModuleContext(context: { type, path }) { TKUnit.assertTrue(topmostFrame.currentPage.getViewById("label").isLoaded); } -function _test_onLiveSync_ModuleReplace(context: { type, path }) { +function _test_onLiveSync_ModuleReplace(context: ModuleContext) { const pageBeforeNavigation = helper.getCurrentPage(); const buttonPage = createViewFromEntry(({ moduleName: buttonPageModuleName })); helper.navigateWithHistory(() => buttonPage); - global.__onLiveSync({ type: context.type, path: context.path }); + livesync({ type: context.type, path: context.path }); const topmostFrame = frame.topmost(); waitUntilLivesyncComplete(topmostFrame); TKUnit.assertTrue(topmostFrame.currentPage.getViewById("button").isLoaded, "Button page is NOT loaded!"); @@ -151,37 +163,15 @@ function _test_onLiveSync_ModuleReplace(context: { type, path }) { TKUnit.assertEqual(pageBeforeNavigation, pageAfterBackNavigation, "Pages are different!"); } -function _test_onLiveSync_ModuleReplace_Multiple(context: { type: string, path: string }[]) { - const pageBeforeNavigation = helper.getCurrentPage(); - const buttonPage = createViewFromEntry(({ moduleName: buttonPageModuleName })); - helper.navigateWithHistory(() => buttonPage); - - context.forEach(item => { - global.__onLiveSync(item); - }); - - const topmostFrame = frame.topmost(); - waitUntilLivesyncComplete(topmostFrame); - TKUnit.assertTrue(topmostFrame.currentPage.getViewById("button").isLoaded, "Button page is NOT loaded!"); - TKUnit.assertEqual(topmostFrame.backStack.length, 1, "Backstack is clean!"); - TKUnit.assertTrue(topmostFrame.canGoBack(), "Can NOT go back!"); - - helper.goBack(); - const pageAfterBackNavigation = helper.getCurrentPage(); - TKUnit.assertTrue(topmostFrame.currentPage.getViewById("label").isLoaded, "Label page is NOT loaded!"); - TKUnit.assertEqual(topmostFrame.backStack.length, 0, "Backstack is NOT clean!"); - TKUnit.assertEqual(pageBeforeNavigation, pageAfterBackNavigation, "Pages are different!"); -} - -function _test_onLiveSync_ModuleContext_TypeStyle(context: { type, path }) { +function _test_onLiveSync_ModuleContext_TypeStyle(styleModuleName: string, livesyncStyleFileName: string) { const pageBeforeNavigation = helper.getCurrentPage(); const buttonPage = createViewFromEntry(({ moduleName: buttonPageModuleName })); helper.navigateWithHistory(() => buttonPage); const pageBeforeLiveSync = helper.getCurrentPage(); - pageBeforeLiveSync._moduleName = "button-page"; + pageBeforeLiveSync._moduleName = styleModuleName; - global.__onLiveSync({ type: context.type, path: context.path }); + livesync({ type: "style", path: livesyncStyleFileName }); const topmostFrame = frame.topmost(); waitUntilLivesyncComplete(topmostFrame); @@ -197,6 +187,33 @@ function _test_onLiveSync_ModuleContext_TypeStyle(context: { type, path }) { TKUnit.assertTrue(pageAfterNavigationBack._cssState.isSelectorsLatestVersionApplied(), "Latest selectors version is NOT applied!"); } +function _test_onLiveSync_ModuleReplace_Multiple(context: ModuleContext[]) { + const pageBeforeNavigation = helper.getCurrentPage(); + const buttonPage = createViewFromEntry(({ moduleName: buttonPageModuleName })); + helper.navigateWithHistory(() => buttonPage); + + context.forEach(item => { + livesync(item); + }); + + const topmostFrame = frame.topmost(); + waitUntilLivesyncComplete(topmostFrame); + TKUnit.assertTrue(topmostFrame.currentPage.getViewById("button").isLoaded, "Button page is NOT loaded!"); + TKUnit.assertEqual(topmostFrame.backStack.length, 1, "Backstack is clean!"); + TKUnit.assertTrue(topmostFrame.canGoBack(), "Can NOT go back!"); + + helper.goBack(); + const pageAfterBackNavigation = helper.getCurrentPage(); + TKUnit.assertTrue(topmostFrame.currentPage.getViewById("label").isLoaded, "Label page is NOT loaded!"); + TKUnit.assertEqual(topmostFrame.backStack.length, 0, "Backstack is NOT clean!"); + TKUnit.assertEqual(pageBeforeNavigation, pageAfterBackNavigation, "Pages are different!"); +} + +function livesync(context: ModuleContext) { + const ls = (global).__hmrSyncBackup || global.__onLiveSync; + ls(context); +} + function waitUntilLivesyncComplete(frame: Frame) { TKUnit.waitUntilReady(() => frame.navigationQueueIsEmpty()); } diff --git a/tests/app/test-runner.ts b/tests/app/test-runner.ts index 53fd98d5e..a1ff7bc6e 100644 --- a/tests/app/test-runner.ts +++ b/tests/app/test-runner.ts @@ -280,9 +280,8 @@ allTests["SEARCH-BAR"] = searchBarTests; import * as navigationTests from "./navigation/navigation-tests"; allTests["NAVIGATION"] = navigationTests; -// TODO: These test should be run with --no-hrm -// import * as livesyncTests from "./livesync/livesync-tests"; -// allTests["LIVESYNC"] = livesyncTests; +import * as livesyncTests from "./livesync/livesync-tests"; +allTests["LIVESYNC"] = livesyncTests; import * as tabViewRootTests from "./ui/tab-view/tab-view-root-tests"; allTests["TAB-VIEW-ROOT"] = tabViewRootTests; diff --git a/tests/package.json b/tests/package.json index 8b771cfc8..b1a3a76c6 100644 --- a/tests/package.json +++ b/tests/package.json @@ -5,7 +5,7 @@ "version": "next" }, "tns-ios": { - "version": "6.0.0-2019-06-13-141312-01" + "version": "next" } }, "main": "app.js",