diff --git a/CHANGELOG.md b/CHANGELOG.md index 7dc5973a5..788d329cf 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,3 +1,36 @@ + +# [6.2.0](https://github.com/NativeScript/NativeScript/compare/6.1.2...6.2.0) (2019-10-24) + + +### Bug Fixes + +* **action-bar:** font icon support to NavigationButton ([#7842](https://github.com/NativeScript/NativeScript/issues/7842)) ([4991e6d](https://github.com/NativeScript/NativeScript/commit/4991e6d)) ([#7918](https://github.com/NativeScript/NativeScript/issues/7918)) ([bdb411f](https://github.com/NativeScript/NativeScript/commit/bdb411f)) +* **action-bar-ios13:** action bar items population ([#7965](https://github.com/NativeScript/NativeScript/issues/7965)) ([ce96dad](https://github.com/NativeScript/NativeScript/commit/ce96dad)) +* **application-settings-android:** possible uninitialized sharedPreferences variable usage ([#7813](https://github.com/NativeScript/NativeScript/issues/7813)) ([4f421ff](https://github.com/NativeScript/NativeScript/commit/4f421ff)) +* **css:** parse css selectors with escape sequences ([#7689](https://github.com/NativeScript/NativeScript/issues/7689)) ([5520213](https://github.com/NativeScript/NativeScript/commit/5520213)) +* xml parsing when input value is reported as object instead of string ([#7916](https://github.com/NativeScript/NativeScript/issues/7916)) ([a06a5f9](https://github.com/NativeScript/NativeScript/commit/a06a5f9)) +* **css-android:** restore elements' native features if offending css is removed while the app is running ([#7789](https://github.com/NativeScript/NativeScript/issues/7789)) ([2beae5b](https://github.com/NativeScript/NativeScript/commit/2beae5b)) +* **css-calc:** reduce_css_calc_1.default is not a function ([#7787](https://github.com/NativeScript/NativeScript/issues/7787)) ([03d1ff0](https://github.com/NativeScript/NativeScript/commit/03d1ff0)) +* **bottom-navigation-ios:** incorrect layout on orientation change ([#7927](https://github.com/NativeScript/NativeScript/issues/7927)) ([c9bfec1](https://github.com/NativeScript/NativeScript/commit/c9bfec1)) + + +### Features + +* **action-bar-android:** add properties to control the titleView content insets ([#7805](https://github.com/NativeScript/NativeScript/issues/7805)) ([57a8605](https://github.com/NativeScript/NativeScript/commit/57a8605)) +* **css:** add attribute scoped css without global refresh ([#7907](https://github.com/NativeScript/NativeScript/issues/7907)) ([f791a40](https://github.com/NativeScript/NativeScript/commit/f791a40)) +* **css:** Add HSL/HSLA support ([#7730](https://github.com/NativeScript/NativeScript/issues/7730)) ([3cabdde](https://github.com/NativeScript/NativeScript/commit/3cabdde)) +* **dark-mode:** add system appearance property, event and CSS classes ([#7887](https://github.com/NativeScript/NativeScript/issues/7887)) ([5c9a217](https://github.com/NativeScript/NativeScript/commit/5c9a217)) +* **file-system:** async read/write ([#7671](https://github.com/NativeScript/NativeScript/issues/7671)) ([2146ac9](https://github.com/NativeScript/NativeScript/commit/2146ac9)) +* **dark-mode-ios:** adapt dynamic system colors ([#7826](https://github.com/NativeScript/NativeScript/issues/7826)) ([f82cf08](https://github.com/NativeScript/NativeScript/commit/f82cf08)) +* **platform-declarations:** add android29 typings ([#7923](https://github.com/NativeScript/NativeScript/issues/7923)) ([dc65402](https://github.com/NativeScript/NativeScript/commit/dc65402)) +* **platform-declarations:** generate typings from iOS 13.0 SDK ([#7817](https://github.com/NativeScript/NativeScript/issues/7817)) ([3e8d635](https://github.com/NativeScript/NativeScript/commit/3e8d635)) +* **segmented-bar-ios:** add support for the new selectedSegmentTintColor property ([#7880](https://github.com/NativeScript/NativeScript/issues/7880)) ([ca7c46d](https://github.com/NativeScript/NativeScript/commit/ca7c46d)) +* overhaul and streamline Android page navigation transitions ([#7925](https://github.com/NativeScript/NativeScript/issues/7925)) ([08e23bc](https://github.com/NativeScript/NativeScript/commit/08e23bc)) +* Scoped Packages ([#7911](https://github.com/NativeScript/NativeScript/issues/7911)) ([cc97a16](https://github.com/NativeScript/NativeScript/commit/cc97a16)) +* update material components dependency to 92.3 ([#7936](https://github.com/NativeScript/NativeScript/issues/7936)) ([866c2b0](https://github.com/NativeScript/NativeScript/commit/866c2b0)) + + + ## [6.1.2](https://github.com/NativeScript/NativeScript/compare/6.1.1...6.1.2) (2019-10-15) diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md index 4e0f2a208..eff760821 100644 --- a/CONTRIBUTING.md +++ b/CONTRIBUTING.md @@ -245,7 +245,14 @@ cd .. 4. Execute [`npm version`](https://docs.npmjs.com/cli/version) to bump the version of `tns-core-modules`, tag the release and update the CHANGELOG.md. Don't forget to check the auto-generated CHANGELOG.md ``` -cd tns-core-modules +cd nativescript-core +npm --no-git-tag-version version [major|minor|patch] -m "release: cut the %s release" +cd .. + +5. Execute [`npm version`](https://docs.npmjs.com/cli/version) to bump the version of `tns-core-modules`, +tag the release and update the CHANGELOG.md. Don't forget to check the auto-generated CHANGELOG.md +``` +cd tns-core-modules-package npm --no-git-tag-version version [major|minor|patch] -m "release: cut the %s release" cd .. ``` @@ -254,7 +261,7 @@ Usually tns-core-modules-widgets should already have been released and we need t 7. Create release-branch with change log ``` -git checkout -b release-[release-version] +git checkout -b release-[version] ``` 7. Add changes @@ -263,9 +270,9 @@ git add changed-files git commit -m "release: cut the %s release" git push ``` -8. Create git tag +8. Create git tag as git tag 6.3.0 or use git UI ``` -git tag release-version +git tag [release-version] git push --tags ``` 9. Create a pull request. Be careful to base your branch on the correct branch diff --git a/build/generate-tns-compat.ts b/build/generate-tns-compat.ts index f2b4ea837..480034eb4 100644 --- a/build/generate-tns-compat.ts +++ b/build/generate-tns-compat.ts @@ -81,6 +81,13 @@ function processDefinitionFile(entry: EntryInfo) { } } +function processTypeScriptFile(entry: EntryInfo) { + const relativeFilePathNoExt = entry.path.replace(/\.ts$/, ""); + + createReExportFile(relativeFilePathNoExt, ".ts"); + addTestImport(relativeFilePathNoExt); +} + function createReExportFile(pathNoExt: string, ext: ".ts" | ".d.ts") { const outputFile = path.join(outputFolder, pathNoExt + ext); if (!fs.existsSync(outputFile)) { @@ -162,6 +169,11 @@ function generateExportsForPrivateModules() { // * .ts file with re-exports for the corresponding ts/js file (is such exists) await traverseInputDir(["*.d.ts"], processDefinitionFile); + console.log(" ------> GENERATING FILES FROM TYPESCRIPT"); + // Traverse all ts files which are not platform specific and create + // * .ts file with re-exports for the corresponding ts file + await traverseInputDir(["*(? { console.log("Setting frame root ..."); const btnResetFrameRootView = await this._driver.waitForElement(resetFrameRootView); - await btnResetFrameRootView.tap(); + await btnResetFrameRootView.click(); } resetLayoutRootView = async () => { console.log("Setting layout root ..."); const btnResetLayoutRootView = await this._driver.waitForElement(resetLayoutRootView); - await btnResetLayoutRootView.tap(); + await btnResetLayoutRootView.click(); } resetTabRootView = async () => { const btnResetTabRootView = await this._driver.waitForElement(resetTabRootView); - await btnResetTabRootView.tap(); + await btnResetTabRootView.click(); } loadedTabRootView = async () => { @@ -93,7 +93,7 @@ export class Screen { showModalFrame = async () => { const btnModalFrame = await this._driver.waitForElement(modalFrame); - await btnModalFrame.tap(); + await btnModalFrame.click(); } loadedModalFrame = async () => { @@ -104,7 +104,7 @@ export class Screen { showModalPage = async () => { const btnModalPage = await this._driver.waitForElement(modalPage); - await btnModalPage.tap(); + await btnModalPage.click(); } loadedModalPage = async () => { @@ -115,7 +115,7 @@ export class Screen { showModalLayout = async () => { const btnModalLayout = await this._driver.waitForElement(modalLayout); - await btnModalLayout.tap(); + await btnModalLayout.click(); } loadedModalLayout = async () => { @@ -124,7 +124,7 @@ export class Screen { showModalTabView = async () => { const btnModalTabView = await this._driver.waitForElement(modalTabView); - await btnModalTabView.tap(); + await btnModalTabView.click(); } loadedModalTabView = async () => { @@ -134,23 +134,23 @@ export class Screen { } navigateToSecondPage = async () => { - const btnNavToSecondPage = await this._driver.waitForElement(navToSecondPage); - await btnNavToSecondPage.tap(); + const btnNavToSecondPage = await this._driver.findElementByText(navToSecondPage); + await btnNavToSecondPage.click(); } showDialogConfirm = async () => { const btnShowDialogConfirm = await this._driver.waitForElement(showDialog); - await btnShowDialogConfirm.tap(); + await btnShowDialogConfirm.click(); } navigateToFirstItem = async () => { const itemModalFirst = await this._driver.waitForElement(modalFirst); - await itemModalFirst.tap(); + await itemModalFirst.click(); } navigateToSecondItem = async () => { const itemModalSecond = await this._driver.waitForElement(modalSecond); - await itemModalSecond.tap(); + await itemModalSecond.click(); } loadedConfirmDialog = async () => { @@ -179,17 +179,17 @@ export class Screen { closeDialog = async () => { const btnYesDialog = await this._driver.waitForElement(confirmDialog); - await btnYesDialog.tap(); + await btnYesDialog.click(); } goBackFromSecondPage = async () => { const btnGoBackFromSecondPage = await this._driver.waitForElement(goBack); - await btnGoBackFromSecondPage.tap(); + await btnGoBackFromSecondPage.click(); } showNestedModalFrame = async () => { const btnShowNestedModalFrame = await this._driver.waitForElement(showNestedModalFrame); - await btnShowNestedModalFrame.tap(); + await btnShowNestedModalFrame.click(); } loadedNestedModalFrame = async () => { @@ -200,12 +200,12 @@ export class Screen { closeModalNested = async () => { const btnCloseNestedModal = await this._driver.waitForElement(closeModalNested); - await btnCloseNestedModal.tap(); + await btnCloseNestedModal.click(); } showNestedModalPage = async () => { const btnShowNestedModalPage = await this._driver.waitForElement(showNestedModalPage); - await btnShowNestedModalPage.tap(); + await btnShowNestedModalPage.click(); } loadedNestedModalPage = async () => { @@ -216,7 +216,7 @@ export class Screen { closeModal = async () => { const btnCloseModal = await this._driver.waitForElement(closeModal); - await btnCloseModal.tap(); + await btnCloseModal.click(); } loadModalFrame = async () => { diff --git a/e2e/nested-frame-navigation/.vscode/launch.json b/e2e/nested-frame-navigation/.vscode/launch.json index bbd504901..71d650f2e 100644 --- a/e2e/nested-frame-navigation/.vscode/launch.json +++ b/e2e/nested-frame-navigation/.vscode/launch.json @@ -22,7 +22,7 @@ "4723", "-a", "--grep", - "layout-root" + "layout-root-with-multi-frames" ], "internalConsoleOptions": "openOnSessionStart" }, diff --git a/e2e/nested-frame-navigation/app/package.json b/e2e/nested-frame-navigation/app/package.json index 0d6fdb754..f94c1cdba 100644 --- a/e2e/nested-frame-navigation/app/package.json +++ b/e2e/nested-frame-navigation/app/package.json @@ -1,8 +1,9 @@ { "android": { - "v8Flags": "--expose_gc" + "v8Flags": "--expose_gc", + "markingMode": "none" }, "main": "app.js", "name": "tns-template-hello-world-ts", "version": "3.4.0" -} \ No newline at end of file +} diff --git a/e2e/nested-frame-navigation/e2e/bottom-navigation-root.e2e-spec.ts b/e2e/nested-frame-navigation/e2e/bottom-navigation-root.e2e-spec.ts deleted file mode 100644 index 0e732be16..000000000 --- a/e2e/nested-frame-navigation/e2e/bottom-navigation-root.e2e-spec.ts +++ /dev/null @@ -1,181 +0,0 @@ -import { AppiumDriver, createDriver, logWarn, nsCapabilities } from "nativescript-dev-appium"; - -import { Screen, playersData, teamsData } from "./screen"; -import * as shared from "./shared.e2e-spec"; -import { suspendTime, appSuspendResume, dontKeepActivities, transitions } from "./config"; -import { TabNavigationScreen } from "./tab-navigation-screen"; - -const roots = ["BottomNavigation"]; - -const rootType = "bottom-navigation-root"; -describe(rootType, async function () { - let driver: AppiumDriver; - let screen: Screen; - - before(async function () { - nsCapabilities.testReporter.context = this; - logWarn(`====== ${rootType} ========`); - driver = await createDriver(); - screen = new TabNavigationScreen(driver); - if (dontKeepActivities) { - await driver.setDontKeepActivities(true); - } - - driver.defaultWaitTime = 8000; - }); - - after(async function () { - if (dontKeepActivities) { - await driver.setDontKeepActivities(false); - } - await driver.quit(); - console.log("Quit driver!"); - }); - - afterEach(async function () { - if (this.currentTest.state === "failed") { - await driver.logTestArtifacts(this.currentTest.title); - } - }); - - for (let index = 0; index < roots.length; index++) { - const root = roots[index]; - describe(`${rootType}-${root}-scenarios:`, async function () { - - before(async function () { - nsCapabilities.testReporter.context = this; - }); - - for (let index = 0; index < transitions.length; index++) { - const transition = transitions[index]; - - const playerOne = playersData[`playerOne${transition}`]; - const playerTwo = playersData[`playerTwo${transition}`]; - const teamOne = teamsData[`teamOne${transition}`]; - const teamTwo = teamsData[`teamTwo${transition}`]; - - describe(`${rootType}-${root}-transition-${transition}-scenarios:`, async function () { - - before(async function () { - nsCapabilities.testReporter.context = this; - - if (transition === "Flip" && - driver.isAndroid && parseInt(driver.platformVersion) === 19) { - // TODO: known issue https://github.com/NativeScript/NativeScript/issues/6798 - console.log("skipping flip transition tests on api level 19"); - this.skip(); - } - }); - - it("loaded home page", async function () { - await screen.loadedHome(); - }); - - it(`loaded ${root} root with frames`, async function () { - await screen[`navigateTo${root}RootWithFrames`](); - await screen[`loaded${root}RootWithFrames`](); - }); - - it("loaded players list", async function () { - await screen.loadedPlayersList(); - }); - - it("loaded player details and go back twice", async function () { - await shared.testPlayerNavigated(playerTwo, screen); - - if (appSuspendResume) { - await driver.backgroundApp(suspendTime); - await driver.waitForElement(playerTwo.name); // wait for player - } - - await shared.testPlayerNavigatedBack(screen, driver); - - if (appSuspendResume) { - await driver.backgroundApp(suspendTime); - await driver.waitForElement(playerOne.name); // wait for players list - } - - await shared.testPlayerNavigated(playerTwo, screen); - await shared.testPlayerNavigatedBack(screen, driver); - }); - - it("toggle teams tab", async function () { - await screen.toggleTeamsTab(); - - if (appSuspendResume) { - await driver.backgroundApp(suspendTime); - await driver.waitForElement(teamOne.name); // wait for teams list - } - }); - - it("loaded teams list", async function () { - await screen.loadedTeamsList(); - }); - - it("mix player and team list actions and go back", async function () { - await screen.togglePlayersTab(); - - if (appSuspendResume) { - await driver.backgroundApp(suspendTime); - await driver.waitForElement(playerOne.name); // wait for players list - } - - await screen.loadedPlayersList(); - - await shared.testPlayerNavigated(playerTwo, screen); - - if (driver.isIOS) { - if (appSuspendResume) { - await driver.backgroundApp(suspendTime); - await driver.waitForElement(playerTwo.name); // wait for player - } - } - - await screen.toggleTeamsTab(); - - if (driver.isIOS) { - // TODO: run in background from appium breaks the test. Investigate the issue, once with the app and with appium - if (appSuspendResume) { - await driver.backgroundApp(suspendTime); - await driver.waitForElement(teamOne.name); // wait for teams list - } - } - - await screen.loadedTeamsList(); - - await shared.testTeamNavigated(teamTwo, screen); - - if (appSuspendResume) { - await driver.backgroundApp(suspendTime); - await driver.waitForElement(teamTwo.name); // wait for team - } - - await screen.togglePlayersTab(); - - if (appSuspendResume) { - await driver.backgroundApp(suspendTime); - await driver.waitForElement(playerTwo.name); // wait for player - } - - await screen.loadedPlayerDetails(playerTwo); - - await screen.toggleTeamsTab(); - - await screen.goBackToTeamsList(); - await screen.loadedTeamsList(); - - await screen.togglePlayersTab(); - - await screen.goBackToPlayersList(); - await screen.loadedPlayersList(); - }); - - it("loaded home page again", async function () { - await screen.resetToHome(); - await screen.loadedHome(); - }); - }); - } - }); - } -}); diff --git a/e2e/nested-frame-navigation/e2e/config.ts b/e2e/nested-frame-navigation/e2e/config.ts index 9f2147508..87200f16a 100644 --- a/e2e/nested-frame-navigation/e2e/config.ts +++ b/e2e/nested-frame-navigation/e2e/config.ts @@ -1,4 +1,4 @@ export const suspendTime = 1; export const appSuspendResume = true; -export const dontKeepActivities = true; -export const transitions = ["Default", "None", "Slide", "Flip"]; +export const dontKeepActivities = process.env["DONT_KEEP_ACTIVITIES"] === "true" ? true : false; +export const allTransitions = ["Default", "None", "Slide", "Flip"]; diff --git a/e2e/nested-frame-navigation/e2e/frame-bottom-navigation-root.e2e-spec.ts b/e2e/nested-frame-navigation/e2e/frame-bottom-navigation-root.e2e-spec.ts deleted file mode 100644 index 526fcc917..000000000 --- a/e2e/nested-frame-navigation/e2e/frame-bottom-navigation-root.e2e-spec.ts +++ /dev/null @@ -1,265 +0,0 @@ -import { AppiumDriver, createDriver, logWarn, nsCapabilities } from "nativescript-dev-appium"; - -import { Screen, playersData, somePage, teamsData, driverDefaultWaitTime, Item } from "./screen"; -import * as shared from "./shared.e2e-spec"; -import { suspendTime, appSuspendResume, dontKeepActivities, transitions } from "./config"; -import { TabNavigationScreen } from "./tab-navigation-screen"; - -const roots = ["BottomNavigation"]; - -const rootType = "frame-bottom-navigation-root"; -describe(rootType, async function () { - let driver: AppiumDriver; - let screen: Screen; - - before(async function () { - nsCapabilities.testReporter.context = this; - logWarn(`====== ${rootType} ========`); - driver = await createDriver(); - screen = new TabNavigationScreen(driver); - if (dontKeepActivities) { - await driver.setDontKeepActivities(true); - } - - driver.defaultWaitTime = driverDefaultWaitTime; - }); - - after(async function () { - if (dontKeepActivities) { - await driver.setDontKeepActivities(false); - } - await driver.quit(); - console.log("Quit driver!"); - }); - - afterEach(async function () { - if (this.currentTest.state === "failed") { - await driver.logTestArtifacts(this.currentTest.title); - } - }); - - for (let index = 0; index < roots.length; index++) { - const root = roots[index]; - - describe(`${rootType}-${root} scenarios:`, async function () { - logWarn(`===== Root: ${root}`); - for (let trIndex = 0; trIndex < transitions.length; trIndex++) { - const transition = transitions[trIndex]; - const playerOne: Item = playersData[`playerOne${transition}`]; - const playerTwo: Item = playersData[`playerTwo${transition}`]; - const teamOne: Item = teamsData[`teamOne${transition}`]; - const teamTwo: Item = teamsData[`teamTwo${transition}`]; - - describe(`${rootType}-${root}-transition-${transition}-scenarios:`, async function () { - - before(async function () { - nsCapabilities.testReporter.context = this; - logWarn(`========= ${root}-${transition} =========`); - - if (transition === "Flip" && - driver.isAndroid && parseInt(driver.platformVersion) === 19) { - // TODO: known issue https://github.com/NativeScript/NativeScript/issues/6798 - console.log("skipping flip transition tests on api level 19"); - this.skip(); - } - }); - - it("loaded home page", async function () { - await screen.loadedHome(); - }); - - it(`loaded frame ${root} root with nested frames`, async function () { - await screen[`navigateToPage${root}WithFrames`](); - await screen[`loadedPage${root}WithFrames`](); - }); - - it("loaded players list", async function () { - await screen.loadedPlayersList(); - }); - - it("loaded player details and go back twice", async function () { - await shared.testPlayerNavigated(playerTwo, screen); - - if (appSuspendResume) { - await driver.backgroundApp(suspendTime); - await screen.loadedElement(playerTwo.name); // wait for player - } - - await shared.testPlayerNavigatedBack(screen, driver); - - if (appSuspendResume) { - await driver.backgroundApp(suspendTime); - await driver.waitForElement(playerOne.name); // wait for players list - } - - await shared.testPlayerNavigated(playerTwo, screen); - await shared.testPlayerNavigatedBack(screen, driver); - }); - - it("navigate parent frame and go back", async function () { - await shared[`testSomePageNavigated${transition}`](screen); - - if (appSuspendResume) { - await driver.backgroundApp(suspendTime); - await screen.loadedElement(somePage); // wait for some page - } - - if (driver.isAndroid) { - await driver.navBack(); - } else { - await screen.goBackFromSomePage(); - } - - await screen.loadedPlayersList(); - }); - - it("loaded player details and navigate parent frame and go back", async function () { - await shared.testPlayerNavigated(playerTwo, screen); - - if (appSuspendResume) { - await driver.backgroundApp(suspendTime); - await screen.loadedElement(playerTwo.name); // wait for player - } - - await shared[`testSomePageNavigated${transition}`](screen); - - if (appSuspendResume) { - await driver.backgroundApp(suspendTime); - await screen.loadedElement(somePage); // wait for some page - } - - if (driver.isAndroid) { - await driver.navBack(); - } else { - await screen.goBackFromSomePage(); - } - - await screen.loadedPlayerDetails(playerTwo); - - await screen.goBackToPlayersList(); - await screen.loadedPlayersList(); - }); - - it("toggle teams tab", async function () { - await screen.toggleTeamsTab(); - - if (appSuspendResume) { - await driver.backgroundApp(suspendTime); - await screen.loadedElement(teamOne.name); // wait for team - } - }); - - it("loaded teams list", async function () { - await screen.loadedTeamsList(); - }); - - it("mix player and team list actions and go back", async function () { - await screen.togglePlayersTab(); - - if (appSuspendResume) { - await driver.backgroundApp(suspendTime); - await screen.loadedElement(playerOne.name); // wait for players list - } - - await screen.loadedPlayersList(); - - await shared.testPlayerNavigated(playerTwo, screen); - - if (appSuspendResume) { - await driver.backgroundApp(suspendTime); - await screen.loadedElement(playerTwo.name); // wait for player - } - - await screen.loadedPlayerDetails(playerTwo); - - await shared[`testSomePageNavigated${transition}`](screen); - - if (appSuspendResume) { - await driver.backgroundApp(suspendTime); - await screen.loadedElement(somePage); // wait for some page - } - - if (driver.isAndroid) { - await driver.navBack(); - } else { - await screen.goBackFromSomePage(); - } - - if (appSuspendResume) { - // This sleeps prevent test to fail - await driver.sleep(1000); - await driver.backgroundApp(suspendTime); - await screen.loadedElement(playerTwo.name); // wait for player - } - - await screen.loadedPlayerDetails(playerTwo); - - await screen.toggleTeamsTab(); - - if (appSuspendResume) { - await driver.backgroundApp(suspendTime); - await screen.loadedElement(teamOne.name); // wait for teams list - } - - await screen.loadedTeamsList(); - - await shared.testTeamNavigated(teamTwo, screen); - - if (appSuspendResume) { - await screen.loadedElement(teamTwo.name); // wait for team - await driver.backgroundApp(suspendTime); - await screen.loadedElement(teamTwo.name); // wait for team - } - - await screen.loadedTeamDetails(teamTwo); - - await shared[`testSomePageNavigated${transition}`](screen); - - if (appSuspendResume) { - await driver.backgroundApp(suspendTime); - await screen.loadedElement(somePage); // wait for some page - } - - if (driver.isAndroid) { - await driver.navBack(); - } else { - await screen.goBackFromSomePage(); - } - - if (appSuspendResume) { - await screen.loadedElement(teamTwo.name); // wait for team - await driver.backgroundApp(suspendTime); - await screen.loadedElement(teamTwo.name); // wait for team - } - - await screen.loadedTeamDetails(teamTwo); - - await screen.togglePlayersTab(); - - if (appSuspendResume) { - await driver.backgroundApp(suspendTime); - await screen.loadedElement(playerTwo.name); // wait for player - } - - await screen.loadedPlayerDetails(playerTwo); - - await screen.toggleTeamsTab(); - - await screen.goBackToTeamsList(); - await screen.loadedTeamsList(); - - await screen.togglePlayersTab(); - - await screen.goBackToPlayersList(); - await screen.loadedPlayersList(); - }); - - it("loaded home page again", async function () { - await screen[`goBackFrom${root}Page`](); - await screen.loadedHome(); - }); - }); - } - }); - } -}); \ No newline at end of file diff --git a/e2e/nested-frame-navigation/e2e/frame-root/bottom-navigation.e2e-spec.ts b/e2e/nested-frame-navigation/e2e/frame-root/bottom-navigation.e2e-spec.ts new file mode 100644 index 000000000..2c339f257 --- /dev/null +++ b/e2e/nested-frame-navigation/e2e/frame-root/bottom-navigation.e2e-spec.ts @@ -0,0 +1,262 @@ +import { AppiumDriver, createDriver, logWarn, nsCapabilities, logInfo } from "nativescript-dev-appium"; + +import { Screen, playersData, somePage, teamsData, driverDefaultWaitTime, Item } from "../screens/screen"; +import * as shared from "../screens/shared"; +import { suspendTime, appSuspendResume, dontKeepActivities, allTransitions } from "../config"; +import { TabNavigationScreen } from "../screens/tab-navigation-screen"; + +describe("frame-root-with-bottom-navigation", async function () { + let driver: AppiumDriver; + let screen: Screen; + + let transitions = [...allTransitions]; + + before(async function () { + nsCapabilities.testReporter.context = this; + logWarn(`====== frame-root-with-bottom-navigation ========`); + driver = await createDriver(); + await driver.restartApp(); + screen = new TabNavigationScreen(driver); + await driver.setDontKeepActivities(dontKeepActivities); + driver.defaultWaitTime = driverDefaultWaitTime; + }); + + after(async function () { + if (dontKeepActivities) { + await driver.setDontKeepActivities(false); + } + await driver.quit(); + console.log("Quit driver!"); + }); + + afterEach(async function () { + if (this.currentTest.state === "failed") { + await driver.logTestArtifacts(this.currentTest.title); + } + }); + + describe(`frame-root-with-bottom-navigation scenarios:`, async function () { + for (let trIndex = 0; trIndex < transitions.length; trIndex++) { + const transition = transitions[trIndex]; + const playerOne: Item = playersData[`playerOne${transition}`]; + const playerTwo: Item = playersData[`playerTwo${transition}`]; + const teamOne: Item = teamsData[`teamOne${transition}`]; + const teamTwo: Item = teamsData[`teamTwo${transition}`]; + + describe(`frame-root-with-bottom-navigation-transition-${transition}-scenario:`, async function () { + + before(async function () { + nsCapabilities.testReporter.context = this; + if (shared.isApiLevel19(driver) && (transition === "None" || transition === "Flip")) { + // TODO: known issue https://github.com/NativeScript/NativeScript/issues/6798 + logWarn("Skipping flip or none transition tests on api level 19"); + this.skip(); + } else { + logWarn(`${trIndex++}. BottomNavigation-${transition} =========`); + } + }); + + it("loaded home page", async function () { + await screen.loadedHome(); + }); + + it(`loaded frame root with bottom-navigation`, async function () { + await screen[`navigateToPageBottomNavigationWithFrames`](); + await screen[`loadedPageBottomNavigationWithFrames`](); + }); + + it("loaded players list", async function () { + await screen.loadedPlayersList(); + }); + + it("loaded player details and go back twice", async function () { + await shared.testPlayerNavigated(playerTwo, screen); + + if (appSuspendResume) { + await driver.backgroundApp(suspendTime); + await screen.loadedElement(playerTwo.name); // wait for player + } + + await shared.testPlayerNavigatedBack(screen, driver); + + if (appSuspendResume) { + await driver.backgroundApp(suspendTime); + await driver.waitForElement(playerOne.name); // wait for players list + } + + await shared.testPlayerNavigated(playerTwo, screen); + await shared.testPlayerNavigatedBack(screen, driver); + }); + + it("navigate parent frame and go back", async function () { + await shared[`testSomePageNavigated${transition}`](screen); + + if (appSuspendResume) { + await driver.backgroundApp(suspendTime); + await screen.loadedElement(somePage); // wait for some page + } + + if (driver.isAndroid) { + await driver.navBack(); + } else { + await screen.goBackFromSomePage(); + } + + await screen.loadedPlayersList(); + }); + + it("loaded player details and navigate parent frame and go back", async function () { + await shared.testPlayerNavigated(playerTwo, screen); + + if (!shared.preventApplicationCrashCausedByAutomation(driver)) { + if (appSuspendResume) { + await driver.backgroundApp(suspendTime); + await screen.loadedElement(playerTwo.name); // wait for player + } + } + + await shared[`testSomePageNavigated${transition}`](screen); + + if (appSuspendResume) { + await driver.backgroundApp(suspendTime); + await screen.loadedElement(somePage); // wait for some page + } + + if (driver.isAndroid) { + await driver.navBack(); + } else { + await screen.goBackFromSomePage(); + } + + await screen.loadedPlayerDetails(playerTwo); + + await screen.goBackToPlayersList(); + await screen.loadedPlayersList(); + }); + + it("toggle teams tab", async function () { + await screen.toggleTeamsTab(); + + if (appSuspendResume) { + await driver.backgroundApp(suspendTime); + await screen.loadedElement(teamOne.name); // wait for team + } + }); + + it("loaded teams list", async function () { + await screen.loadedTeamsList(); + }); + + it("mix player and team list actions and go back", async function () { + await screen.togglePlayersTab(); + + if (appSuspendResume) { + await driver.backgroundApp(suspendTime); + await screen.loadedElement(playerOne.name); // wait for players list + } + + await screen.loadedPlayersList(); + + await shared.testPlayerNavigated(playerTwo, screen); + + if (!shared.preventApplicationCrashCausedByAutomation(driver)) { + if (appSuspendResume) { + await driver.backgroundApp(suspendTime); + await screen.loadedElement(playerTwo.name); // wait for player + } + } + + await screen.loadedPlayerDetails(playerTwo); + + await shared[`testSomePageNavigated${transition}`](screen); + + if (appSuspendResume) { + await driver.backgroundApp(suspendTime); + await screen.loadedElement(somePage); // wait for some page + } + + if (driver.isAndroid) { + await driver.navBack(); + } else { + await screen.goBackFromSomePage(); + } + + if (appSuspendResume) { + // This sleeps prevent test to fail + await driver.sleep(1000); + await driver.backgroundApp(suspendTime); + await screen.loadedElement(playerTwo.name); // wait for player + } + + await screen.loadedPlayerDetails(playerTwo); + + await screen.toggleTeamsTab(); + + if (appSuspendResume) { + await driver.backgroundApp(suspendTime); + await screen.loadedElement(teamOne.name); // wait for teams list + } + + await screen.loadedTeamsList(); + + await shared.testTeamNavigated(teamTwo, screen); + + if (!shared.preventApplicationCrashCausedByAutomation(driver)) { + if (appSuspendResume) { + await screen.loadedElement(teamTwo.name); // wait for team + await driver.backgroundApp(suspendTime); + await screen.loadedElement(teamTwo.name); // wait for team + } + } + + await screen.loadedTeamDetails(teamTwo); + + await shared[`testSomePageNavigated${transition}`](screen); + + if (appSuspendResume) { + await driver.backgroundApp(suspendTime); + await screen.loadedElement(somePage); // wait for some page + } + + if (driver.isAndroid) { + await driver.navBack(); + } else { + await screen.goBackFromSomePage(); + } + + if (appSuspendResume) { + await screen.loadedElement(teamTwo.name); // wait for team + await driver.backgroundApp(suspendTime); + await screen.loadedElement(teamTwo.name); // wait for team + } + + await screen.loadedTeamDetails(teamTwo); + + await screen.togglePlayersTab(); + + if (appSuspendResume) { + await driver.backgroundApp(suspendTime); + await screen.loadedElement(playerTwo.name); // wait for player + } + + await screen.loadedPlayerDetails(playerTwo); + + await screen.toggleTeamsTab(); + + await screen.goBackToTeamsList(); + await screen.loadedTeamsList(); + + await screen.togglePlayersTab(); + + await screen.goBackToPlayersList(); + await screen.loadedPlayersList(); + }); + + it("loaded home page again", async function () { + await screen[`goBackFromBottomNavigationPage`](); + await screen.loadedHome(); + }); + }); + } + }); +}); \ No newline at end of file diff --git a/e2e/nested-frame-navigation/e2e/frame-root.e2e-spec.ts b/e2e/nested-frame-navigation/e2e/frame-root/multi-frames.e2e-spec.ts similarity index 51% rename from e2e/nested-frame-navigation/e2e/frame-root.e2e-spec.ts rename to e2e/nested-frame-navigation/e2e/frame-root/multi-frames.e2e-spec.ts index 0936ffa07..b917caf40 100644 --- a/e2e/nested-frame-navigation/e2e/frame-root.e2e-spec.ts +++ b/e2e/nested-frame-navigation/e2e/frame-root/multi-frames.e2e-spec.ts @@ -1,23 +1,22 @@ + import { AppiumDriver, createDriver, logWarn, nsCapabilities } from "nativescript-dev-appium"; -import { Screen, playersData, somePage, teamsData, driverDefaultWaitTime, Item, stillOtherPage } from "./screen"; -import { suspendTime, appSuspendResume, dontKeepActivities, transitions } from "./config"; -import * as shared from "./shared.e2e-spec"; -import { TabNavigationScreen } from "./tab-navigation-screen"; +import { Screen, playersData, teamsData, driverDefaultWaitTime, Item } from "../screens/screen"; +import { suspendTime, appSuspendResume, dontKeepActivities, allTransitions } from "../config"; +import * as shared from "../screens/shared"; +import { TabNavigationScreen } from "../screens/tab-navigation-screen"; -const rootType = "frame-root"; -describe(rootType, async function () { +describe("frame-root-with-multi-frames", async function () { let driver: AppiumDriver; let screen: Screen; + let transitions = [...allTransitions]; before(async function () { nsCapabilities.testReporter.context = this; driver = await createDriver(); + await driver.restartApp(); screen = new TabNavigationScreen(driver); - if (dontKeepActivities) { - await driver.setDontKeepActivities(true); - } - + await driver.setDontKeepActivities(dontKeepActivities); driver.defaultWaitTime = driverDefaultWaitTime; }); @@ -43,16 +42,15 @@ describe(rootType, async function () { const teamOne: Item = teamsData[`teamOne${transition}`]; const teamTwo: Item = teamsData[`teamTwo${transition}`]; - describe(`${rootType}-transition-${transition}-scenarios:`, async function () { + describe(`frame-root-with-multi-frames-transition-${transition}-scenario:`, async function () { before(async function () { nsCapabilities.testReporter.context = this; - logWarn(`==== Transition ${transition}`); - - if (transition === "Flip" && - driver.isAndroid && parseInt(driver.platformVersion) === 19) { + if (shared.isApiLevel19(driver) && (transition === "None" || transition === "Flip")) { // TODO: known issue https://github.com/NativeScript/NativeScript/issues/6798 - console.log("skipping flip transition tests on api level 19"); + logWarn("Skipping flip or none transition tests on api level 19"); this.skip(); + } else { + logWarn(`==== ${index}. Transition ${transition}`); } }); @@ -60,88 +58,6 @@ describe(rootType, async function () { await screen.loadedHome(); }); - it("loaded frame root with nested frame", async function () { - await screen.navigateToPageWithFrame(); - await screen.loadedPageWithFrame(); - }); - - it("loaded players list", async function () { - await screen.loadedPlayersList(); - }); - - it("loaded player details and go back twice", async function () { - await shared.testPlayerNavigated(playerTwo, screen); - - if (appSuspendResume) { - await driver.backgroundApp(suspendTime); - await screen.loadedElement(playerTwo.name); - } - - await shared.testPlayerNavigatedBack(screen, driver); - - if (appSuspendResume) { - await driver.backgroundApp(suspendTime); - await screen.loadedElement(playerOne.name); - } - - await shared.testPlayerNavigated(playerTwo, screen); - await shared.testPlayerNavigatedBack(screen, driver); - }); - - it("navigate parent frame and go back", async function () { - await shared[`testSomePageNavigated${transition}`](screen); - - if (appSuspendResume) { - await driver.backgroundApp(suspendTime); - await screen.loadedSomePage(); // wait for some page - } - - if (driver.isAndroid) { - await driver.navBack(); // some page back navigation - } else { - await screen.goBackFromSomePage(); - } - - await screen.loadedPlayersList(); - }); - - it("loaded player details and navigate parent frame and go back", async function () { - await shared.testPlayerNavigated(playerTwo, screen); - - if (appSuspendResume) { - await driver.backgroundApp(suspendTime); - await screen.loadedElement(playerTwo.name); - } - - await shared[`testSomePageNavigated${transition}`](screen); - - if (appSuspendResume) { - await driver.backgroundApp(suspendTime); - await screen.loadedSomePage(); // wait for some page - } - - if (driver.isAndroid) { - await driver.navBack(); // some page back navigation - } else { - await screen.goBackFromSomePage(); - } - - await screen.loadedPlayerDetails(playerTwo); - - await screen.goBackToPlayersList(); - await screen.loadedPlayersList(); - }); - - it("loaded home page again", async function () { - await screen.goBackFromFrameHome(); - await screen.loadedHome(); - - if (appSuspendResume) { - await driver.backgroundApp(suspendTime); - await screen.loadedHome(); - } - }); - it("loaded frame root with multi nested frames", async function () { await screen.navigateToPageWithMultiFrame(); await screen.loadedPageWithMultiFrame(); @@ -301,101 +217,4 @@ describe(rootType, async function () { }); }); } - - describe("frame to nested frame with non-default transition", async function () { - const playerOne = playersData["playerOneSlide"]; - - before(async function () { - nsCapabilities.testReporter.context = this; - }); - - it("loaded home page", async function () { - await screen.loadedHome(); - }); - - it("loaded frame root with nested frame non-default transition", async function () { - await screen.navigateToPageWithFrameNonDefaultTransition(); - await screen.loadedPageWithFrame(); - }); - - it("go back to home page again", async function () { - if (appSuspendResume) { - await driver.backgroundApp(suspendTime); - await driver.waitForElement(playerOne.name); // wait for players list - } - - await screen.goBackFromFrameHome(); - await screen.loadedHome(); - }); - }); - - describe("nested frame to frame with non-default transition", async function () { - - before(async function () { - nsCapabilities.testReporter.context = this; - }); - - it("loaded home page", async function () { - await screen.loadedHome(); - }); - - it("loaded frame root with nested frame", async function () { - await screen.navigateToPageWithFrame(); - await screen.loadedPageWithFrame(); - }); - - it("navigate to some page with slide transition", async function () { - shared.testSomePageNavigatedSlide(screen); - - if (appSuspendResume) { - await driver.backgroundApp(suspendTime); - await driver.waitForElement(somePage); // wait for some page - } - }); - - it("navigate to still other page and go back twice", async function () { - shared.testStillOtherPageNavigatedSlide(screen); - - if (appSuspendResume) { - await driver.backgroundApp(suspendTime); - await driver.waitForElement(stillOtherPage); // wait for still other page - } - - if (driver.isAndroid) { - await driver.navBack(); // some page back navigation - } else { - await screen.goBackFromStillOtherPage(); - } - - await screen.loadedSomePage(); - - if (appSuspendResume) { - await driver.backgroundApp(suspendTime); - await driver.waitForElement(somePage); // wait for some page - } - - shared.testStillOtherPageNavigatedSlide(screen); - - if (appSuspendResume) { - await driver.backgroundApp(suspendTime); - await driver.waitForElement(stillOtherPage); // wait for still other page - } - - if (driver.isAndroid) { - await driver.navBack(); // some page back navigation - } else { - await screen.goBackFromStillOtherPage(); - } - - await screen.loadedSomePage(); - }); - - it("go back to home page again", async function () { - await screen.goBackFromSomePage(); - - await screen.goBackFromFrameHome(); - - await screen.loadedHome(); - }); - }); }); diff --git a/e2e/nested-frame-navigation/e2e/frame-root/single-frame.e2e-spec.ts b/e2e/nested-frame-navigation/e2e/frame-root/single-frame.e2e-spec.ts new file mode 100644 index 000000000..950ac6f26 --- /dev/null +++ b/e2e/nested-frame-navigation/e2e/frame-root/single-frame.e2e-spec.ts @@ -0,0 +1,233 @@ +import { AppiumDriver, createDriver, logWarn, nsCapabilities } from "nativescript-dev-appium"; + +import { Screen, playersData, somePage, driverDefaultWaitTime, Item, stillOtherPage } from "../screens/screen"; +import { suspendTime, appSuspendResume, dontKeepActivities, allTransitions } from "../config"; +import * as shared from "../screens/shared"; +import { TabNavigationScreen } from "../screens/tab-navigation-screen"; + +describe("frame-root-with-single-frame", async function () { + let driver: AppiumDriver; + let screen: Screen; + let transitions = [...allTransitions]; + + before(async function () { + nsCapabilities.testReporter.context = this; + driver = await createDriver(); + await driver.restartApp(); + screen = new TabNavigationScreen(driver); + await driver.setDontKeepActivities(dontKeepActivities); + driver.defaultWaitTime = driverDefaultWaitTime; + }); + + after(async function () { + if (dontKeepActivities) { + await driver.setDontKeepActivities(false); + } + await driver.quit(); + console.log("Quit driver!"); + }); + + afterEach(async function () { + if (this.currentTest.state === "failed") { + await driver.logTestArtifacts(this.currentTest.title); + } + }); + + for (let index = 0; index < transitions.length; index++) { + const transition = transitions[index]; + + const playerOne: Item = playersData[`playerOne${transition}`]; + const playerTwo: Item = playersData[`playerTwo${transition}`]; + + describe(`frame-root-with-single-frame-transition-${transition}-scenario:`, async function () { + before(async function () { + nsCapabilities.testReporter.context = this; + if (shared.isApiLevel19(driver) && (transition === "None" || transition === "Flip")) { + // TODO: known issue https://github.com/NativeScript/NativeScript/issues/6798 + logWarn("Skipping flip or none transition tests on api level 19"); + this.skip(); + } else { + logWarn(`==== ${index}. Transition ${transition}`); + } + }); + + it("loaded home page", async function () { + await screen.loadedHome(); + }); + + it("loaded frame root with nested frame", async function () { + await screen.navigateToPageWithFrame(); + await screen.loadedPageWithFrame(); + }); + + it("loaded players list", async function () { + await screen.loadedPlayersList(); + }); + + it("loaded player details and go back twice", async function () { + await shared.testPlayerNavigated(playerTwo, screen); + + if (appSuspendResume) { + await driver.backgroundApp(suspendTime); + await screen.loadedElement(playerTwo.name); + } + + await shared.testPlayerNavigatedBack(screen, driver); + + if (appSuspendResume) { + await driver.backgroundApp(suspendTime); + await screen.loadedElement(playerOne.name); + } + + await shared.testPlayerNavigated(playerTwo, screen); + await shared.testPlayerNavigatedBack(screen, driver); + }); + + it("navigate parent frame and go back", async function () { + await shared[`testSomePageNavigated${transition}`](screen); + + if (appSuspendResume) { + await driver.backgroundApp(suspendTime); + await screen.loadedSomePage(); // wait for some page + } + + if (driver.isAndroid) { + await driver.navBack(); // some page back navigation + } else { + await screen.goBackFromSomePage(); + } + + await screen.loadedPlayersList(); + }); + + it("loaded player details and navigate parent frame and go back", async function () { + await shared.testPlayerNavigated(playerTwo, screen); + + if (appSuspendResume) { + await driver.backgroundApp(suspendTime); + await screen.loadedElement(playerTwo.name); + } + + await shared[`testSomePageNavigated${transition}`](screen); + + if (appSuspendResume) { + await driver.backgroundApp(suspendTime); + await screen.loadedSomePage(); // wait for some page + } + + if (driver.isAndroid) { + await driver.navBack(); // some page back navigation + } else { + await screen.goBackFromSomePage(); + } + + await screen.loadedPlayerDetails(playerTwo); + + await screen.goBackToPlayersList(); + await screen.loadedPlayersList(); + }); + + it("loaded home page again", async function () { + await screen.goBackFromFrameHome(); + await screen.loadedHome(); + }); + }); + } + + describe("frame to nested frame with non-default transition", async function () { + const playerOne = playersData["playerOneSlide"]; + + before(async function () { + nsCapabilities.testReporter.context = this; + }); + + it("loaded home page", async function () { + await screen.loadedHome(); + }); + + it("loaded frame root with nested frame non-default transition", async function () { + await screen.navigateToPageWithFrameNonDefaultTransition(); + await screen.loadedPageWithFrame(); + }); + + it("go back to home page again", async function () { + if (appSuspendResume) { + await driver.backgroundApp(suspendTime); + await driver.waitForElement(playerOne.name); // wait for players list + } + + await screen.goBackFromFrameHome(); + await screen.loadedHome(); + }); + }); + + describe("nested frame to frame with non-default transition", async function () { + + before(async function () { + nsCapabilities.testReporter.context = this; + }); + + it("loaded home page", async function () { + await screen.loadedHome(); + }); + + it("loaded frame root with nested frame", async function () { + await screen.navigateToPageWithFrame(); + await screen.loadedPageWithFrame(); + }); + + it("navigate to some page with slide transition", async function () { + shared.testSomePageNavigatedSlide(screen); + + if (appSuspendResume) { + await driver.backgroundApp(suspendTime); + await driver.waitForElement(somePage); // wait for some page + } + }); + + it("navigate to still other page and go back twice", async function () { + shared.testStillOtherPageNavigatedSlide(screen); + + if (appSuspendResume) { + await driver.backgroundApp(suspendTime); + await driver.waitForElement(stillOtherPage); // wait for still other page + } + + if (driver.isAndroid) { + await driver.navBack(); // some page back navigation + } else { + await screen.goBackFromStillOtherPage(); + } + + await screen.loadedSomePage(); + + if (appSuspendResume) { + await driver.backgroundApp(suspendTime); + await driver.waitForElement(somePage); // wait for some page + } + + shared.testStillOtherPageNavigatedSlide(screen); + + if (appSuspendResume) { + await driver.backgroundApp(suspendTime); + await driver.waitForElement(stillOtherPage); // wait for still other page + } + + if (driver.isAndroid) { + await driver.navBack(); // some page back navigation + } else { + await screen.goBackFromStillOtherPage(); + } + + await screen.loadedSomePage(); + }); + + it("go back to home page again", async function () { + await screen.goBackFromSomePage(); + + await screen.goBackFromFrameHome(); + + await screen.loadedHome(); + }); + }); +}); diff --git a/e2e/nested-frame-navigation/e2e/frame-tab-root.e2e-spec.ts b/e2e/nested-frame-navigation/e2e/frame-root/tab-view.e2e-spec.ts similarity index 78% rename from e2e/nested-frame-navigation/e2e/frame-tab-root.e2e-spec.ts rename to e2e/nested-frame-navigation/e2e/frame-root/tab-view.e2e-spec.ts index ff15b7eea..d83572f41 100644 --- a/e2e/nested-frame-navigation/e2e/frame-tab-root.e2e-spec.ts +++ b/e2e/nested-frame-navigation/e2e/frame-root/tab-view.e2e-spec.ts @@ -1,27 +1,31 @@ import { AppiumDriver, createDriver, logWarn, nsCapabilities } from "nativescript-dev-appium"; -import { Screen, playersData, somePage, teamsData, driverDefaultWaitTime, Item } from "./screen"; -import * as shared from "./shared.e2e-spec"; -import { suspendTime, appSuspendResume, dontKeepActivities, transitions } from "./config"; -import { TabViewNavigationScreen } from "./tabview-navigation-screen"; +import { Screen, playersData, somePage, teamsData, driverDefaultWaitTime, Item } from "../screens/screen"; +import * as shared from "../screens/shared"; +import { suspendTime, appSuspendResume, dontKeepActivities, allTransitions } from "../config"; +import { TabViewNavigationScreen } from "../screens/tabview-navigation-screen"; // NOTE: TabViewTop is Android only scenario (for iOS we will essentially execute 2x TabViewBottom) const roots = ["TabViewTop", "TabViewBottom"]; -const rootType = "frame-tab-root"; -describe(rootType, async function () { +describe("frame-root-with-tab-view", async function () { let driver: AppiumDriver; let screen: Screen; + let transitions = [...allTransitions]; before(async function () { nsCapabilities.testReporter.context = this; - logWarn(`====== ${rootType} ========`); + logWarn(`====== frame-root-with-tab-view ========`); driver = await createDriver(); await driver.restartApp(); screen = new TabViewNavigationScreen(driver); if (dontKeepActivities) { await driver.setDontKeepActivities(true); } + if (driver.isIOS) { + logWarn("NOTE: TabViewTop is Android only scenario (for iOS we will not execute it)"); + roots.shift(); + } driver.defaultWaitTime = driverDefaultWaitTime; }); @@ -43,7 +47,7 @@ describe(rootType, async function () { for (let index = 0; index < roots.length; index++) { const root = roots[index]; - describe(`${rootType}-${root} scenarios:`, async function () { + describe(`frame-root-with-tab-view-${root} scenarios:`, async function () { logWarn(`===== Root: ${root}`); for (let trIndex = 0; trIndex < transitions.length; trIndex++) { const transition = transitions[trIndex]; @@ -52,17 +56,15 @@ describe(rootType, async function () { const teamOne: Item = teamsData[`teamOne${transition}`]; const teamTwo: Item = teamsData[`teamTwo${transition}`]; - describe(`${rootType}-${root}-transition-${transition}-scenarios:`, async function () { - + describe(`frame-root-with-tab-view-${root}-transition-${transition}-scenario:`, async function () { before(async function () { nsCapabilities.testReporter.context = this; - logWarn(`========= ${root}-${transition} =========`); - - if (transition === "Flip" && - driver.isAndroid && parseInt(driver.platformVersion) === 19) { + if (shared.isApiLevel19(driver) && (transition === "None" || transition === "Flip")) { // TODO: known issue https://github.com/NativeScript/NativeScript/issues/6798 - console.log("skipping flip transition tests on api level 19"); + logWarn("Skipping flip or none transition tests on api level 19"); this.skip(); + } else { + logWarn(`========= ${root}-${transition} =========`); } }); @@ -82,11 +84,12 @@ describe(rootType, async function () { it("loaded player details and go back twice", async function () { await shared.testPlayerNavigated(playerTwo, screen); - if (appSuspendResume) { - await driver.backgroundApp(suspendTime); - await screen.loadedElement(playerTwo.name); // wait for player + if (!shared.preventApplicationCrashCausedByAutomation(driver)) { + if (appSuspendResume) { + await driver.backgroundApp(suspendTime); + await screen.loadedElement(playerTwo.name); // wait for player + } } - await shared.testPlayerNavigatedBack(screen, driver); if (appSuspendResume) { @@ -118,9 +121,11 @@ describe(rootType, async function () { it("loaded player details and navigate parent frame and go back", async function () { await shared.testPlayerNavigated(playerTwo, screen); - if (appSuspendResume) { - await driver.backgroundApp(suspendTime); - await screen.loadedElement(playerTwo.name); // wait for player + if (!shared.preventApplicationCrashCausedByAutomation(driver)) { + if (appSuspendResume) { + await driver.backgroundApp(suspendTime); + await screen.loadedElement(playerTwo.name); // wait for player + } } await shared[`testSomePageNavigated${transition}`](screen); @@ -167,9 +172,11 @@ describe(rootType, async function () { await shared.testPlayerNavigated(playerTwo, screen); - if (appSuspendResume) { - await driver.backgroundApp(suspendTime); - await screen.loadedElement(playerTwo.name); // wait for player + if (!shared.preventApplicationCrashCausedByAutomation(driver)) { + if (appSuspendResume) { + await driver.backgroundApp(suspendTime); + await screen.loadedElement(playerTwo.name); // wait for player + } } await screen.loadedPlayerDetails(playerTwo); @@ -207,12 +214,13 @@ describe(rootType, async function () { await shared.testTeamNavigated(teamTwo, screen); - if (appSuspendResume) { - await screen.loadedElement(teamTwo.name); // wait for team - await driver.backgroundApp(suspendTime); - await screen.loadedElement(teamTwo.name); // wait for team + if (!shared.preventApplicationCrashCausedByAutomation(driver)) { + if (appSuspendResume) { + await screen.loadedElement(teamTwo.name); // wait for team + await driver.backgroundApp(suspendTime); + await screen.loadedElement(teamTwo.name); // wait for team + } } - await screen.loadedTeamDetails(teamTwo); await shared[`testSomePageNavigated${transition}`](screen); diff --git a/e2e/nested-frame-navigation/e2e/frame-tabs-root.e2e-spec.ts b/e2e/nested-frame-navigation/e2e/frame-root/tabs.e2e-spec.ts similarity index 72% rename from e2e/nested-frame-navigation/e2e/frame-tabs-root.e2e-spec.ts rename to e2e/nested-frame-navigation/e2e/frame-root/tabs.e2e-spec.ts index 263ca56a2..ba5fd3693 100644 --- a/e2e/nested-frame-navigation/e2e/frame-tabs-root.e2e-spec.ts +++ b/e2e/nested-frame-navigation/e2e/frame-root/tabs.e2e-spec.ts @@ -1,26 +1,24 @@ import { AppiumDriver, createDriver, logWarn, nsCapabilities } from "nativescript-dev-appium"; -import { Screen, playersData, somePage, teamsData, driverDefaultWaitTime, Item } from "./screen"; -import * as shared from "./shared.e2e-spec"; -import { suspendTime, appSuspendResume, dontKeepActivities, transitions } from "./config"; -import { TabNavigationScreen } from "./tab-navigation-screen"; +import { Screen, playersData, somePage, teamsData, driverDefaultWaitTime, Item } from "../screens/screen"; +import * as shared from "../screens/shared"; +import { suspendTime, appSuspendResume, dontKeepActivities, allTransitions } from "../config"; +import { TabNavigationScreen } from "../screens/tab-navigation-screen"; const roots = ["TabsTop", "TabsBottom"]; -const rootType = "frame-tabs-root"; -describe(rootType, async function () { +describe("frame-root-with-tabs", async function () { let driver: AppiumDriver; let screen: Screen; + let transitions = [...allTransitions]; before(async function () { nsCapabilities.testReporter.context = this; - logWarn(`====== ${rootType} ========`); + logWarn(`====== frame-root-with-tabs ========`); driver = await createDriver(); + await driver.restartApp(); screen = new TabNavigationScreen(driver); - if (dontKeepActivities) { - await driver.setDontKeepActivities(true); - } - + await driver.setDontKeepActivities(dontKeepActivities); driver.defaultWaitTime = driverDefaultWaitTime; }); @@ -41,8 +39,8 @@ describe(rootType, async function () { for (let index = 0; index < roots.length; index++) { const root = roots[index]; - describe(`${rootType}-${root} scenarios:`, async function () { - logWarn(`===== Root: ${root}`); + describe(`frame-root-with-tabs-${root} scenario:`, async function () { + logWarn(`===== ${index++}. Root: ${root}`); for (let trIndex = 0; trIndex < transitions.length; trIndex++) { const transition = transitions[trIndex]; const playerOne: Item = playersData[`playerOne${transition}`]; @@ -50,17 +48,16 @@ describe(rootType, async function () { const teamOne: Item = teamsData[`teamOne${transition}`]; const teamTwo: Item = teamsData[`teamTwo${transition}`]; - describe(`${rootType}-${root}-transition-${transition}-scenarios:`, async function () { + describe(`frame-root-with-tabs-${root}-transition-${transition}-scenario:`, async function () { before(async function () { nsCapabilities.testReporter.context = this; - logWarn(`========= ${root}-${transition} =========`); - - if (transition === "Flip" && - driver.isAndroid && parseInt(driver.platformVersion) === 19) { + if (shared.isApiLevel19(driver) && (transition === "None" || transition === "Flip")) { // TODO: known issue https://github.com/NativeScript/NativeScript/issues/6798 - console.log("skipping flip transition tests on api level 19"); + logWarn("Skipping flip or none transition tests on api level 19"); this.skip(); + } else { + logWarn(`========= ${root}-${transition} =========`); } }); @@ -116,9 +113,11 @@ describe(rootType, async function () { it("loaded player details and navigate parent frame and go back", async function () { await shared.testPlayerNavigated(playerTwo, screen); - if (appSuspendResume) { - await driver.backgroundApp(suspendTime); - await screen.loadedElement(playerTwo.name); // wait for player + if (!shared.preventApplicationCrashCausedByAutomation(driver)) { + if (appSuspendResume) { + await driver.backgroundApp(suspendTime); + await screen.loadedElement(playerTwo.name); // wait for player + } } await shared[`testSomePageNavigated${transition}`](screen); @@ -165,18 +164,22 @@ describe(rootType, async function () { await shared.testPlayerNavigated(playerTwo, screen); - if (appSuspendResume) { - await driver.backgroundApp(suspendTime); - await screen.loadedElement(playerTwo.name); // wait for player + if (!shared.preventApplicationCrashCausedByAutomation(driver)) { + if (appSuspendResume) { + await driver.backgroundApp(suspendTime); + await screen.loadedElement(playerTwo.name); // wait for player + } } await screen.loadedPlayerDetails(playerTwo); await shared[`testSomePageNavigated${transition}`](screen); - if (appSuspendResume) { - await driver.backgroundApp(suspendTime); - await screen.loadedElement(somePage); // wait for some page + if (!shared.preventApplicationCrashCausedByAutomation(driver)) { + if (appSuspendResume) { + await driver.backgroundApp(suspendTime); + await screen.loadedElement(somePage); // wait for some page + } } if (driver.isAndroid) { @@ -185,30 +188,36 @@ describe(rootType, async function () { await screen.goBackFromSomePage(); } - if (appSuspendResume) { - // This sleeps prevent test to fail - await driver.sleep(1000); - await driver.backgroundApp(suspendTime); - await screen.loadedElement(playerTwo.name); // wait for player + if (!shared.preventApplicationCrashCausedByAutomation(driver)) { + if (appSuspendResume) { + // This sleeps prevent test to fail + await driver.sleep(1000); + await driver.backgroundApp(suspendTime); + await screen.loadedElement(playerTwo.name); // wait for player + } } await screen.loadedPlayerDetails(playerTwo); await screen.toggleTeamsTab(); - if (appSuspendResume) { - await driver.backgroundApp(suspendTime); - await screen.loadedElement(teamOne.name); // wait for teams list + if (!shared.preventApplicationCrashCausedByAutomation(driver)) { + if (appSuspendResume) { + await driver.backgroundApp(suspendTime); + await screen.loadedElement(teamOne.name); // wait for teams list + } } await screen.loadedTeamsList(); await shared.testTeamNavigated(teamTwo, screen); - if (appSuspendResume) { - await screen.loadedElement(teamTwo.name); // wait for team - await driver.backgroundApp(suspendTime); - await screen.loadedElement(teamTwo.name); // wait for team + if (!shared.preventApplicationCrashCausedByAutomation(driver)) { + if (appSuspendResume) { + await screen.loadedElement(teamTwo.name); // wait for team + await driver.backgroundApp(suspendTime); + await screen.loadedElement(teamTwo.name); // wait for team + } } await screen.loadedTeamDetails(teamTwo); diff --git a/e2e/nested-frame-navigation/e2e/issues.e2e.spec.ts b/e2e/nested-frame-navigation/e2e/issues/issues.e2e.spec.ts similarity index 84% rename from e2e/nested-frame-navigation/e2e/issues.e2e.spec.ts rename to e2e/nested-frame-navigation/e2e/issues/issues.e2e.spec.ts index 3abce2423..0e29235b4 100644 --- a/e2e/nested-frame-navigation/e2e/issues.e2e.spec.ts +++ b/e2e/nested-frame-navigation/e2e/issues/issues.e2e.spec.ts @@ -1,7 +1,7 @@ import { AppiumDriver, createDriver, nsCapabilities } from "nativescript-dev-appium"; -import { Screen } from "./screen"; -import { suspendTime, dontKeepActivities } from "./config"; -import { TabViewNavigationScreen } from "./tabview-navigation-screen"; +import { Screen } from "../screens/screen"; +import { suspendTime, dontKeepActivities } from "../config"; +import { TabViewNavigationScreen } from "../screens/tabview-navigation-screen"; describe("issues", async function () { let driver: AppiumDriver; @@ -10,6 +10,7 @@ describe("issues", async function () { before(async function () { nsCapabilities.testReporter.context = this; driver = await createDriver(); + await driver.restartApp(); screen = new TabViewNavigationScreen(driver); if (dontKeepActivities) { await driver.setDontKeepActivities(true); @@ -35,7 +36,7 @@ describe("issues", async function () { await screen.loadedHome(); const showSomePage = async function () { const somePageBtn = await driver.waitForElement("somePageOnRoot"); - await somePageBtn.tap(); + await somePageBtn.click(); await screen.loadedSomePage(); }; diff --git a/e2e/nested-frame-navigation/e2e/layout-root/multi-frames.e2e-spec.ts b/e2e/nested-frame-navigation/e2e/layout-root/multi-frames.e2e-spec.ts new file mode 100644 index 000000000..db1ac9a63 --- /dev/null +++ b/e2e/nested-frame-navigation/e2e/layout-root/multi-frames.e2e-spec.ts @@ -0,0 +1,226 @@ +import { AppiumDriver, createDriver, logWarn, nsCapabilities } from "nativescript-dev-appium"; + +import { Screen, playersData, somePage, otherPage, teamsData, driverDefaultWaitTime } from "../screens/screen"; +import * as shared from "../screens/shared"; +import { suspendTime, appSuspendResume, dontKeepActivities, allTransitions } from "../config"; +import { TabNavigationScreen } from "../screens/tab-navigation-screen"; + +describe("layout-root-with-multi-frames", async function () { + let driver: AppiumDriver; + let screen: Screen; + let transitions = [...allTransitions]; + + before(async function () { + nsCapabilities.testReporter.context = this; + driver = await createDriver(); + await driver.restartApp(); + screen = new TabNavigationScreen(driver); + logWarn("====== layout-root-with-multi-frames ========"); + await driver.setDontKeepActivities(dontKeepActivities); + driver.defaultWaitTime = driverDefaultWaitTime; + }); + + after(async function () { + if (dontKeepActivities) { + await driver.setDontKeepActivities(false); + } + await driver.quit(); + console.log("Quit driver!"); + }); + + afterEach(async function () { + if (this.currentTest.state === "failed") { + await driver.logTestArtifacts(this.currentTest.title); + } + }); + + for (let index = 0; index < transitions.length; index++) { + const transition = allTransitions[index]; + + const playerOne = playersData[`playerOne${transition}`]; + const playerTwo = playersData[`playerTwo${transition}`]; + const teamOne = teamsData[`teamOne${transition}`]; + + describe(`layout-root-with-multi-frames-transition-${transition}-scenario:`, async function () { + + before(async function () { + nsCapabilities.testReporter.context = this; + if (shared.isApiLevel19(driver) && (transition === "None" || transition === "Flip")) { + // TODO: known issue https://github.com/NativeScript/NativeScript/issues/6798 + logWarn("Skipping flip or none transition tests on api level 19"); + this.skip(); + } else { + logWarn(`========= ${index}. ${transition} =========`); + } + }); + + it("loaded layout root with multi nested frames", async function () { + await screen.loadedHome(); + + await screen.navigateToLayoutWithMultiFrame(); + await screen.loadedLayoutWithMultiFrame(); + }); + + it("loaded players list", async function () { + await screen.loadedPlayersList(); + }); + + it("loaded teams list", async function () { + await screen.loadedTeamsList(); + }); + + it("loaded player details and go back twice", async function () { + await shared.testPlayerNavigated(playerTwo, screen); + + if (appSuspendResume) { + await driver.backgroundApp(suspendTime); + await driver.waitForElement(playerTwo.name); // wait for player + } + + await shared.testPlayerNavigatedBack(screen, driver); + + if (appSuspendResume) { + await driver.backgroundApp(suspendTime); + await driver.waitForElement(playerOne.name); // wait for players list + } + + await shared.testPlayerNavigated(playerTwo, screen); + await shared.testPlayerNavigatedBack(screen, driver); + }); + + it("navigate players parent frame and go back", async function () { + await shared[`testSomePageNavigated${transition}`](screen); + + if (appSuspendResume) { + await driver.backgroundApp(suspendTime); + await driver.waitForElement(somePage); // wait for some page + } + + if (driver.isAndroid) { + await driver.navBack(); // some page back navigation + } else { + await screen.goBackFromSomePage(); + } + + await screen.loadedPlayersList(); + }); + + it("loaded players details and navigate parent frame and go back", async function () { + await shared.testPlayerNavigated(playerTwo, screen); + + if (appSuspendResume) { + await driver.backgroundApp(suspendTime); + await driver.waitForElement(playerTwo.name); // wait for player + } + + await shared[`testSomePageNavigated${transition}`](screen); + + if (appSuspendResume) { + await driver.backgroundApp(suspendTime); + await driver.waitForElement(somePage); // wait for some page + } + + if (driver.isAndroid) { + await driver.navBack(); // some page back navigation + } else { + await screen.goBackFromSomePage(); + } + + await screen.loadedPlayerDetails(playerTwo); + + await screen.goBackToPlayersList(); + await screen.loadedPlayersList(); + }); + + it("loaded layout root with multi nested frames again", async function () { + await screen.loadedLayoutWithMultiFrame(); + }); + + it("loaded players list", async function () { + await screen.loadedPlayersList(); + }); + + it("loaded teams list", async function () { + await screen.loadedTeamsList(); + }); + + it("mix player and team list actions and go back", async function () { + await shared.testPlayerNavigated(playerTwo, screen); + + if (appSuspendResume) { + await driver.backgroundApp(suspendTime); + await driver.waitForElement(playerTwo.name); // wait for player + } + + await shared[`testOtherPageNavigated${transition}`](screen); // "teams" parent frame navigation + + if (appSuspendResume) { + await driver.backgroundApp(suspendTime); + await driver.waitForElement(otherPage); // wait for other page + } + + await screen.loadedPlayerDetails(playerTwo); // assert no changes in the sibling frame + + if (driver.isAndroid) { + await driver.navBack(); // other page back navigation + } else { + await screen.goBackFromOtherPage(); + } + + if (appSuspendResume) { + await driver.backgroundApp(suspendTime); + await driver.waitForElement(teamOne.name); // wait for teams list + } + + await screen.loadedTeamsList(); + await screen.loadedPlayerDetails(playerTwo); // assert no changes in the sibling frame + + await shared[`testOtherPageNavigated${transition}`](screen); + + if (appSuspendResume) { + await driver.backgroundApp(suspendTime); + await driver.waitForElement(otherPage); // wait for other page + } + + await shared[`testSomePageNavigated${transition}`](screen); + + if (appSuspendResume) { + await driver.backgroundApp(suspendTime); + await driver.waitForElement(somePage); // wait for some page + } + + await screen.loadedOtherPage(); // assert no changes in the sibling frame + + if (driver.isAndroid) { + await driver.navBack(); // some page back navigation + } else { + await screen.goBackFromSomePage(); + } + + await screen.loadedPlayerDetails(playerTwo); + + await screen.goBackToPlayersList(); + await screen.loadedPlayersList(); + + if (appSuspendResume) { + await driver.backgroundApp(suspendTime); + await driver.waitForElement(playerOne.name); // wait for players list + } + + await screen.goBackFromOtherPage(); + + if (appSuspendResume) { + await driver.backgroundApp(suspendTime); + await driver.waitForElement(teamOne.name); // wait for team + } + + await screen.loadedTeamsList(); + }); + + it("loaded home page again", async function () { + await screen.resetToHome(); + await screen.loadedHome(); + }); + }); + } +}); diff --git a/e2e/nested-frame-navigation/e2e/layout-root.e2e-spec.ts b/e2e/nested-frame-navigation/e2e/layout-root/single-frame.e2e-spec.ts similarity index 62% rename from e2e/nested-frame-navigation/e2e/layout-root.e2e-spec.ts rename to e2e/nested-frame-navigation/e2e/layout-root/single-frame.e2e-spec.ts index 2346a9c1d..f407467e8 100644 --- a/e2e/nested-frame-navigation/e2e/layout-root.e2e-spec.ts +++ b/e2e/nested-frame-navigation/e2e/layout-root/single-frame.e2e-spec.ts @@ -1,24 +1,22 @@ import { AppiumDriver, createDriver, logWarn, nsCapabilities } from "nativescript-dev-appium"; -import { Screen, playersData, home, somePage, otherPage, teamsData, driverDefaultWaitTime } from "./screen"; -import * as shared from "./shared.e2e-spec"; -import { suspendTime, appSuspendResume, dontKeepActivities, transitions } from "./config"; -import { TabNavigationScreen } from "./tab-navigation-screen"; +import { Screen, playersData, home, somePage, teamsData, driverDefaultWaitTime } from "../screens/screen"; +import * as shared from "../screens/shared"; +import { suspendTime, appSuspendResume, dontKeepActivities, allTransitions } from "../config"; +import { TabNavigationScreen } from "../screens/tab-navigation-screen"; -const rootType = "layout-root"; -describe(rootType, async function () { +describe("layout-root-with-single-frame", async function () { let driver: AppiumDriver; let screen: Screen; + let transitions = [...allTransitions]; before(async function () { nsCapabilities.testReporter.context = this; driver = await createDriver(); + await driver.restartApp(); screen = new TabNavigationScreen(driver); - logWarn("====== layout-root ========"); - if (dontKeepActivities) { - await driver.setDontKeepActivities(true); - } - + logWarn("====== layout-root-with-single-frame ========"); + await driver.setDontKeepActivities(dontKeepActivities); driver.defaultWaitTime = driverDefaultWaitTime; }); @@ -41,17 +39,17 @@ describe(rootType, async function () { const playerOne = playersData[`playerOne${transition}`]; const playerTwo = playersData[`playerTwo${transition}`]; - const teamOne = teamsData[`teamOne${transition}`]; - describe(`${rootType}-transition-${transition}-scenarios:`, async function () { + describe(`layout-root-with-single-frame-transition-${transition}-scenario:`, async function () { before(async function () { nsCapabilities.testReporter.context = this; - if (transition === "Flip" && - driver.isAndroid && parseInt(driver.platformVersion) === 19) { + if (shared.isApiLevel19(driver) && (transition === "None" || transition === "Flip")) { // TODO: known issue https://github.com/NativeScript/NativeScript/issues/6798 - console.log("skipping flip transition tests on api level 19"); + logWarn("Skipping flip or none transition tests on api level 19"); this.skip(); + } else { + logWarn(`========= ${index}. ${transition} =========`); } }); @@ -140,179 +138,17 @@ describe(rootType, async function () { await driver.waitForElement(home); // wait for home page } }); - - it("loaded layout root with multi nested frames", async function () { - await screen.navigateToLayoutWithMultiFrame(); - await screen.loadedLayoutWithMultiFrame(); - }); - - it("loaded players list", async function () { - await screen.loadedPlayersList(); - }); - - it("loaded teams list", async function () { - await screen.loadedTeamsList(); - }); - - it("loaded player details and go back twice", async function () { - await shared.testPlayerNavigated(playerTwo, screen); - - if (appSuspendResume) { - await driver.backgroundApp(suspendTime); - await driver.waitForElement(playerTwo.name); // wait for player - } - - await shared.testPlayerNavigatedBack(screen, driver); - - if (appSuspendResume) { - await driver.backgroundApp(suspendTime); - await driver.waitForElement(playerOne.name); // wait for players list - } - - await shared.testPlayerNavigated(playerTwo, screen); - await shared.testPlayerNavigatedBack(screen, driver); - }); - - it("navigate players parent frame and go back", async function () { - await shared[`testSomePageNavigated${transition}`](screen); - - if (appSuspendResume) { - await driver.backgroundApp(suspendTime); - await driver.waitForElement(somePage); // wait for some page - } - - if (driver.isAndroid) { - await driver.navBack(); // some page back navigation - } else { - await screen.goBackFromSomePage(); - } - - await screen.loadedPlayersList(); - }); - - it("loaded players details and navigate parent frame and go back", async function () { - await shared.testPlayerNavigated(playerTwo, screen); - - if (appSuspendResume) { - await driver.backgroundApp(suspendTime); - await driver.waitForElement(playerTwo.name); // wait for player - } - - await shared[`testSomePageNavigated${transition}`](screen); - - if (appSuspendResume) { - await driver.backgroundApp(suspendTime); - await driver.waitForElement(somePage); // wait for some page - } - - if (driver.isAndroid) { - await driver.navBack(); // some page back navigation - } else { - await screen.goBackFromSomePage(); - } - - await screen.loadedPlayerDetails(playerTwo); - - await screen.goBackToPlayersList(); - await screen.loadedPlayersList(); - }); - - it("loaded layout root with multi nested frames again", async function () { - await screen.loadedLayoutWithMultiFrame(); - }); - - it("loaded players list", async function () { - await screen.loadedPlayersList(); - }); - - it("loaded teams list", async function () { - await screen.loadedTeamsList(); - }); - - it("mix player and team list actions and go back", async function () { - await shared.testPlayerNavigated(playerTwo, screen); - - if (appSuspendResume) { - await driver.backgroundApp(suspendTime); - await driver.waitForElement(playerTwo.name); // wait for player - } - - await shared[`testOtherPageNavigated${transition}`](screen); // "teams" parent frame navigation - - if (appSuspendResume) { - await driver.backgroundApp(suspendTime); - await driver.waitForElement(otherPage); // wait for other page - } - - await screen.loadedPlayerDetails(playerTwo); // assert no changes in the sibling frame - - if (driver.isAndroid) { - await driver.navBack(); // other page back navigation - } else { - await screen.goBackFromOtherPage(); - } - - if (appSuspendResume) { - await driver.backgroundApp(suspendTime); - await driver.waitForElement(teamOne.name); // wait for teams list - } - - await screen.loadedTeamsList(); - await screen.loadedPlayerDetails(playerTwo); // assert no changes in the sibling frame - - await shared[`testOtherPageNavigated${transition}`](screen); - - if (appSuspendResume) { - await driver.backgroundApp(suspendTime); - await driver.waitForElement(otherPage); // wait for other page - } - - await shared[`testSomePageNavigated${transition}`](screen); - - if (appSuspendResume) { - await driver.backgroundApp(suspendTime); - await driver.waitForElement(somePage); // wait for some page - } - - await screen.loadedOtherPage(); // assert no changes in the sibling frame - - if (driver.isAndroid) { - await driver.navBack(); // some page back navigation - } else { - await screen.goBackFromSomePage(); - } - - await screen.loadedPlayerDetails(playerTwo); - - await screen.goBackToPlayersList(); - await screen.loadedPlayersList(); - - if (appSuspendResume) { - await driver.backgroundApp(suspendTime); - await driver.waitForElement(playerOne.name); // wait for players list - } - - await screen.goBackFromOtherPage(); - - if (appSuspendResume) { - await driver.backgroundApp(suspendTime); - await driver.waitForElement(teamOne.name); // wait for team - } - - await screen.loadedTeamsList(); - }); - - it("loaded home page again", async function () { - await screen.resetToHome(); - await screen.loadedHome(); - }); }); } - describe(`${rootType}-players-list-slide-transition with parent frame default transition:`, async function () { + describe(`layout-root-with-single-frame-players-list-slide-transition with parent frame default transition:`, async function () { const playerOne = playersData["playerOneSlide"]; const playerTwo = playersData["playerTwoSlide"]; + before(async function () { + nsCapabilities.testReporter.context = this; + }); + it("loaded layout root with nested frames", async function () { await screen.navigateToLayoutWithFrame(); await screen.loadedLayoutWithFrame(); @@ -368,10 +204,19 @@ describe(rootType, async function () { }); }); - describe(`${rootType}-players-list-slide-transition with parent frame no transition:`, async function () { + describe(`layout-root-with-single-frame-players-list-slide-transition with parent frame no transition:`, async function () { const playerOne = playersData["playerOneSlide"]; const playerTwo = playersData["playerTwoSlide"]; + before(async function () { + nsCapabilities.testReporter.context = this; + if (shared.isApiLevel19(driver)) { + // TODO: known issue https://github.com/NativeScript/NativeScript/issues/6798 + logWarn("Skip tests on api level 19"); + this.skip(); + } + }); + it("loaded layout root with nested frames", async function () { await screen.navigateToLayoutWithFrame(); await screen.loadedLayoutWithFrame(); @@ -427,7 +272,7 @@ describe(rootType, async function () { }); }); - describe(`${rootType}-players-list-flip-transition with parent frame default transition:`, async function () { + describe(`layout-root-with-single-frame-players-list-flip-transition with parent frame default transition:`, async function () { const playerOne = playersData["playerOneFlip"]; const playerTwo = playersData["playerTwoFlip"]; @@ -490,14 +335,19 @@ describe(rootType, async function () { }); }); - describe(`${rootType}-players-list-flip-transition with parent frame no transition:`, async function () { + describe(`layout-root-with-single-frame-players-list-flip-transition with parent frame no transition:`, async function () { const playerOne = playersData["playerOneFlip"]; const playerTwo = playersData["playerTwoFlip"]; before(async function () { nsCapabilities.testReporter.context = this; + if (shared.isApiLevel19(driver)) { + // TODO: known issue https://github.com/NativeScript/NativeScript/issues/6798 + logWarn("Skip tests on api level 19"); + this.skip(); + } }); - + it("loaded layout root with nested frames", async function () { await screen.navigateToLayoutWithFrame(); await screen.loadedLayoutWithFrame(); diff --git a/e2e/nested-frame-navigation/e2e/screen.ts b/e2e/nested-frame-navigation/e2e/screens/screen.ts similarity index 98% rename from e2e/nested-frame-navigation/e2e/screen.ts rename to e2e/nested-frame-navigation/e2e/screens/screen.ts index b496144ad..446c4a4b9 100644 --- a/e2e/nested-frame-navigation/e2e/screen.ts +++ b/e2e/nested-frame-navigation/e2e/screens/screen.ts @@ -272,7 +272,7 @@ export abstract class Screen { const btnReset = await this._driver.waitForElement(resetApp); console.info(`====== Reset home "${resetApp}"`); - await btnReset.tap(); + await btnReset.click(); } goBackToPlayersList = async () => { @@ -322,13 +322,13 @@ export abstract class Screen { togglePlayersTab = async () => { const lblPlayers = await this._driver.waitForElement(this.playersTab); logInfo(`====== Navigate to "${this.players}"`); - await lblPlayers.tap(); + await lblPlayers.click(); } toggleTeamsTab = async () => { const lblTeams = await this._driver.waitForElement(this.teamsTab); logInfo(`====== Navigate to "${this.teams}"`); - await lblTeams.tap(); + await lblTeams.click(); } loadedHome = async () => { @@ -435,7 +435,7 @@ export abstract class Screen { private navigateToPage = async (page: string) => { const btnPage = await this._driver.waitForElement(page); logInfo(`====== Navigate to "${page}"`); - await btnPage.tap(); + await btnPage.click(); } private loadedPage = async (page: string) => { @@ -447,7 +447,7 @@ export abstract class Screen { private navigateToItem = async (item: Item) => { const lblItem = await this._driver.waitForElement(item.name); logInfo(`====== Navigate to "${item.name}"`); - await lblItem.tap(); + await lblItem.click(); } private loadedItem = async (item: Item) => { @@ -463,6 +463,6 @@ export abstract class Screen { private goBack = async (accessibilityId: string) => { const btnBack = await this._driver.waitForElement(accessibilityId); logInfo(`====== Go back with "${accessibilityId}"`); - await btnBack.tap(); + await btnBack.click(); } } \ No newline at end of file diff --git a/e2e/nested-frame-navigation/e2e/shared.e2e-spec.ts b/e2e/nested-frame-navigation/e2e/screens/shared.ts similarity index 69% rename from e2e/nested-frame-navigation/e2e/shared.e2e-spec.ts rename to e2e/nested-frame-navigation/e2e/screens/shared.ts index d3aed10de..e1daeba66 100644 --- a/e2e/nested-frame-navigation/e2e/shared.e2e-spec.ts +++ b/e2e/nested-frame-navigation/e2e/screens/shared.ts @@ -1,6 +1,33 @@ import { AppiumDriver } from "nativescript-dev-appium"; import { Screen, Item } from "./screen"; +import { logWarn } from "nativescript-dev-appium"; + +export const preventApplicationCrashCausedByAutomation = (driver: AppiumDriver) => { + if (driver.isIOS) { + return false; + } + + let preventApplicationCrashCauesByAutomation = false; + + if (Number.isInteger(+driver.nsCapabilities.device.apiLevel)) { + preventApplicationCrashCauesByAutomation = +driver.nsCapabilities.device.apiLevel > 23; + } else { + const majorVersion = driver.nsCapabilities.device.apiLevel.split(".")[0]; + preventApplicationCrashCauesByAutomation = +majorVersion > 6; + } + if (preventApplicationCrashCauesByAutomation) { + logWarn("Skip run in background app, since it causes crash related to automation!"); + } + + return preventApplicationCrashCauesByAutomation; +}; + +export const isApiLevel19 = (driver: AppiumDriver) => { + return driver.isAndroid + && (`${driver.nsCapabilities.device.apiLevel}`.startsWith("19") + || `${driver.nsCapabilities.device.apiLevel}`.startsWith("4.4.2")); +}; export async function testPlayerNavigated(player: Item, screen: Screen) { await screen.navigateToPlayerDetails(player); diff --git a/e2e/nested-frame-navigation/e2e/tab-navigation-screen.ts b/e2e/nested-frame-navigation/e2e/screens/tab-navigation-screen.ts similarity index 100% rename from e2e/nested-frame-navigation/e2e/tab-navigation-screen.ts rename to e2e/nested-frame-navigation/e2e/screens/tab-navigation-screen.ts diff --git a/e2e/nested-frame-navigation/e2e/tabview-navigation-screen.ts b/e2e/nested-frame-navigation/e2e/screens/tabview-navigation-screen.ts similarity index 100% rename from e2e/nested-frame-navigation/e2e/tabview-navigation-screen.ts rename to e2e/nested-frame-navigation/e2e/screens/tabview-navigation-screen.ts diff --git a/e2e/nested-frame-navigation/e2e/tab-navigation-root/bottom-navigation-root.e2e-spec.ts b/e2e/nested-frame-navigation/e2e/tab-navigation-root/bottom-navigation-root.e2e-spec.ts new file mode 100644 index 000000000..a1e56b17c --- /dev/null +++ b/e2e/nested-frame-navigation/e2e/tab-navigation-root/bottom-navigation-root.e2e-spec.ts @@ -0,0 +1,167 @@ +import { AppiumDriver, createDriver, logWarn, nsCapabilities } from "nativescript-dev-appium"; + +import { Screen, playersData, teamsData } from "../screens/screen"; +import * as shared from "../screens/shared"; +import { suspendTime, appSuspendResume, dontKeepActivities, allTransitions } from "../config"; +import { TabNavigationScreen } from "../screens/tab-navigation-screen"; + +describe("tab-navigation-bottom-navigation-root", async function () { + let driver: AppiumDriver; + let screen: Screen; + let transitions = [...allTransitions]; + + before(async function () { + nsCapabilities.testReporter.context = this; + logWarn(`====== "bottom-navigation-root" ========`); + driver = await createDriver(); + await driver.restartApp(); + screen = new TabNavigationScreen(driver); + driver.setDontKeepActivities(dontKeepActivities); + driver.defaultWaitTime = 8000; + }); + + after(async function () { + if (dontKeepActivities) { + await driver.setDontKeepActivities(false); + } + await driver.quit(); + console.log("Quit driver!"); + }); + + afterEach(async function () { + if (this.currentTest.state === "failed") { + await driver.logTestArtifacts(this.currentTest.title); + } + }); + + for (let index = 0; index < transitions.length; index++) { + const transition = transitions[index]; + + const playerOne = playersData[`playerOne${transition}`]; + const playerTwo = playersData[`playerTwo${transition}`]; + const teamOne = teamsData[`teamOne${transition}`]; + const teamTwo = teamsData[`teamTwo${transition}`]; + + describe(`bottom-navigation-root-transition-${transition}-scenario:`, async function () { + before(async function () { + if (shared.isApiLevel19(driver) && (transition === "None" || transition === "Flip")) { + // TODO: known issue https://github.com/NativeScript/NativeScript/issues/6798 + logWarn("Skipping flip or none transition tests on api level 19"); + this.skip(); + } else { + logWarn(`========= ${index}. ${transition} =========`); + } + nsCapabilities.testReporter.context = this; + }); + + it("loaded home page", async function () { + await screen.loadedHome(); + }); + + it(`loaded BottomNavigation root with frames`, async function () { + await screen[`navigateToBottomNavigationRootWithFrames`](); + await screen[`loadedBottomNavigationRootWithFrames`](); + }); + + it("loaded players list", async function () { + await screen.loadedPlayersList(); + }); + + it("loaded player details and go back twice", async function () { + await shared.testPlayerNavigated(playerTwo, screen); + + if (appSuspendResume) { + await driver.backgroundApp(suspendTime); + await driver.waitForElement(playerTwo.name); // wait for player + } + + await shared.testPlayerNavigatedBack(screen, driver); + + if (appSuspendResume) { + await driver.backgroundApp(suspendTime); + await driver.waitForElement(playerOne.name); // wait for players list + } + + await shared.testPlayerNavigated(playerTwo, screen); + await shared.testPlayerNavigatedBack(screen, driver); + }); + + it("toggle teams tab", async function () { + await screen.toggleTeamsTab(); + + if (appSuspendResume) { + await driver.backgroundApp(suspendTime); + await driver.waitForElement(teamOne.name); // wait for teams list + } + }); + + it("loaded teams list", async function () { + await screen.loadedTeamsList(); + }); + + it("mix player and team list actions and go back", async function () { + await screen.togglePlayersTab(); + + if (appSuspendResume) { + await driver.backgroundApp(suspendTime); + await driver.waitForElement(playerOne.name); // wait for players list + } + + await screen.loadedPlayersList(); + + await shared.testPlayerNavigated(playerTwo, screen); + + if (driver.isIOS) { + if (appSuspendResume) { + await driver.backgroundApp(suspendTime); + await driver.waitForElement(playerTwo.name); // wait for player + } + } + + await screen.toggleTeamsTab(); + + if (driver.isIOS) { + // TODO: run in background from appium breaks the test. Investigate the issue, once with the app and with appium + if (appSuspendResume) { + await driver.backgroundApp(suspendTime); + await driver.waitForElement(teamOne.name); // wait for teams list + } + } + + await screen.loadedTeamsList(); + + await shared.testTeamNavigated(teamTwo, screen); + + if (appSuspendResume) { + await driver.backgroundApp(suspendTime); + await driver.waitForElement(teamTwo.name); // wait for team + } + + await screen.togglePlayersTab(); + + if (appSuspendResume) { + await driver.backgroundApp(suspendTime); + await driver.waitForElement(playerTwo.name); // wait for player + } + + await screen.loadedPlayerDetails(playerTwo); + + await screen.toggleTeamsTab(); + + await screen.goBackToTeamsList(); + await screen.loadedTeamsList(); + + await screen.togglePlayersTab(); + + await screen.goBackToPlayersList(); + await screen.loadedPlayersList(); + }); + + it("loaded home page again", async function () { + await screen.resetToHome(); + await screen.loadedHome(); + }); + }); + } + +}); diff --git a/e2e/nested-frame-navigation/e2e/tabs-root.e2e-spec.ts b/e2e/nested-frame-navigation/e2e/tab-navigation-root/tabs-root.e2e-spec.ts similarity index 86% rename from e2e/nested-frame-navigation/e2e/tabs-root.e2e-spec.ts rename to e2e/nested-frame-navigation/e2e/tab-navigation-root/tabs-root.e2e-spec.ts index 24266595e..03bb70501 100644 --- a/e2e/nested-frame-navigation/e2e/tabs-root.e2e-spec.ts +++ b/e2e/nested-frame-navigation/e2e/tab-navigation-root/tabs-root.e2e-spec.ts @@ -1,26 +1,24 @@ import { AppiumDriver, createDriver, logWarn, nsCapabilities } from "nativescript-dev-appium"; -import { Screen, playersData, teamsData } from "./screen"; -import * as shared from "./shared.e2e-spec"; -import { suspendTime, appSuspendResume, dontKeepActivities, transitions } from "./config"; -import { TabNavigationScreen } from "./tab-navigation-screen"; +import { Screen, playersData, teamsData } from "../screens/screen"; +import * as shared from "../screens/shared"; +import { suspendTime, appSuspendResume, dontKeepActivities, allTransitions } from "../config"; +import { TabNavigationScreen } from "../screens/tab-navigation-screen"; const roots = ["TabsTop", "TabsBottom"]; -const rootType = "tabs-root"; -describe(rootType, async function () { +describe("tab-navigation-tabs-root", async function () { let driver: AppiumDriver; let screen: Screen; + let transitions = [...allTransitions]; before(async function () { nsCapabilities.testReporter.context = this; - logWarn(`====== ${rootType} ========`); + logWarn(`====== "tabs-root" ========`); driver = await createDriver(); + await driver.restartApp(); screen = new TabNavigationScreen(driver); - if (dontKeepActivities) { - await driver.setDontKeepActivities(true); - } - + await driver.setDontKeepActivities(dontKeepActivities); driver.defaultWaitTime = 8000; }); @@ -40,7 +38,7 @@ describe(rootType, async function () { for (let index = 0; index < roots.length; index++) { const root = roots[index]; - describe(`${rootType}-${root}-scenarios:`, async function () { + describe(`tab-navigation-tabs-root-${root}-scenario:`, async function () { before(async function () { nsCapabilities.testReporter.context = this; @@ -54,16 +52,16 @@ describe(rootType, async function () { const teamOne = teamsData[`teamOne${transition}`]; const teamTwo = teamsData[`teamTwo${transition}`]; - describe(`${rootType}-${root}-transition-${transition}-scenarios:`, async function () { + describe(`tabs-root-${root}-transition-${transition}-scenario:`, async function () { before(async function () { nsCapabilities.testReporter.context = this; - - if (transition === "Flip" && - driver.isAndroid && parseInt(driver.platformVersion) === 19) { + if (shared.isApiLevel19(driver) && (transition === "None" || transition === "Flip")) { // TODO: known issue https://github.com/NativeScript/NativeScript/issues/6798 - console.log("skipping flip transition tests on api level 19"); + logWarn("Skipping flip or none transition tests on api level 19"); this.skip(); + } else { + logWarn(`========= ${root}-${transition} =========`); } }); diff --git a/e2e/nested-frame-navigation/e2e/tab-root.e2e-spec.ts b/e2e/nested-frame-navigation/e2e/tab-view-root/tab-view-root.e2e-spec.ts similarity index 84% rename from e2e/nested-frame-navigation/e2e/tab-root.e2e-spec.ts rename to e2e/nested-frame-navigation/e2e/tab-view-root/tab-view-root.e2e-spec.ts index f01741f12..cc9f6f235 100644 --- a/e2e/nested-frame-navigation/e2e/tab-root.e2e-spec.ts +++ b/e2e/nested-frame-navigation/e2e/tab-view-root/tab-view-root.e2e-spec.ts @@ -1,27 +1,24 @@ import { AppiumDriver, createDriver, logWarn, nsCapabilities } from "nativescript-dev-appium"; -import { Screen, playersData, teamsData } from "./screen"; -import * as shared from "./shared.e2e-spec"; -import { suspendTime, appSuspendResume, dontKeepActivities, transitions } from "./config"; -import { TabViewNavigationScreen } from "./tabview-navigation-screen"; +import { Screen, playersData, teamsData } from "../screens/screen"; +import * as shared from "../screens/shared"; +import { suspendTime, appSuspendResume, dontKeepActivities, allTransitions } from "../config"; +import { TabViewNavigationScreen } from "../screens/tabview-navigation-screen"; // NOTE: TabViewTop is Android only scenario (for iOS we will essentially execute 2x TabViewBottom) const roots = ["TabViewTop", "TabViewBottom"]; -const rootType = "tab-root"; -describe(rootType, async function () { +describe("tab-view-root", async function () { let driver: AppiumDriver; let screen: Screen; - + let transitions = [...allTransitions]; before(async function () { nsCapabilities.testReporter.context = this; - logWarn(`====== ${rootType} ========`); + logWarn(`====== tab-view-root ========`); driver = await createDriver(); + await driver.restartApp(); screen = new TabViewNavigationScreen(driver); - if (dontKeepActivities) { - await driver.setDontKeepActivities(true); - } - + await driver.setDontKeepActivities(dontKeepActivities); driver.defaultWaitTime = 8000; }); @@ -29,6 +26,10 @@ describe(rootType, async function () { if (dontKeepActivities) { await driver.setDontKeepActivities(false); } + if (driver.isIOS) { + roots.shift(); + logWarn("TabViewTop is Android only scenario (for iOS it will be skipped)"); + } await driver.quit(); console.log("Quit driver!"); }); @@ -41,7 +42,7 @@ describe(rootType, async function () { for (let index = 0; index < roots.length; index++) { const root = roots[index]; - describe(`${rootType}-${root}-scenarios:`, async function () { + describe(`tab-view-root-${root}-scenario:`, async function () { before(async function () { nsCapabilities.testReporter.context = this; @@ -55,16 +56,16 @@ describe(rootType, async function () { const teamOne = teamsData[`teamOne${transition}`]; const teamTwo = teamsData[`teamTwo${transition}`]; - describe(`${rootType}-${root}-transition-${transition}-scenarios:`, async function () { + describe(`tab-view-root-${root}-transition-${transition}-scenario:`, async function () { before(async function () { nsCapabilities.testReporter.context = this; - - if (transition === "Flip" && - driver.isAndroid && parseInt(driver.platformVersion) === 19) { + if (shared.isApiLevel19(driver) && (transition === "None" || transition === "Flip")) { // TODO: known issue https://github.com/NativeScript/NativeScript/issues/6798 - console.log("skipping flip transition tests on api level 19"); + logWarn("Skipping flip or none transition tests on api level 19"); this.skip(); + } else { + logWarn(`========= ${root}-${transition} =========`); } }); diff --git a/e2e/scoped-packages/app/generated-tests/tests.ts b/e2e/scoped-packages/app/generated-tests/tests.ts index 173a52195..9f6815826 100644 --- a/e2e/scoped-packages/app/generated-tests/tests.ts +++ b/e2e/scoped-packages/app/generated-tests/tests.ts @@ -18,10 +18,22 @@ import * as module_application_settings_application_settings_core from "@natives import * as module_application_settings_application_settings_compat from "tns-core-modules/application-settings/application-settings"; compare("application-settings/application-settings", module_application_settings_application_settings_core, module_application_settings_application_settings_compat); +import * as module_application_settings_application_settings_common_core from "@nativescript/core/application-settings/application-settings-common"; +import * as module_application_settings_application_settings_common_compat from "tns-core-modules/application-settings/application-settings-common"; +compare("application-settings/application-settings-common", module_application_settings_application_settings_common_core, module_application_settings_application_settings_common_compat); + import * as module_application_application_core from "@nativescript/core/application/application"; import * as module_application_application_compat from "tns-core-modules/application/application"; compare("application/application", module_application_application_core, module_application_application_compat); +import * as module_application_application_common_core from "@nativescript/core/application/application-common"; +import * as module_application_application_common_compat from "tns-core-modules/application/application-common"; +compare("application/application-common", module_application_application_common_core, module_application_application_common_compat); + +import * as module_bundle_entry_points_core from "@nativescript/core/bundle-entry-points"; +import * as module_bundle_entry_points_compat from "tns-core-modules/bundle-entry-points"; +compare("bundle-entry-points", module_bundle_entry_points_core, module_bundle_entry_points_compat); + import * as module_color_core from "@nativescript/core/color"; import * as module_color_compat from "tns-core-modules/color"; compare("color", module_color_core, module_color_compat); @@ -30,6 +42,10 @@ import * as module_color_color_core from "@nativescript/core/color/color"; import * as module_color_color_compat from "tns-core-modules/color/color"; compare("color/color", module_color_color_core, module_color_color_compat); +import * as module_color_color_common_core from "@nativescript/core/color/color-common"; +import * as module_color_color_common_compat from "tns-core-modules/color/color-common"; +compare("color/color-common", module_color_color_common_core, module_color_color_common_compat); + import * as module_color_known_colors_core from "@nativescript/core/color/known-colors"; import * as module_color_known_colors_compat from "tns-core-modules/color/known-colors"; compare("color/known-colors", module_color_known_colors_core, module_color_known_colors_compat); @@ -62,6 +78,10 @@ import * as module_css_value_reworkcss_value_core from "@nativescript/core/css-v import * as module_css_value_reworkcss_value_compat from "tns-core-modules/css-value/reworkcss-value"; compare("css-value/reworkcss-value", module_css_value_reworkcss_value_core, module_css_value_reworkcss_value_compat); +import * as module_css_parser_core from "@nativescript/core/css/parser"; +import * as module_css_parser_compat from "tns-core-modules/css/parser"; +compare("css/parser", module_css_parser_core, module_css_parser_compat); + import * as module_css_reworkcss_core from "@nativescript/core/css/reworkcss"; import * as module_css_reworkcss_compat from "tns-core-modules/css/reworkcss"; compare("css/reworkcss", module_css_reworkcss_core, module_css_reworkcss_compat); @@ -106,6 +126,10 @@ import * as module_debugger_devtools_elements_core from "@nativescript/core/debu import * as module_debugger_devtools_elements_compat from "tns-core-modules/debugger/devtools-elements"; compare("debugger/devtools-elements", module_debugger_devtools_elements_core, module_debugger_devtools_elements_compat); +import * as module_debugger_devtools_elements_common_core from "@nativescript/core/debugger/devtools-elements.common"; +import * as module_debugger_devtools_elements_common_compat from "tns-core-modules/debugger/devtools-elements.common"; +compare("debugger/devtools-elements.common", module_debugger_devtools_elements_common_core, module_debugger_devtools_elements_common_compat); + import * as module_debugger_dom_node_core from "@nativescript/core/debugger/dom-node"; import * as module_debugger_dom_node_compat from "tns-core-modules/debugger/dom-node"; compare("debugger/dom-node", module_debugger_dom_node_core, module_debugger_dom_node_compat); @@ -162,6 +186,10 @@ import * as module_globals_core_globals_core_core from "@nativescript/core/globa import * as module_globals_core_globals_core_compat from "tns-core-modules/globals/core/globals-core"; compare("globals/core/globals-core", module_globals_core_globals_core_core, module_globals_core_globals_core_compat); +import * as module_globals_decorators_core from "@nativescript/core/globals/decorators"; +import * as module_globals_decorators_compat from "tns-core-modules/globals/decorators"; +compare("globals/decorators", module_globals_decorators_core, module_globals_decorators_compat); + import * as module_globals_globals_core from "@nativescript/core/globals/globals"; import * as module_globals_globals_compat from "tns-core-modules/globals/globals"; compare("globals/globals", module_globals_globals_core, module_globals_globals_compat); @@ -206,6 +234,14 @@ import * as module_globals_polyfills_xhr_xhr_core from "@nativescript/core/globa import * as module_globals_polyfills_xhr_xhr_compat from "tns-core-modules/globals/polyfills/xhr/xhr"; compare("globals/polyfills/xhr/xhr", module_globals_polyfills_xhr_xhr_core, module_globals_polyfills_xhr_xhr_compat); +import * as module_globals_register_module_helpers_core from "@nativescript/core/globals/register-module-helpers"; +import * as module_globals_register_module_helpers_compat from "tns-core-modules/globals/register-module-helpers"; +compare("globals/register-module-helpers", module_globals_register_module_helpers_core, module_globals_register_module_helpers_compat); + +import * as module_globals_ts_helpers_core from "@nativescript/core/globals/ts-helpers"; +import * as module_globals_ts_helpers_compat from "tns-core-modules/globals/ts-helpers"; +compare("globals/ts-helpers", module_globals_ts_helpers_core, module_globals_ts_helpers_compat); + import * as module_http_core from "@nativescript/core/http"; import * as module_http_compat from "tns-core-modules/http"; compare("http", module_http_core, module_http_compat); @@ -222,6 +258,10 @@ import * as module_http_http_request_http_request_core from "@nativescript/core/ import * as module_http_http_request_http_request_compat from "tns-core-modules/http/http-request/http-request"; compare("http/http-request/http-request", module_http_http_request_http_request_core, module_http_http_request_http_request_compat); +import * as module_http_http_request_http_request_common_core from "@nativescript/core/http/http-request/http-request-common"; +import * as module_http_http_request_http_request_common_compat from "tns-core-modules/http/http-request/http-request-common"; +compare("http/http-request/http-request-common", module_http_http_request_http_request_common_core, module_http_http_request_http_request_common_compat); + import * as module_image_asset_core from "@nativescript/core/image-asset"; import * as module_image_asset_compat from "tns-core-modules/image-asset"; compare("image-asset", module_image_asset_core, module_image_asset_compat); @@ -230,6 +270,10 @@ import * as module_image_asset_image_asset_core from "@nativescript/core/image-a import * as module_image_asset_image_asset_compat from "tns-core-modules/image-asset/image-asset"; compare("image-asset/image-asset", module_image_asset_image_asset_core, module_image_asset_image_asset_compat); +import * as module_image_asset_image_asset_common_core from "@nativescript/core/image-asset/image-asset-common"; +import * as module_image_asset_image_asset_common_compat from "tns-core-modules/image-asset/image-asset-common"; +compare("image-asset/image-asset-common", module_image_asset_image_asset_common_core, module_image_asset_image_asset_common_compat); + import * as module_image_source_core from "@nativescript/core/image-source"; import * as module_image_source_compat from "tns-core-modules/image-source"; compare("image-source", module_image_source_core, module_image_source_compat); @@ -282,6 +326,10 @@ import * as module_module_name_resolver_module_name_resolver_core from "@natives import * as module_module_name_resolver_module_name_resolver_compat from "tns-core-modules/module-name-resolver/module-name-resolver"; compare("module-name-resolver/module-name-resolver", module_module_name_resolver_module_name_resolver_core, module_module_name_resolver_module_name_resolver_compat); +import * as module_module_name_resolver_non_bundle_workflow_compat_core from "@nativescript/core/module-name-resolver/non-bundle-workflow-compat"; +import * as module_module_name_resolver_non_bundle_workflow_compat_compat from "tns-core-modules/module-name-resolver/non-bundle-workflow-compat"; +compare("module-name-resolver/non-bundle-workflow-compat", module_module_name_resolver_non_bundle_workflow_compat_core, module_module_name_resolver_non_bundle_workflow_compat_compat); + import * as module_module_name_resolver_qualifier_matcher_core from "@nativescript/core/module-name-resolver/qualifier-matcher"; import * as module_module_name_resolver_qualifier_matcher_compat from "tns-core-modules/module-name-resolver/qualifier-matcher"; compare("module-name-resolver/qualifier-matcher", module_module_name_resolver_qualifier_matcher_core, module_module_name_resolver_qualifier_matcher_compat); @@ -350,6 +398,10 @@ import * as module_ui_action_bar_action_bar_core from "@nativescript/core/ui/act import * as module_ui_action_bar_action_bar_compat from "tns-core-modules/ui/action-bar/action-bar"; compare("ui/action-bar/action-bar", module_ui_action_bar_action_bar_core, module_ui_action_bar_action_bar_compat); +import * as module_ui_action_bar_action_bar_common_core from "@nativescript/core/ui/action-bar/action-bar-common"; +import * as module_ui_action_bar_action_bar_common_compat from "tns-core-modules/ui/action-bar/action-bar-common"; +compare("ui/action-bar/action-bar-common", module_ui_action_bar_action_bar_common_core, module_ui_action_bar_action_bar_common_compat); + import * as module_ui_activity_indicator_core from "@nativescript/core/ui/activity-indicator"; import * as module_ui_activity_indicator_compat from "tns-core-modules/ui/activity-indicator"; compare("ui/activity-indicator", module_ui_activity_indicator_core, module_ui_activity_indicator_compat); @@ -358,6 +410,10 @@ import * as module_ui_activity_indicator_activity_indicator_core from "@nativesc import * as module_ui_activity_indicator_activity_indicator_compat from "tns-core-modules/ui/activity-indicator/activity-indicator"; compare("ui/activity-indicator/activity-indicator", module_ui_activity_indicator_activity_indicator_core, module_ui_activity_indicator_activity_indicator_compat); +import * as module_ui_activity_indicator_activity_indicator_common_core from "@nativescript/core/ui/activity-indicator/activity-indicator-common"; +import * as module_ui_activity_indicator_activity_indicator_common_compat from "tns-core-modules/ui/activity-indicator/activity-indicator-common"; +compare("ui/activity-indicator/activity-indicator-common", module_ui_activity_indicator_activity_indicator_common_core, module_ui_activity_indicator_activity_indicator_common_compat); + import * as module_ui_animation_core from "@nativescript/core/ui/animation"; import * as module_ui_animation_compat from "tns-core-modules/ui/animation"; compare("ui/animation", module_ui_animation_core, module_ui_animation_compat); @@ -366,6 +422,10 @@ import * as module_ui_animation_animation_core from "@nativescript/core/ui/anima import * as module_ui_animation_animation_compat from "tns-core-modules/ui/animation/animation"; compare("ui/animation/animation", module_ui_animation_animation_core, module_ui_animation_animation_compat); +import * as module_ui_animation_animation_common_core from "@nativescript/core/ui/animation/animation-common"; +import * as module_ui_animation_animation_common_compat from "tns-core-modules/ui/animation/animation-common"; +compare("ui/animation/animation-common", module_ui_animation_animation_common_core, module_ui_animation_animation_common_compat); + import * as module_ui_animation_keyframe_animation_core from "@nativescript/core/ui/animation/keyframe-animation"; import * as module_ui_animation_keyframe_animation_compat from "tns-core-modules/ui/animation/keyframe-animation"; compare("ui/animation/keyframe-animation", module_ui_animation_keyframe_animation_core, module_ui_animation_keyframe_animation_compat); @@ -390,6 +450,10 @@ import * as module_ui_builder_core from "@nativescript/core/ui/builder"; import * as module_ui_builder_compat from "tns-core-modules/ui/builder"; compare("ui/builder", module_ui_builder_core, module_ui_builder_compat); +import * as module_ui_builder_binding_builder_core from "@nativescript/core/ui/builder/binding-builder"; +import * as module_ui_builder_binding_builder_compat from "tns-core-modules/ui/builder/binding-builder"; +compare("ui/builder/binding-builder", module_ui_builder_binding_builder_core, module_ui_builder_binding_builder_compat); + import * as module_ui_builder_builder_core from "@nativescript/core/ui/builder/builder"; import * as module_ui_builder_builder_compat from "tns-core-modules/ui/builder/builder"; compare("ui/builder/builder", module_ui_builder_builder_core, module_ui_builder_builder_compat); @@ -414,6 +478,10 @@ import * as module_ui_button_button_core from "@nativescript/core/ui/button/butt import * as module_ui_button_button_compat from "tns-core-modules/ui/button/button"; compare("ui/button/button", module_ui_button_button_core, module_ui_button_button_compat); +import * as module_ui_button_button_common_core from "@nativescript/core/ui/button/button-common"; +import * as module_ui_button_button_common_compat from "tns-core-modules/ui/button/button-common"; +compare("ui/button/button-common", module_ui_button_button_common_core, module_ui_button_button_common_compat); + import * as module_ui_content_view_core from "@nativescript/core/ui/content-view"; import * as module_ui_content_view_compat from "tns-core-modules/ui/content-view"; compare("ui/content-view", module_ui_content_view_core, module_ui_content_view_compat); @@ -462,6 +530,10 @@ import * as module_ui_core_view_view_core from "@nativescript/core/ui/core/view/ import * as module_ui_core_view_view_compat from "tns-core-modules/ui/core/view/view"; compare("ui/core/view/view", module_ui_core_view_view_core, module_ui_core_view_view_compat); +import * as module_ui_core_view_view_common_core from "@nativescript/core/ui/core/view/view-common"; +import * as module_ui_core_view_view_common_compat from "tns-core-modules/ui/core/view/view-common"; +compare("ui/core/view/view-common", module_ui_core_view_view_common_core, module_ui_core_view_view_common_compat); + import * as module_ui_core_weak_event_listener_core from "@nativescript/core/ui/core/weak-event-listener"; import * as module_ui_core_weak_event_listener_compat from "tns-core-modules/ui/core/weak-event-listener"; compare("ui/core/weak-event-listener", module_ui_core_weak_event_listener_core, module_ui_core_weak_event_listener_compat); @@ -478,6 +550,10 @@ import * as module_ui_date_picker_date_picker_core from "@nativescript/core/ui/d import * as module_ui_date_picker_date_picker_compat from "tns-core-modules/ui/date-picker/date-picker"; compare("ui/date-picker/date-picker", module_ui_date_picker_date_picker_core, module_ui_date_picker_date_picker_compat); +import * as module_ui_date_picker_date_picker_common_core from "@nativescript/core/ui/date-picker/date-picker-common"; +import * as module_ui_date_picker_date_picker_common_compat from "tns-core-modules/ui/date-picker/date-picker-common"; +compare("ui/date-picker/date-picker-common", module_ui_date_picker_date_picker_common_core, module_ui_date_picker_date_picker_common_compat); + import * as module_ui_dialogs_core from "@nativescript/core/ui/dialogs"; import * as module_ui_dialogs_compat from "tns-core-modules/ui/dialogs"; compare("ui/dialogs", module_ui_dialogs_core, module_ui_dialogs_compat); @@ -486,6 +562,10 @@ import * as module_ui_dialogs_dialogs_core from "@nativescript/core/ui/dialogs/d import * as module_ui_dialogs_dialogs_compat from "tns-core-modules/ui/dialogs/dialogs"; compare("ui/dialogs/dialogs", module_ui_dialogs_dialogs_core, module_ui_dialogs_dialogs_compat); +import * as module_ui_dialogs_dialogs_common_core from "@nativescript/core/ui/dialogs/dialogs-common"; +import * as module_ui_dialogs_dialogs_common_compat from "tns-core-modules/ui/dialogs/dialogs-common"; +compare("ui/dialogs/dialogs-common", module_ui_dialogs_dialogs_common_core, module_ui_dialogs_dialogs_common_compat); + import * as module_ui_editable_text_base_core from "@nativescript/core/ui/editable-text-base"; import * as module_ui_editable_text_base_compat from "tns-core-modules/ui/editable-text-base"; compare("ui/editable-text-base", module_ui_editable_text_base_core, module_ui_editable_text_base_compat); @@ -494,6 +574,10 @@ import * as module_ui_editable_text_base_editable_text_base_core from "@nativesc import * as module_ui_editable_text_base_editable_text_base_compat from "tns-core-modules/ui/editable-text-base/editable-text-base"; compare("ui/editable-text-base/editable-text-base", module_ui_editable_text_base_editable_text_base_core, module_ui_editable_text_base_editable_text_base_compat); +import * as module_ui_editable_text_base_editable_text_base_common_core from "@nativescript/core/ui/editable-text-base/editable-text-base-common"; +import * as module_ui_editable_text_base_editable_text_base_common_compat from "tns-core-modules/ui/editable-text-base/editable-text-base-common"; +compare("ui/editable-text-base/editable-text-base-common", module_ui_editable_text_base_editable_text_base_common_core, module_ui_editable_text_base_editable_text_base_common_compat); + import * as module_ui_enums_core from "@nativescript/core/ui/enums"; import * as module_ui_enums_compat from "tns-core-modules/ui/enums"; compare("ui/enums", module_ui_enums_core, module_ui_enums_compat); @@ -510,10 +594,22 @@ import * as module_ui_frame_fragment_transitions_core from "@nativescript/core/u import * as module_ui_frame_fragment_transitions_compat from "tns-core-modules/ui/frame/fragment.transitions"; compare("ui/frame/fragment.transitions", module_ui_frame_fragment_transitions_core, module_ui_frame_fragment_transitions_compat); +import * as module_ui_frame_fragment_transitions_types_core from "@nativescript/core/ui/frame/fragment.transitions.types"; +import * as module_ui_frame_fragment_transitions_types_compat from "tns-core-modules/ui/frame/fragment.transitions.types"; +compare("ui/frame/fragment.transitions.types", module_ui_frame_fragment_transitions_types_core, module_ui_frame_fragment_transitions_types_compat); + import * as module_ui_frame_frame_core from "@nativescript/core/ui/frame/frame"; import * as module_ui_frame_frame_compat from "tns-core-modules/ui/frame/frame"; compare("ui/frame/frame", module_ui_frame_frame_core, module_ui_frame_frame_compat); +import * as module_ui_frame_frame_common_core from "@nativescript/core/ui/frame/frame-common"; +import * as module_ui_frame_frame_common_compat from "tns-core-modules/ui/frame/frame-common"; +compare("ui/frame/frame-common", module_ui_frame_frame_common_core, module_ui_frame_frame_common_compat); + +import * as module_ui_frame_frame_stack_core from "@nativescript/core/ui/frame/frame-stack"; +import * as module_ui_frame_frame_stack_compat from "tns-core-modules/ui/frame/frame-stack"; +compare("ui/frame/frame-stack", module_ui_frame_frame_stack_core, module_ui_frame_frame_stack_compat); + import * as module_ui_gestures_core from "@nativescript/core/ui/gestures"; import * as module_ui_gestures_compat from "tns-core-modules/ui/gestures"; compare("ui/gestures", module_ui_gestures_core, module_ui_gestures_compat); @@ -522,6 +618,10 @@ import * as module_ui_gestures_gestures_core from "@nativescript/core/ui/gesture import * as module_ui_gestures_gestures_compat from "tns-core-modules/ui/gestures/gestures"; compare("ui/gestures/gestures", module_ui_gestures_gestures_core, module_ui_gestures_gestures_compat); +import * as module_ui_gestures_gestures_common_core from "@nativescript/core/ui/gestures/gestures-common"; +import * as module_ui_gestures_gestures_common_compat from "tns-core-modules/ui/gestures/gestures-common"; +compare("ui/gestures/gestures-common", module_ui_gestures_gestures_common_core, module_ui_gestures_gestures_common_compat); + import * as module_ui_html_view_core from "@nativescript/core/ui/html-view"; import * as module_ui_html_view_compat from "tns-core-modules/ui/html-view"; compare("ui/html-view", module_ui_html_view_core, module_ui_html_view_compat); @@ -530,6 +630,10 @@ import * as module_ui_html_view_html_view_core from "@nativescript/core/ui/html- import * as module_ui_html_view_html_view_compat from "tns-core-modules/ui/html-view/html-view"; compare("ui/html-view/html-view", module_ui_html_view_html_view_core, module_ui_html_view_html_view_compat); +import * as module_ui_html_view_html_view_common_core from "@nativescript/core/ui/html-view/html-view-common"; +import * as module_ui_html_view_html_view_common_compat from "tns-core-modules/ui/html-view/html-view-common"; +compare("ui/html-view/html-view-common", module_ui_html_view_html_view_common_core, module_ui_html_view_html_view_common_compat); + import * as module_ui_image_core from "@nativescript/core/ui/image"; import * as module_ui_image_compat from "tns-core-modules/ui/image"; compare("ui/image", module_ui_image_core, module_ui_image_compat); @@ -542,10 +646,18 @@ import * as module_ui_image_cache_image_cache_core from "@nativescript/core/ui/i import * as module_ui_image_cache_image_cache_compat from "tns-core-modules/ui/image-cache/image-cache"; compare("ui/image-cache/image-cache", module_ui_image_cache_image_cache_core, module_ui_image_cache_image_cache_compat); +import * as module_ui_image_cache_image_cache_common_core from "@nativescript/core/ui/image-cache/image-cache-common"; +import * as module_ui_image_cache_image_cache_common_compat from "tns-core-modules/ui/image-cache/image-cache-common"; +compare("ui/image-cache/image-cache-common", module_ui_image_cache_image_cache_common_core, module_ui_image_cache_image_cache_common_compat); + import * as module_ui_image_image_core from "@nativescript/core/ui/image/image"; import * as module_ui_image_image_compat from "tns-core-modules/ui/image/image"; compare("ui/image/image", module_ui_image_image_core, module_ui_image_image_compat); +import * as module_ui_image_image_common_core from "@nativescript/core/ui/image/image-common"; +import * as module_ui_image_image_common_compat from "tns-core-modules/ui/image/image-common"; +compare("ui/image/image-common", module_ui_image_image_common_core, module_ui_image_image_common_compat); + import * as module_ui_index_core from "@nativescript/core/ui/index"; import * as module_ui_index_compat from "tns-core-modules/ui/index"; compare("ui/index", module_ui_index_core, module_ui_index_compat); @@ -570,6 +682,10 @@ import * as module_ui_layouts_absolute_layout_absolute_layout_core from "@native import * as module_ui_layouts_absolute_layout_absolute_layout_compat from "tns-core-modules/ui/layouts/absolute-layout/absolute-layout"; compare("ui/layouts/absolute-layout/absolute-layout", module_ui_layouts_absolute_layout_absolute_layout_core, module_ui_layouts_absolute_layout_absolute_layout_compat); +import * as module_ui_layouts_absolute_layout_absolute_layout_common_core from "@nativescript/core/ui/layouts/absolute-layout/absolute-layout-common"; +import * as module_ui_layouts_absolute_layout_absolute_layout_common_compat from "tns-core-modules/ui/layouts/absolute-layout/absolute-layout-common"; +compare("ui/layouts/absolute-layout/absolute-layout-common", module_ui_layouts_absolute_layout_absolute_layout_common_core, module_ui_layouts_absolute_layout_absolute_layout_common_compat); + import * as module_ui_layouts_dock_layout_core from "@nativescript/core/ui/layouts/dock-layout"; import * as module_ui_layouts_dock_layout_compat from "tns-core-modules/ui/layouts/dock-layout"; compare("ui/layouts/dock-layout", module_ui_layouts_dock_layout_core, module_ui_layouts_dock_layout_compat); @@ -578,6 +694,10 @@ import * as module_ui_layouts_dock_layout_dock_layout_core from "@nativescript/c import * as module_ui_layouts_dock_layout_dock_layout_compat from "tns-core-modules/ui/layouts/dock-layout/dock-layout"; compare("ui/layouts/dock-layout/dock-layout", module_ui_layouts_dock_layout_dock_layout_core, module_ui_layouts_dock_layout_dock_layout_compat); +import * as module_ui_layouts_dock_layout_dock_layout_common_core from "@nativescript/core/ui/layouts/dock-layout/dock-layout-common"; +import * as module_ui_layouts_dock_layout_dock_layout_common_compat from "tns-core-modules/ui/layouts/dock-layout/dock-layout-common"; +compare("ui/layouts/dock-layout/dock-layout-common", module_ui_layouts_dock_layout_dock_layout_common_core, module_ui_layouts_dock_layout_dock_layout_common_compat); + import * as module_ui_layouts_flexbox_layout_core from "@nativescript/core/ui/layouts/flexbox-layout"; import * as module_ui_layouts_flexbox_layout_compat from "tns-core-modules/ui/layouts/flexbox-layout"; compare("ui/layouts/flexbox-layout", module_ui_layouts_flexbox_layout_core, module_ui_layouts_flexbox_layout_compat); @@ -586,6 +706,10 @@ import * as module_ui_layouts_flexbox_layout_flexbox_layout_core from "@nativesc import * as module_ui_layouts_flexbox_layout_flexbox_layout_compat from "tns-core-modules/ui/layouts/flexbox-layout/flexbox-layout"; compare("ui/layouts/flexbox-layout/flexbox-layout", module_ui_layouts_flexbox_layout_flexbox_layout_core, module_ui_layouts_flexbox_layout_flexbox_layout_compat); +import * as module_ui_layouts_flexbox_layout_flexbox_layout_common_core from "@nativescript/core/ui/layouts/flexbox-layout/flexbox-layout-common"; +import * as module_ui_layouts_flexbox_layout_flexbox_layout_common_compat from "tns-core-modules/ui/layouts/flexbox-layout/flexbox-layout-common"; +compare("ui/layouts/flexbox-layout/flexbox-layout-common", module_ui_layouts_flexbox_layout_flexbox_layout_common_core, module_ui_layouts_flexbox_layout_flexbox_layout_common_compat); + import * as module_ui_layouts_grid_layout_core from "@nativescript/core/ui/layouts/grid-layout"; import * as module_ui_layouts_grid_layout_compat from "tns-core-modules/ui/layouts/grid-layout"; compare("ui/layouts/grid-layout", module_ui_layouts_grid_layout_core, module_ui_layouts_grid_layout_compat); @@ -594,6 +718,10 @@ import * as module_ui_layouts_grid_layout_grid_layout_core from "@nativescript/c import * as module_ui_layouts_grid_layout_grid_layout_compat from "tns-core-modules/ui/layouts/grid-layout/grid-layout"; compare("ui/layouts/grid-layout/grid-layout", module_ui_layouts_grid_layout_grid_layout_core, module_ui_layouts_grid_layout_grid_layout_compat); +import * as module_ui_layouts_grid_layout_grid_layout_common_core from "@nativescript/core/ui/layouts/grid-layout/grid-layout-common"; +import * as module_ui_layouts_grid_layout_grid_layout_common_compat from "tns-core-modules/ui/layouts/grid-layout/grid-layout-common"; +compare("ui/layouts/grid-layout/grid-layout-common", module_ui_layouts_grid_layout_grid_layout_common_core, module_ui_layouts_grid_layout_grid_layout_common_compat); + import * as module_ui_layouts_index_core from "@nativescript/core/ui/layouts/index"; import * as module_ui_layouts_index_compat from "tns-core-modules/ui/layouts/index"; compare("ui/layouts/index", module_ui_layouts_index_core, module_ui_layouts_index_compat); @@ -602,6 +730,10 @@ import * as module_ui_layouts_layout_base_core from "@nativescript/core/ui/layou import * as module_ui_layouts_layout_base_compat from "tns-core-modules/ui/layouts/layout-base"; compare("ui/layouts/layout-base", module_ui_layouts_layout_base_core, module_ui_layouts_layout_base_compat); +import * as module_ui_layouts_layout_base_common_core from "@nativescript/core/ui/layouts/layout-base-common"; +import * as module_ui_layouts_layout_base_common_compat from "tns-core-modules/ui/layouts/layout-base-common"; +compare("ui/layouts/layout-base-common", module_ui_layouts_layout_base_common_core, module_ui_layouts_layout_base_common_compat); + import * as module_ui_layouts_stack_layout_core from "@nativescript/core/ui/layouts/stack-layout"; import * as module_ui_layouts_stack_layout_compat from "tns-core-modules/ui/layouts/stack-layout"; compare("ui/layouts/stack-layout", module_ui_layouts_stack_layout_core, module_ui_layouts_stack_layout_compat); @@ -610,6 +742,10 @@ import * as module_ui_layouts_stack_layout_stack_layout_core from "@nativescript import * as module_ui_layouts_stack_layout_stack_layout_compat from "tns-core-modules/ui/layouts/stack-layout/stack-layout"; compare("ui/layouts/stack-layout/stack-layout", module_ui_layouts_stack_layout_stack_layout_core, module_ui_layouts_stack_layout_stack_layout_compat); +import * as module_ui_layouts_stack_layout_stack_layout_common_core from "@nativescript/core/ui/layouts/stack-layout/stack-layout-common"; +import * as module_ui_layouts_stack_layout_stack_layout_common_compat from "tns-core-modules/ui/layouts/stack-layout/stack-layout-common"; +compare("ui/layouts/stack-layout/stack-layout-common", module_ui_layouts_stack_layout_stack_layout_common_core, module_ui_layouts_stack_layout_stack_layout_common_compat); + import * as module_ui_layouts_wrap_layout_core from "@nativescript/core/ui/layouts/wrap-layout"; import * as module_ui_layouts_wrap_layout_compat from "tns-core-modules/ui/layouts/wrap-layout"; compare("ui/layouts/wrap-layout", module_ui_layouts_wrap_layout_core, module_ui_layouts_wrap_layout_compat); @@ -618,6 +754,10 @@ import * as module_ui_layouts_wrap_layout_wrap_layout_core from "@nativescript/c import * as module_ui_layouts_wrap_layout_wrap_layout_compat from "tns-core-modules/ui/layouts/wrap-layout/wrap-layout"; compare("ui/layouts/wrap-layout/wrap-layout", module_ui_layouts_wrap_layout_wrap_layout_core, module_ui_layouts_wrap_layout_wrap_layout_compat); +import * as module_ui_layouts_wrap_layout_wrap_layout_common_core from "@nativescript/core/ui/layouts/wrap-layout/wrap-layout-common"; +import * as module_ui_layouts_wrap_layout_wrap_layout_common_compat from "tns-core-modules/ui/layouts/wrap-layout/wrap-layout-common"; +compare("ui/layouts/wrap-layout/wrap-layout-common", module_ui_layouts_wrap_layout_wrap_layout_common_core, module_ui_layouts_wrap_layout_wrap_layout_common_compat); + import * as module_ui_list_picker_core from "@nativescript/core/ui/list-picker"; import * as module_ui_list_picker_compat from "tns-core-modules/ui/list-picker"; compare("ui/list-picker", module_ui_list_picker_core, module_ui_list_picker_compat); @@ -626,6 +766,10 @@ import * as module_ui_list_picker_list_picker_core from "@nativescript/core/ui/l import * as module_ui_list_picker_list_picker_compat from "tns-core-modules/ui/list-picker/list-picker"; compare("ui/list-picker/list-picker", module_ui_list_picker_list_picker_core, module_ui_list_picker_list_picker_compat); +import * as module_ui_list_picker_list_picker_common_core from "@nativescript/core/ui/list-picker/list-picker-common"; +import * as module_ui_list_picker_list_picker_common_compat from "tns-core-modules/ui/list-picker/list-picker-common"; +compare("ui/list-picker/list-picker-common", module_ui_list_picker_list_picker_common_core, module_ui_list_picker_list_picker_common_compat); + import * as module_ui_list_view_core from "@nativescript/core/ui/list-view"; import * as module_ui_list_view_compat from "tns-core-modules/ui/list-view"; compare("ui/list-view", module_ui_list_view_core, module_ui_list_view_compat); @@ -634,6 +778,10 @@ import * as module_ui_list_view_list_view_core from "@nativescript/core/ui/list- import * as module_ui_list_view_list_view_compat from "tns-core-modules/ui/list-view/list-view"; compare("ui/list-view/list-view", module_ui_list_view_list_view_core, module_ui_list_view_list_view_compat); +import * as module_ui_list_view_list_view_common_core from "@nativescript/core/ui/list-view/list-view-common"; +import * as module_ui_list_view_list_view_common_compat from "tns-core-modules/ui/list-view/list-view-common"; +compare("ui/list-view/list-view-common", module_ui_list_view_list_view_common_core, module_ui_list_view_list_view_common_compat); + import * as module_ui_page_core from "@nativescript/core/ui/page"; import * as module_ui_page_compat from "tns-core-modules/ui/page"; compare("ui/page", module_ui_page_core, module_ui_page_compat); @@ -642,6 +790,10 @@ import * as module_ui_page_page_core from "@nativescript/core/ui/page/page"; import * as module_ui_page_page_compat from "tns-core-modules/ui/page/page"; compare("ui/page/page", module_ui_page_page_core, module_ui_page_page_compat); +import * as module_ui_page_page_common_core from "@nativescript/core/ui/page/page-common"; +import * as module_ui_page_page_common_compat from "tns-core-modules/ui/page/page-common"; +compare("ui/page/page-common", module_ui_page_page_common_core, module_ui_page_page_common_compat); + import * as module_ui_placeholder_core from "@nativescript/core/ui/placeholder"; import * as module_ui_placeholder_compat from "tns-core-modules/ui/placeholder"; compare("ui/placeholder", module_ui_placeholder_core, module_ui_placeholder_compat); @@ -658,6 +810,10 @@ import * as module_ui_progress_progress_core from "@nativescript/core/ui/progres import * as module_ui_progress_progress_compat from "tns-core-modules/ui/progress/progress"; compare("ui/progress/progress", module_ui_progress_progress_core, module_ui_progress_progress_compat); +import * as module_ui_progress_progress_common_core from "@nativescript/core/ui/progress/progress-common"; +import * as module_ui_progress_progress_common_compat from "tns-core-modules/ui/progress/progress-common"; +compare("ui/progress/progress-common", module_ui_progress_progress_common_core, module_ui_progress_progress_common_compat); + import * as module_ui_proxy_view_container_core from "@nativescript/core/ui/proxy-view-container"; import * as module_ui_proxy_view_container_compat from "tns-core-modules/ui/proxy-view-container"; compare("ui/proxy-view-container", module_ui_proxy_view_container_core, module_ui_proxy_view_container_compat); @@ -682,6 +838,10 @@ import * as module_ui_scroll_view_scroll_view_core from "@nativescript/core/ui/s import * as module_ui_scroll_view_scroll_view_compat from "tns-core-modules/ui/scroll-view/scroll-view"; compare("ui/scroll-view/scroll-view", module_ui_scroll_view_scroll_view_core, module_ui_scroll_view_scroll_view_compat); +import * as module_ui_scroll_view_scroll_view_common_core from "@nativescript/core/ui/scroll-view/scroll-view-common"; +import * as module_ui_scroll_view_scroll_view_common_compat from "tns-core-modules/ui/scroll-view/scroll-view-common"; +compare("ui/scroll-view/scroll-view-common", module_ui_scroll_view_scroll_view_common_core, module_ui_scroll_view_scroll_view_common_compat); + import * as module_ui_search_bar_core from "@nativescript/core/ui/search-bar"; import * as module_ui_search_bar_compat from "tns-core-modules/ui/search-bar"; compare("ui/search-bar", module_ui_search_bar_core, module_ui_search_bar_compat); @@ -690,6 +850,10 @@ import * as module_ui_search_bar_search_bar_core from "@nativescript/core/ui/sea import * as module_ui_search_bar_search_bar_compat from "tns-core-modules/ui/search-bar/search-bar"; compare("ui/search-bar/search-bar", module_ui_search_bar_search_bar_core, module_ui_search_bar_search_bar_compat); +import * as module_ui_search_bar_search_bar_common_core from "@nativescript/core/ui/search-bar/search-bar-common"; +import * as module_ui_search_bar_search_bar_common_compat from "tns-core-modules/ui/search-bar/search-bar-common"; +compare("ui/search-bar/search-bar-common", module_ui_search_bar_search_bar_common_core, module_ui_search_bar_search_bar_common_compat); + import * as module_ui_segmented_bar_core from "@nativescript/core/ui/segmented-bar"; import * as module_ui_segmented_bar_compat from "tns-core-modules/ui/segmented-bar"; compare("ui/segmented-bar", module_ui_segmented_bar_core, module_ui_segmented_bar_compat); @@ -698,6 +862,10 @@ import * as module_ui_segmented_bar_segmented_bar_core from "@nativescript/core/ import * as module_ui_segmented_bar_segmented_bar_compat from "tns-core-modules/ui/segmented-bar/segmented-bar"; compare("ui/segmented-bar/segmented-bar", module_ui_segmented_bar_segmented_bar_core, module_ui_segmented_bar_segmented_bar_compat); +import * as module_ui_segmented_bar_segmented_bar_common_core from "@nativescript/core/ui/segmented-bar/segmented-bar-common"; +import * as module_ui_segmented_bar_segmented_bar_common_compat from "tns-core-modules/ui/segmented-bar/segmented-bar-common"; +compare("ui/segmented-bar/segmented-bar-common", module_ui_segmented_bar_segmented_bar_common_core, module_ui_segmented_bar_segmented_bar_common_compat); + import * as module_ui_slider_core from "@nativescript/core/ui/slider"; import * as module_ui_slider_compat from "tns-core-modules/ui/slider"; compare("ui/slider", module_ui_slider_core, module_ui_slider_compat); @@ -706,10 +874,26 @@ import * as module_ui_slider_slider_core from "@nativescript/core/ui/slider/slid import * as module_ui_slider_slider_compat from "tns-core-modules/ui/slider/slider"; compare("ui/slider/slider", module_ui_slider_slider_core, module_ui_slider_slider_compat); +import * as module_ui_slider_slider_common_core from "@nativescript/core/ui/slider/slider-common"; +import * as module_ui_slider_slider_common_compat from "tns-core-modules/ui/slider/slider-common"; +compare("ui/slider/slider-common", module_ui_slider_slider_common_core, module_ui_slider_slider_common_compat); + import * as module_ui_styling_background_core from "@nativescript/core/ui/styling/background"; import * as module_ui_styling_background_compat from "tns-core-modules/ui/styling/background"; compare("ui/styling/background", module_ui_styling_background_core, module_ui_styling_background_compat); +import * as module_ui_styling_background_common_core from "@nativescript/core/ui/styling/background-common"; +import * as module_ui_styling_background_common_compat from "tns-core-modules/ui/styling/background-common"; +compare("ui/styling/background-common", module_ui_styling_background_common_core, module_ui_styling_background_common_compat); + +import * as module_ui_styling_converters_core from "@nativescript/core/ui/styling/converters"; +import * as module_ui_styling_converters_compat from "tns-core-modules/ui/styling/converters"; +compare("ui/styling/converters", module_ui_styling_converters_core, module_ui_styling_converters_compat); + +import * as module_ui_styling_css_animation_parser_core from "@nativescript/core/ui/styling/css-animation-parser"; +import * as module_ui_styling_css_animation_parser_compat from "tns-core-modules/ui/styling/css-animation-parser"; +compare("ui/styling/css-animation-parser", module_ui_styling_css_animation_parser_core, module_ui_styling_css_animation_parser_compat); + import * as module_ui_styling_css_selector_core from "@nativescript/core/ui/styling/css-selector"; import * as module_ui_styling_css_selector_compat from "tns-core-modules/ui/styling/css-selector"; compare("ui/styling/css-selector", module_ui_styling_css_selector_core, module_ui_styling_css_selector_compat); @@ -722,6 +906,14 @@ import * as module_ui_styling_font_core from "@nativescript/core/ui/styling/font import * as module_ui_styling_font_compat from "tns-core-modules/ui/styling/font"; compare("ui/styling/font", module_ui_styling_font_core, module_ui_styling_font_compat); +import * as module_ui_styling_font_common_core from "@nativescript/core/ui/styling/font-common"; +import * as module_ui_styling_font_common_compat from "tns-core-modules/ui/styling/font-common"; +compare("ui/styling/font-common", module_ui_styling_font_common_core, module_ui_styling_font_common_compat); + +import * as module_ui_styling_linear_gradient_core from "@nativescript/core/ui/styling/linear-gradient"; +import * as module_ui_styling_linear_gradient_compat from "tns-core-modules/ui/styling/linear-gradient"; +compare("ui/styling/linear-gradient", module_ui_styling_linear_gradient_core, module_ui_styling_linear_gradient_compat); + import * as module_ui_styling_style_core from "@nativescript/core/ui/styling/style"; import * as module_ui_styling_style_compat from "tns-core-modules/ui/styling/style"; compare("ui/styling/style", module_ui_styling_style_core, module_ui_styling_style_compat); @@ -746,6 +938,10 @@ import * as module_ui_switch_switch_core from "@nativescript/core/ui/switch/swit import * as module_ui_switch_switch_compat from "tns-core-modules/ui/switch/switch"; compare("ui/switch/switch", module_ui_switch_switch_core, module_ui_switch_switch_compat); +import * as module_ui_switch_switch_common_core from "@nativescript/core/ui/switch/switch-common"; +import * as module_ui_switch_switch_common_compat from "tns-core-modules/ui/switch/switch-common"; +compare("ui/switch/switch-common", module_ui_switch_switch_common_core, module_ui_switch_switch_common_compat); + import * as module_ui_tab_navigation_base_tab_content_item_core from "@nativescript/core/ui/tab-navigation-base/tab-content-item"; import * as module_ui_tab_navigation_base_tab_content_item_compat from "tns-core-modules/ui/tab-navigation-base/tab-content-item"; compare("ui/tab-navigation-base/tab-content-item", module_ui_tab_navigation_base_tab_content_item_core, module_ui_tab_navigation_base_tab_content_item_compat); @@ -754,6 +950,10 @@ import * as module_ui_tab_navigation_base_tab_content_item_tab_content_item_core import * as module_ui_tab_navigation_base_tab_content_item_tab_content_item_compat from "tns-core-modules/ui/tab-navigation-base/tab-content-item/tab-content-item"; compare("ui/tab-navigation-base/tab-content-item/tab-content-item", module_ui_tab_navigation_base_tab_content_item_tab_content_item_core, module_ui_tab_navigation_base_tab_content_item_tab_content_item_compat); +import * as module_ui_tab_navigation_base_tab_content_item_tab_content_item_common_core from "@nativescript/core/ui/tab-navigation-base/tab-content-item/tab-content-item-common"; +import * as module_ui_tab_navigation_base_tab_content_item_tab_content_item_common_compat from "tns-core-modules/ui/tab-navigation-base/tab-content-item/tab-content-item-common"; +compare("ui/tab-navigation-base/tab-content-item/tab-content-item-common", module_ui_tab_navigation_base_tab_content_item_tab_content_item_common_core, module_ui_tab_navigation_base_tab_content_item_tab_content_item_common_compat); + import * as module_ui_tab_navigation_base_tab_navigation_base_core from "@nativescript/core/ui/tab-navigation-base/tab-navigation-base"; import * as module_ui_tab_navigation_base_tab_navigation_base_compat from "tns-core-modules/ui/tab-navigation-base/tab-navigation-base"; compare("ui/tab-navigation-base/tab-navigation-base", module_ui_tab_navigation_base_tab_navigation_base_core, module_ui_tab_navigation_base_tab_navigation_base_compat); @@ -786,6 +986,10 @@ import * as module_ui_tab_view_tab_view_core from "@nativescript/core/ui/tab-vie import * as module_ui_tab_view_tab_view_compat from "tns-core-modules/ui/tab-view/tab-view"; compare("ui/tab-view/tab-view", module_ui_tab_view_tab_view_core, module_ui_tab_view_tab_view_compat); +import * as module_ui_tab_view_tab_view_common_core from "@nativescript/core/ui/tab-view/tab-view-common"; +import * as module_ui_tab_view_tab_view_common_compat from "tns-core-modules/ui/tab-view/tab-view-common"; +compare("ui/tab-view/tab-view-common", module_ui_tab_view_tab_view_common_core, module_ui_tab_view_tab_view_common_compat); + import * as module_ui_tabs_core from "@nativescript/core/ui/tabs"; import * as module_ui_tabs_compat from "tns-core-modules/ui/tabs"; compare("ui/tabs", module_ui_tabs_core, module_ui_tabs_compat); @@ -794,14 +998,30 @@ import * as module_ui_tabs_tabs_core from "@nativescript/core/ui/tabs/tabs"; import * as module_ui_tabs_tabs_compat from "tns-core-modules/ui/tabs/tabs"; compare("ui/tabs/tabs", module_ui_tabs_tabs_core, module_ui_tabs_tabs_compat); +import * as module_ui_tabs_tabs_common_core from "@nativescript/core/ui/tabs/tabs-common"; +import * as module_ui_tabs_tabs_common_compat from "tns-core-modules/ui/tabs/tabs-common"; +compare("ui/tabs/tabs-common", module_ui_tabs_tabs_common_core, module_ui_tabs_tabs_common_compat); + import * as module_ui_text_base_core from "@nativescript/core/ui/text-base"; import * as module_ui_text_base_compat from "tns-core-modules/ui/text-base"; compare("ui/text-base", module_ui_text_base_core, module_ui_text_base_compat); +import * as module_ui_text_base_formatted_string_core from "@nativescript/core/ui/text-base/formatted-string"; +import * as module_ui_text_base_formatted_string_compat from "tns-core-modules/ui/text-base/formatted-string"; +compare("ui/text-base/formatted-string", module_ui_text_base_formatted_string_core, module_ui_text_base_formatted_string_compat); + +import * as module_ui_text_base_span_core from "@nativescript/core/ui/text-base/span"; +import * as module_ui_text_base_span_compat from "tns-core-modules/ui/text-base/span"; +compare("ui/text-base/span", module_ui_text_base_span_core, module_ui_text_base_span_compat); + import * as module_ui_text_base_text_base_core from "@nativescript/core/ui/text-base/text-base"; import * as module_ui_text_base_text_base_compat from "tns-core-modules/ui/text-base/text-base"; compare("ui/text-base/text-base", module_ui_text_base_text_base_core, module_ui_text_base_text_base_compat); +import * as module_ui_text_base_text_base_common_core from "@nativescript/core/ui/text-base/text-base-common"; +import * as module_ui_text_base_text_base_common_compat from "tns-core-modules/ui/text-base/text-base-common"; +compare("ui/text-base/text-base-common", module_ui_text_base_text_base_common_core, module_ui_text_base_text_base_common_compat); + import * as module_ui_text_field_core from "@nativescript/core/ui/text-field"; import * as module_ui_text_field_compat from "tns-core-modules/ui/text-field"; compare("ui/text-field", module_ui_text_field_core, module_ui_text_field_compat); @@ -810,6 +1030,10 @@ import * as module_ui_text_field_text_field_core from "@nativescript/core/ui/tex import * as module_ui_text_field_text_field_compat from "tns-core-modules/ui/text-field/text-field"; compare("ui/text-field/text-field", module_ui_text_field_text_field_core, module_ui_text_field_text_field_compat); +import * as module_ui_text_field_text_field_common_core from "@nativescript/core/ui/text-field/text-field-common"; +import * as module_ui_text_field_text_field_common_compat from "tns-core-modules/ui/text-field/text-field-common"; +compare("ui/text-field/text-field-common", module_ui_text_field_text_field_common_core, module_ui_text_field_text_field_common_compat); + import * as module_ui_text_view_core from "@nativescript/core/ui/text-view"; import * as module_ui_text_view_compat from "tns-core-modules/ui/text-view"; compare("ui/text-view", module_ui_text_view_core, module_ui_text_view_compat); @@ -826,6 +1050,10 @@ import * as module_ui_time_picker_time_picker_core from "@nativescript/core/ui/t import * as module_ui_time_picker_time_picker_compat from "tns-core-modules/ui/time-picker/time-picker"; compare("ui/time-picker/time-picker", module_ui_time_picker_time_picker_core, module_ui_time_picker_time_picker_compat); +import * as module_ui_time_picker_time_picker_common_core from "@nativescript/core/ui/time-picker/time-picker-common"; +import * as module_ui_time_picker_time_picker_common_compat from "tns-core-modules/ui/time-picker/time-picker-common"; +compare("ui/time-picker/time-picker-common", module_ui_time_picker_time_picker_common_core, module_ui_time_picker_time_picker_common_compat); + import * as module_ui_transition_core from "@nativescript/core/ui/transition"; import * as module_ui_transition_compat from "tns-core-modules/ui/transition"; compare("ui/transition", module_ui_transition_core, module_ui_transition_compat); @@ -854,6 +1082,10 @@ import * as module_ui_web_view_web_view_core from "@nativescript/core/ui/web-vie import * as module_ui_web_view_web_view_compat from "tns-core-modules/ui/web-view/web-view"; compare("ui/web-view/web-view", module_ui_web_view_web_view_core, module_ui_web_view_web_view_compat); +import * as module_ui_web_view_web_view_common_core from "@nativescript/core/ui/web-view/web-view-common"; +import * as module_ui_web_view_web_view_common_compat from "tns-core-modules/ui/web-view/web-view-common"; +compare("ui/web-view/web-view-common", module_ui_web_view_web_view_common_core, module_ui_web_view_web_view_common_compat); + import * as module_utils_debug_core from "@nativescript/core/utils/debug"; import * as module_utils_debug_compat from "tns-core-modules/utils/debug"; compare("utils/debug", module_utils_debug_core, module_utils_debug_compat); @@ -866,6 +1098,14 @@ import * as module_utils_mainthread_helper_core from "@nativescript/core/utils/m import * as module_utils_mainthread_helper_compat from "tns-core-modules/utils/mainthread-helper"; compare("utils/mainthread-helper", module_utils_mainthread_helper_core, module_utils_mainthread_helper_compat); +import * as module_utils_module_merge_core from "@nativescript/core/utils/module-merge"; +import * as module_utils_module_merge_compat from "tns-core-modules/utils/module-merge"; +compare("utils/module-merge", module_utils_module_merge_core, module_utils_module_merge_compat); + +import * as module_utils_number_utils_core from "@nativescript/core/utils/number-utils"; +import * as module_utils_number_utils_compat from "tns-core-modules/utils/number-utils"; +compare("utils/number-utils", module_utils_number_utils_core, module_utils_number_utils_compat); + import * as module_utils_types_core from "@nativescript/core/utils/types"; import * as module_utils_types_compat from "tns-core-modules/utils/types"; compare("utils/types", module_utils_types_core, module_utils_types_compat); @@ -874,6 +1114,10 @@ import * as module_utils_utils_core from "@nativescript/core/utils/utils"; import * as module_utils_utils_compat from "tns-core-modules/utils/utils"; compare("utils/utils", module_utils_utils_core, module_utils_utils_compat); +import * as module_utils_utils_common_core from "@nativescript/core/utils/utils-common"; +import * as module_utils_utils_common_compat from "tns-core-modules/utils/utils-common"; +compare("utils/utils-common", module_utils_utils_common_core, module_utils_utils_common_compat); + import * as module_xhr_core from "@nativescript/core/xhr"; import * as module_xhr_compat from "tns-core-modules/xhr"; compare("xhr", module_xhr_core, module_xhr_compat); diff --git a/e2e/scoped-packages/package.json b/e2e/scoped-packages/package.json index 5d877cdf5..603688e15 100644 --- a/e2e/scoped-packages/package.json +++ b/e2e/scoped-packages/package.json @@ -15,7 +15,7 @@ "dependencies": { "@nativescript/core": "file:../../dist/nativescript-core-6.2.0.tgz", "nativescript-theme-core": "~1.0.6", - "tns-core-modules": "file:../../dist/tns-core-modules-6.1.0.tgz" + "tns-core-modules": "file:../../dist/tns-core-modules-6.2.0.tgz" }, "devDependencies": { "nativescript-dev-webpack": "~1.2.0", diff --git a/e2e/ui-tests-app/app/package.json b/e2e/ui-tests-app/app/package.json index 24cb7bc4c..c13032ce6 100644 --- a/e2e/ui-tests-app/app/package.json +++ b/e2e/ui-tests-app/app/package.json @@ -1,6 +1,7 @@ { "main": "app.js", "android": { - "v8Flags": "--expose_gc" + "v8Flags": "--expose_gc", + "markingMode": "none" } } diff --git a/e2e/ui-tests-app/e2e/suites/gestures-events/gestures/gestures.e2e-spec.ts b/e2e/ui-tests-app/e2e/suites/gestures-events/gestures/gestures.e2e-spec.ts index b7b5a66f1..257d1e89b 100644 --- a/e2e/ui-tests-app/e2e/suites/gestures-events/gestures/gestures.e2e-spec.ts +++ b/e2e/ui-tests-app/e2e/suites/gestures-events/gestures/gestures.e2e-spec.ts @@ -44,7 +44,7 @@ describe(`${imagePrefix}-suite`, () => { it("gestures_02_doubleTap", async function () { const lblDoubleTap = await driver.waitForElement("Double Tap here"); - await lblDoubleTap.doubleTap(); + await lblDoubleTap.doubleTap({ x: 20, y: 20 }); const result = await driver.findElementByTextIfExists("Double Tap gesture detected, true", SearchOptions.contains); assert.isTrue(result != null && result !== undefined, `Gestures event 'Double Tap gesture detected, true' not detected!`); }); @@ -59,7 +59,7 @@ describe(`${imagePrefix}-suite`, () => { it("gestures_longPress", async function () { const lblTapOrDoubleTap = await driver.waitForElement("Tap or Double Tap"); const rect = await lblTapOrDoubleTap.getRectangle(); - await lblTapOrDoubleTap.doubleTap(); + await lblTapOrDoubleTap.doubleTap({ x: 20, y: 20 }); let result = await driver.findElementByTextIfExists("Last action: Double tap gesture, true", SearchOptions.contains); assert.isTrue(result != null && result !== undefined, `Gestures event 'Last action: Double tap gesture, true' not detected!`); await driver.clickPoint(rect.x, rect.y); @@ -76,23 +76,23 @@ describe(`${imagePrefix}-suite`, () => { it("gestures_05_pan", async function () { const lblSwipe = await driver.waitForElement("Pan here"); - const rect = await lblSwipe.getRectangle(); await lblSwipe.pan([ - { x: rect.x + 100, y: rect.y + 100 }, - { x: rect.x + 140, y: rect.y + 120 }, - { x: rect.x + 160, y: rect.y + 120 } - ], { x: 50, y: 50 }); + { x: 10, y: 20 }, + { x: 40, y: 30 }, + { x: 50, y: 60 } + ], { x: 5, y: 5 }); const result = await driver.findElementByTextIfExists("Pan deltaX", SearchOptions.contains); const text = await result.text(); - assert.isTrue(/Pan deltaX:\d+; deltaY:\d+;, true, states: ended/.test(text), `Gestures event 'Pan deltaX: ...' not detected!`); + assert.isTrue(/Pan deltaX:([-+]?)\d+; deltaY:([-+]?)\d+;, true, states: ended/ig.test(text), `Gestures event 'Pan deltaX: ...' not detected!`); }); it("gestures_06_pinch", async function () { const lblPan = await driver.waitForElement("Pinch here"); await lblPan.pinch("out"); - const result = await driver.findElementByTextIfExists("Pinch Scale: 1, true, states: ended", SearchOptions.contains); - assert.isTrue(result != null && result !== undefined, `Gestures event '"Pinch Scale: 0, true, states: ended"' not detected!`); + const result = await driver.findElementByTextIfExists("Pinch Scale:", SearchOptions.contains); + const text = await result.text(); + assert.isTrue(/Pinch Scale: \d+, true, states: ended/ig.test(text), `Gestures event '"Pinch Scale: 0, true, states: ended"' not detected!`); }); it("gestures_07_rotate", async function () { diff --git a/nativescript-core/application/application-common.ts b/nativescript-core/application/application-common.ts index 536013ed4..10de66855 100644 --- a/nativescript-core/application/application-common.ts +++ b/nativescript-core/application/application-common.ts @@ -142,6 +142,14 @@ function removeCssClass(rootView: View, cssClass: string) { rootView.cssClasses.delete(cssClass); } +function increaseStyleScopeApplicationCssSelectorVersion(rootView: View) { + const styleScope = rootView._styleScope || ((rootView).currentPage && (rootView).currentPage._styleScope); + + if (styleScope) { + styleScope._increaseApplicationCssSelectorVersion(); + } +} + export function orientationChanged(rootView: View, newOrientation: "portrait" | "landscape" | "unknown"): void { if (!rootView) { return; @@ -151,6 +159,7 @@ export function orientationChanged(rootView: View, newOrientation: "portrait" | if (!rootView.cssClasses.has(newOrientationCssClass)) { ORIENTATION_CSS_CLASSES.forEach(cssClass => removeCssClass(rootView, cssClass)); applyCssClass(rootView, newOrientationCssClass); + increaseStyleScopeApplicationCssSelectorVersion(rootView); rootView._onCssStateChange(); } } @@ -164,6 +173,7 @@ export function systemAppearanceChanged(rootView: View, newSystemAppearance: "da if (!rootView.cssClasses.has(newSystemAppearanceCssClass)) { SYSTEM_APPEARANCE_CSS_CLASSES.forEach(cssClass => removeCssClass(rootView, cssClass)); applyCssClass(rootView, newSystemAppearanceCssClass); + increaseStyleScopeApplicationCssSelectorVersion(rootView); rootView._onCssStateChange(); } } diff --git a/nativescript-core/application/application.d.ts b/nativescript-core/application/application.d.ts index 0a1bd4e54..ddab72616 100644 --- a/nativescript-core/application/application.d.ts +++ b/nativescript-core/application/application.d.ts @@ -52,6 +52,11 @@ export const lowMemoryEvent: string; */ export const orientationChangedEvent: string; +/** + * String value used when hooking to systemAppearanceChanged event. + */ +export const systemAppearanceChangedEvent: string; + /** * Event data containing information for the application events. */ diff --git a/nativescript-core/application/application.ios.ts b/nativescript-core/application/application.ios.ts index 4f7a6a4f5..13efff29b 100644 --- a/nativescript-core/application/application.ios.ts +++ b/nativescript-core/application/application.ios.ts @@ -22,8 +22,7 @@ import { Builder } from "../ui/builder"; import { CLASS_PREFIX, getRootViewCssClasses, - pushToRootViewCssClasses, - resetRootViewCssClasses + pushToRootViewCssClasses } from "../css/system-classes"; import { ios as iosView, View } from "../ui/core/view"; @@ -301,14 +300,18 @@ class IOSApplication implements IOSApplicationDefinition { // setup view as styleScopeHost rootView._setupAsRootView({}); } + setViewControllerView(rootView); + const haveController = this._window.rootViewController !== null; this._window.rootViewController = controller; + + setRootViewSystemAppearanceCssClass(rootView); + if (!haveController) { this._window.makeKeyAndVisible(); } - setupRootViewCssClasses(rootView); rootView.on(iosView.traitCollectionColorAppearanceChangedEvent, () => { const userInterfaceStyle = controller.traitCollection.userInterfaceStyle; const newSystemAppearance = getSystemAppearanceValue(userInterfaceStyle); @@ -356,6 +359,8 @@ function createRootView(v?: View) { } } + setRootViewCssClasses(rootView); + return rootView; } @@ -398,7 +403,7 @@ export function _start(entry?: string | NavigationEntry) { // Mind root view CSS classes in future work // on embedding NativeScript applications - setupRootViewCssClasses(rootView); + setRootViewSystemAppearanceCssClass(rootView); rootView.on(iosView.traitCollectionColorAppearanceChangedEvent, () => { const userInterfaceStyle = controller.traitCollection.userInterfaceStyle; const newSystemAppearance = getSystemAppearanceValue(userInterfaceStyle); @@ -482,22 +487,24 @@ function setViewControllerView(view: View): void { } } -function setupRootViewCssClasses(rootView: View): void { - resetRootViewCssClasses(); - +function setRootViewCssClasses(rootView: View): void { const deviceType = device.deviceType.toLowerCase(); pushToRootViewCssClasses(`${CLASS_PREFIX}${IOS_PLATFORM}`); pushToRootViewCssClasses(`${CLASS_PREFIX}${deviceType}`); pushToRootViewCssClasses(`${CLASS_PREFIX}${iosApp.orientation}`); - if (majorVersion >= 13) { - pushToRootViewCssClasses(`${CLASS_PREFIX}${iosApp.systemAppearance}`); - } - const rootViewCssClasses = getRootViewCssClasses(); rootViewCssClasses.forEach(c => rootView.cssClasses.add(c)); } +function setRootViewSystemAppearanceCssClass(rootView: View): void { + if (majorVersion >= 13) { + const systemAppearanceCssClass = `${CLASS_PREFIX}${iosApp.systemAppearance}`; + pushToRootViewCssClasses(systemAppearanceCssClass); + rootView.cssClasses.add(systemAppearanceCssClass); + } +} + export function orientation(): "portrait" | "landscape" | "unknown" { return iosApp.orientation; } diff --git a/nativescript-core/cli-hooks/before-checkForChanges.js b/nativescript-core/cli-hooks/before-checkForChanges.js index eb525cb95..ada6a55fe 100644 --- a/nativescript-core/cli-hooks/before-checkForChanges.js +++ b/nativescript-core/cli-hooks/before-checkForChanges.js @@ -1,13 +1,60 @@ const semver = require("semver"); +const webpackPackageName = "nativescript-dev-webpack"; + module.exports = function ($staticConfig, hookArgs) { const cliVersion = semver.parse($staticConfig.version); - const majorVersion = cliVersion && cliVersion.major; - const minorVersion = cliVersion && cliVersion.minor; const platfrom = hookArgs.prepareData.platform; + const projectData = hookArgs.projectData; + // Required CLI version for building IOS: 6.2.0 if (platfrom.toLowerCase() === "ios" && - (majorVersion < 6 || (majorVersion === 6 && minorVersion < 2))) { + !satisfiesRequriredVersion(cliVersion, 6, 2)) { throw new Error(`Building @nativescript/core for iOS requires NativeScript CLI with version at least 6.2.0. Please upgrade your NativeScript CLI version (npm i -g nativescript).`); } + + // Required webpack version for angular projects: 1.3.0 + if (projectData.projectType === "Angular") { + const webpackMinVer = getMinWebpackVersion(projectData); + + if (webpackMinVer && !satisfiesRequriredVersion(webpackMinVer, 1, 3)) { + throw new Error(`Building @nativescript/core for Angular requires ${webpackPackageName} with version at least 1.3.0. Please upgrade: npm i ${webpackPackageName} --save-dev.`); + } + } }; + +/** + * Checks if semver object satisifies a major/minor requirement. Pre-release versions are OK too! + */ +function satisfiesRequriredVersion(actualVersion, requiredMajor, requiredMinor) { + // Return true for null version to handle tags (ex. "next", "rc") + if (!actualVersion) { + return true; + } + + if (actualVersion.major < requiredMajor) { + return false; + } + + if (actualVersion.major === requiredMajor && actualVersion.minor < requiredMinor) { + return false; + } + + return true; +} + +function getMinWebpackVersion(projectData) { + const devDependencies = projectData.devDependencies || {}; + const dependencies = projectData.dependencies || {}; + const webpackVer = dependencies[webpackPackageName] || devDependencies[webpackPackageName]; + + let webpackMinVer = null; + + if (semver.valid(webpackVer)) { + webpackMinVer = semver.parse(webpackVer); + } else if (semver.validRange(webpackVer)) { + webpackMinVer = semver.minVersion(webpackVer); + } + + return webpackMinVer; +} \ No newline at end of file diff --git a/nativescript-core/css/system-classes.d.ts b/nativescript-core/css/system-classes.d.ts index 740854fec..cbef8e46d 100644 --- a/nativescript-core/css/system-classes.d.ts +++ b/nativescript-core/css/system-classes.d.ts @@ -28,8 +28,3 @@ export function pushToRootViewCssClasses(value: string): number; * @param value */ export function removeFromRootViewCssClasses(value: string): string; - -/** - * Resets CSS classes for root view. - */ -export function resetRootViewCssClasses(): string[]; diff --git a/nativescript-core/css/system-classes.ts b/nativescript-core/css/system-classes.ts index de763e55b..6e2f7e80c 100644 --- a/nativescript-core/css/system-classes.ts +++ b/nativescript-core/css/system-classes.ts @@ -30,8 +30,3 @@ export function removeFromRootViewCssClasses(value: string): string { return removedElement; } - -export function resetRootViewCssClasses(): string[] { - // Preserve the default `ns-root` CSS class - return rootViewCssClasses.splice(1); -} diff --git a/nativescript-core/debugger/devtools-elements.common.ts b/nativescript-core/debugger/devtools-elements.common.ts index 2e65afedc..5abfb667d 100644 --- a/nativescript-core/debugger/devtools-elements.common.ts +++ b/nativescript-core/debugger/devtools-elements.common.ts @@ -4,9 +4,6 @@ import { getNodeById } from "./dom-node"; import { ViewBase } from "../ui/core/view-base"; import { mainThreadify } from "../utils/utils"; -// Use lazy requires for core modules -const frameTopmost = () => require("../ui/frame").topmost(); - let unsetValue; function unsetViewValue(view, name) { if (!unsetValue) { @@ -27,7 +24,7 @@ function getViewById(nodeId: number): ViewBase { } export function getDocument() { - const topMostFrame = frameTopmost(); + const topMostFrame = require("../ui/frame").Frame.topmost(); if (!topMostFrame) { return undefined; } diff --git a/nativescript-core/ui/bottom-navigation/bottom-navigation.android.ts b/nativescript-core/ui/bottom-navigation/bottom-navigation.android.ts index 6601ecded..077a4096c 100644 --- a/nativescript-core/ui/bottom-navigation/bottom-navigation.android.ts +++ b/nativescript-core/ui/bottom-navigation/bottom-navigation.android.ts @@ -380,9 +380,7 @@ export class BottomNavigation extends TabNavigationBase { this._bottomNavigationBar.setVisibility(android.view.View.GONE); } - if (this._attachedToWindow) { - this.changeTab(this.selectedIndex); - } + this.changeTab(this.selectedIndex); } _onAttachedToWindow(): void { @@ -467,8 +465,9 @@ export class BottomNavigation extends TabNavigationBase { // TODO: Should we extract adapter-like class? // TODO: Rename this? public changeTab(index: number) { - // this is the case when there are no items - if (index === -1) { + // index is -1 when there are no items + // bot nav is not attached if you change the tab too early + if (index === -1 || !this._attachedToWindow) { return; } @@ -547,8 +546,8 @@ export class BottomNavigation extends TabNavigationBase { } const tabItems = new Array(); - items.forEach((item, i, arr) => { - (item).index = i; + items.forEach((tabStripItem, i, arr) => { + tabStripItem._index = i; if (items[i]) { const tabItemSpec = this.createTabItemSpec(items[i]); tabItems.push(tabItemSpec); @@ -699,7 +698,7 @@ export class BottomNavigation extends TabNavigationBase { } public setTabBarIconColor(tabStripItem: TabStripItem, value: number | Color): void { - const index = (tabStripItem).index; + const index = tabStripItem._index; const tabBarItem = this._bottomNavigationBar.getViewForItemAt(index); const imgView = tabBarItem.getChildAt(0); const drawable = this.getIcon(tabStripItem); diff --git a/nativescript-core/ui/bottom-navigation/bottom-navigation.ios.ts b/nativescript-core/ui/bottom-navigation/bottom-navigation.ios.ts index 2e77299d2..b5e06d67a 100644 --- a/nativescript-core/ui/bottom-navigation/bottom-navigation.ios.ts +++ b/nativescript-core/ui/bottom-navigation/bottom-navigation.ios.ts @@ -72,12 +72,19 @@ class UITabBarControllerImpl extends UITabBarController { public viewWillTransitionToSizeWithTransitionCoordinator(size: CGSize, coordinator: UIViewControllerTransitionCoordinator): void { super.viewWillTransitionToSizeWithTransitionCoordinator(size, coordinator); UIViewControllerTransitionCoordinator.prototype.animateAlongsideTransitionCompletion - .call(coordinator, null, () => { + .call(coordinator, () => { const owner = this._owner.get(); - if (owner && owner.items) { - // owner.items.forEach(tabItem => tabItem._updateTitleAndIconPositions()); TODO: + if (owner && owner.tabStrip && owner.tabStrip.items) { + const tabStrip = owner.tabStrip; + tabStrip.items.forEach(tabStripItem => { + updateBackgroundPositions(tabStrip, tabStripItem); + + const index = tabStripItem._index; + const tabBarItemController = this.viewControllers[index]; + updateTitleAndIconPositions(tabStripItem, tabBarItemController.tabBarItem, tabBarItemController); + }); } - }); + }, null); } // Mind implementation for other controllers @@ -213,6 +220,26 @@ class UINavigationControllerDelegateImpl extends NSObject implements UINavigatio } } +function updateBackgroundPositions(tabStrip: TabStrip, tabStripItem: TabStripItem) { + let bgView = (tabStripItem).bgView; + if (!bgView) { + const index = tabStripItem._index; + const width = tabStrip.nativeView.frame.size.width / tabStrip.items.length; + const frame = CGRectMake(width * index, 0, width, tabStrip.nativeView.frame.size.width); + bgView = UIView.alloc().initWithFrame(frame); + tabStrip.nativeView.insertSubviewAtIndex(bgView, 0); + (tabStripItem).bgView = bgView; + } else { + const index = tabStripItem._index; + const width = tabStrip.nativeView.frame.size.width / tabStrip.items.length; + const frame = CGRectMake(width * index, 0, width, tabStrip.nativeView.frame.size.width); + bgView.frame = frame; + } + + const backgroundColor = tabStripItem.style.backgroundColor; + bgView.backgroundColor = backgroundColor instanceof Color ? backgroundColor.ios : backgroundColor; +} + function updateTitleAndIconPositions(tabStripItem: TabStripItem, tabBarItem: UITabBarItem, controller: UIViewController) { if (!tabStripItem || !tabBarItem) { return; @@ -345,21 +372,11 @@ export class BottomNavigation extends TabNavigationBase { } public setTabBarItemBackgroundColor(tabStripItem: TabStripItem, value: UIColor | Color): void { - if (!this.tabStrip) { + if (!this.tabStrip || !tabStripItem) { return; } - let bgView = (tabStripItem).bgView; - if (!bgView) { - const index = (tabStripItem).index; - const width = this.tabStrip.nativeView.frame.size.width / this.tabStrip.items.length; - const frame = CGRectMake(width * index, 0, width, this.tabStrip.nativeView.frame.size.width); - bgView = UIView.alloc().initWithFrame(frame); - this.tabStrip.nativeView.insertSubviewAtIndex(bgView, 0); - (tabStripItem).bgView = bgView; - } - - bgView.backgroundColor = value instanceof Color ? value.ios : value; + updateBackgroundPositions(this.tabStrip, tabStripItem); } public setTabBarItemColor(tabStripItem: TabStripItem, value: UIColor | Color): void { @@ -509,7 +526,7 @@ export class BottomNavigation extends TabNavigationBase { applyStatesToItem(tabBarItem, states); controller.tabBarItem = tabBarItem; - (tabStripItem).index = i; + tabStripItem._index = i; tabStripItem.setNativeView(tabBarItem); } diff --git a/nativescript-core/ui/core/view/view.android.ts b/nativescript-core/ui/core/view/view.android.ts index 7d6d6e20a..5b42e0047 100644 --- a/nativescript-core/ui/core/view/view.android.ts +++ b/nativescript-core/ui/core/view/view.android.ts @@ -33,6 +33,7 @@ const androidBackPressedEvent = "androidBackPressed"; const shortAnimTime = 17694720; // android.R.integer.config_shortAnimTime const statePressed = 16842919; // android.R.attr.state_pressed const stateEnabled = 16842910; // android.R.attr.state_enabled +const styleAnimationDialog = 16973826; // android.R.style.Animation_Dialog const sdkVersion = lazy(() => parseInt(device.sdkVersion)); @@ -187,7 +188,7 @@ function initializeDialogFragment() { dialog .getWindow() .setWindowAnimations( - android.R.style.Animation_Dialog + styleAnimationDialog ); } diff --git a/nativescript-core/ui/enums/enums.d.ts b/nativescript-core/ui/enums/enums.d.ts index c9006da08..7181606b3 100644 --- a/nativescript-core/ui/enums/enums.d.ts +++ b/nativescript-core/ui/enums/enums.d.ts @@ -641,7 +641,7 @@ export module AnimationCurve { } /** - * @deprecated use `UserInterfaceStyle` instead. + * @deprecated use `SystemAppearance` instead. * * Specifies the types of the status bar style. */ @@ -657,8 +657,24 @@ export module StatusBarStyle { export const dark: string; } +/** + * Specifies the types of the system appearance. + */ +export module SystemAppearance { + /** + * The light system appearance. + */ + export const light: string; + + /** + * The dark system appearance. + */ + export const dark: string; +} /** + * @deprecated use `SystemAppearance` instead. + * * Specifies the types of the user interface style. */ export module UserInterfaceStyle { diff --git a/nativescript-core/ui/frame/fragment.transitions.android.ts b/nativescript-core/ui/frame/fragment.transitions.android.ts index 266dea6a7..6b024cd47 100644 --- a/nativescript-core/ui/frame/fragment.transitions.android.ts +++ b/nativescript-core/ui/frame/fragment.transitions.android.ts @@ -17,6 +17,9 @@ interface TransitionListener { const defaultInterpolator = lazy(() => new android.view.animation.AccelerateDecelerateInterpolator()); +const animFadeIn = 17432576; // android.R.anim.fade_in +const animFadeOut = 17432577; // android.R.anim.fade_out + export const waitingQueue = new Map>(); export const completedEntries = new Map(); @@ -105,7 +108,7 @@ export function _setAndroidFragmentTransitions( // Also setup empty/immediate transition to be executed when navigating back to this page. // TODO: Consider removing empty/immediate animator when migrating to official androidx.fragment.app.Fragment:1.2. if (isNestedDefaultTransition) { - fragmentTransaction.setCustomAnimations(android.R.anim.fade_in, android.R.anim.fade_out); + fragmentTransaction.setCustomAnimations(animFadeIn, animFadeOut); setupAllAnimation(newEntry, noTransition); setupNewFragmentCustomTransition({ duration: 0, curve: null }, newEntry, noTransition); } else { diff --git a/nativescript-core/ui/frame/frame.android.ts b/nativescript-core/ui/frame/frame.android.ts index f8270d93b..096adb628 100644 --- a/nativescript-core/ui/frame/frame.android.ts +++ b/nativescript-core/ui/frame/frame.android.ts @@ -9,7 +9,7 @@ import { Page } from "../page"; import * as application from "../../application"; import { - _stack, FrameBase, goBack, NavigationType, Observable, + _stack, FrameBase, NavigationType, Observable, traceCategories, traceEnabled, traceError, traceWrite, View } from "./frame-common"; @@ -1189,7 +1189,7 @@ class ActivityCallbacksImplementation implements AndroidActivityCallbacks { const view = this._rootView; let callSuper = false; if (view instanceof Frame) { - callSuper = !goBack(); + callSuper = !FrameBase.goBack(); } else { const viewArgs = { eventName: "activityBackPressed", diff --git a/nativescript-core/ui/styling/gradient.d.ts b/nativescript-core/ui/styling/gradient.d.ts index 414680e9d..58c081d53 100644 --- a/nativescript-core/ui/styling/gradient.d.ts +++ b/nativescript-core/ui/styling/gradient.d.ts @@ -4,15 +4,15 @@ import { LengthPercentUnit } from "./style-properties"; import { Color } from "../../color"; -import { LinearGradient } from "../../css/parser"; +import { LinearGradient as LinearGradientDefinition } from "../../css/parser"; export class LinearGradient { public angle: number; public colorStops: ColorStop[]; - public static parse(value: LinearGradient): LinearGradient; + public static parse(value: LinearGradientDefinition): LinearGradientDefinition; - public static equals(first: LinearGradient, second: LinearGradient): boolean; + public static equals(first: LinearGradientDefinition, second: LinearGradientDefinition): boolean; } export interface ColorStop { diff --git a/nativescript-core/ui/styling/style-scope.d.ts b/nativescript-core/ui/styling/style-scope.d.ts index 4ea0bda82..b43e2b316 100644 --- a/nativescript-core/ui/styling/style-scope.d.ts +++ b/nativescript-core/ui/styling/style-scope.d.ts @@ -36,6 +36,10 @@ export class StyleScope { public static createSelectorsFromImports(tree: SyntaxTree, keyframes: Object): RuleSet[]; public ensureSelectors(): number; + /** + * Increase the application CSS selector version. + */ + public _increaseApplicationCssSelectorVersion(): void; public isApplicationCssSelectorsLatestVersionApplied(): boolean; public isLocalCssSelectorsLatestVersionApplied(): boolean; diff --git a/nativescript-core/ui/styling/style-scope.ts b/nativescript-core/ui/styling/style-scope.ts index 084eedfa6..6105cff89 100644 --- a/nativescript-core/ui/styling/style-scope.ts +++ b/nativescript-core/ui/styling/style-scope.ts @@ -760,6 +760,10 @@ export class StyleScope { return this._getSelectorsVersion(); } + public _increaseApplicationCssSelectorVersion(): void { + applicationCssSelectorVersion++; + } + public isApplicationCssSelectorsLatestVersionApplied(): boolean { return this._applicationCssSelectorsAppliedVersion === applicationCssSelectorVersion; } diff --git a/nativescript-core/ui/tab-navigation-base/tab-strip-item/tab-strip-item.d.ts b/nativescript-core/ui/tab-navigation-base/tab-strip-item/tab-strip-item.d.ts index c25b7d85f..b9b8d0721 100644 --- a/nativescript-core/ui/tab-navigation-base/tab-strip-item/tab-strip-item.d.ts +++ b/nativescript-core/ui/tab-navigation-base/tab-strip-item/tab-strip-item.d.ts @@ -37,6 +37,12 @@ export class TabStripItem extends View { public static tapEvent: string; //@private + + /** + * @private + */ + _index: number; + /** * @private */ diff --git a/nativescript-core/ui/tab-navigation-base/tab-strip-item/tab-strip-item.ts b/nativescript-core/ui/tab-navigation-base/tab-strip-item/tab-strip-item.ts index 913d11179..09ea676e7 100644 --- a/nativescript-core/ui/tab-navigation-base/tab-strip-item/tab-strip-item.ts +++ b/nativescript-core/ui/tab-navigation-base/tab-strip-item/tab-strip-item.ts @@ -26,6 +26,7 @@ export class TabStripItem extends View implements TabStripItemDefinition, AddChi public image: Image; public label: Label; + public _index: number; private _title: string; private _iconSource: string; @@ -211,7 +212,7 @@ export class TabStripItem extends View implements TabStripItemDefinition, AddChi const parent = this.parent; const tabStripParent = parent && parent.parent; - if ((this).index === tabStripParent.selectedIndex && + if (this._index === tabStripParent.selectedIndex && !(isIOS && tabStripParent instanceof Tabs)) { this._goToVisualState("highlighted"); } diff --git a/nativescript-core/ui/tabs/tabs.android.ts b/nativescript-core/ui/tabs/tabs.android.ts index 18d1745a0..f2ee8e65b 100644 --- a/nativescript-core/ui/tabs/tabs.android.ts +++ b/nativescript-core/ui/tabs/tabs.android.ts @@ -617,10 +617,10 @@ export class Tabs extends TabsBase { } const tabItems = new Array(); - items.forEach((item: TabStripItem, i, arr) => { - (item).index = i; - const tabItemSpec = this.createTabItemSpec(item); - (item).tabItemSpec = tabItemSpec; + items.forEach((tabStripItem: TabStripItem, i, arr) => { + tabStripItem._index = i; + const tabItemSpec = this.createTabItemSpec(tabStripItem); + (tabStripItem).tabItemSpec = tabItemSpec; tabItems.push(tabItemSpec); }); @@ -808,7 +808,7 @@ export class Tabs extends TabsBase { } public setTabBarIconColor(tabStripItem: TabStripItem, value: number | Color): void { - const index = (tabStripItem).index; + const index = tabStripItem._index; const tabBarItem = this._tabsBar.getViewForItemAt(index); const imgView = tabBarItem.getChildAt(0); const drawable = this.getIcon(tabStripItem); diff --git a/nativescript-core/ui/tabs/tabs.ios.ts b/nativescript-core/ui/tabs/tabs.ios.ts index 274b203fd..d7d622371 100644 --- a/nativescript-core/ui/tabs/tabs.ios.ts +++ b/nativescript-core/ui/tabs/tabs.ios.ts @@ -848,11 +848,11 @@ export class Tabs extends TabsBase { const tabBarItems = []; - items.forEach((item: TabStripItem, i) => { - (item).index = i; - const tabBarItem = this.createTabBarItem(item, i); + items.forEach((tabStripItem: TabStripItem, i) => { + tabStripItem._index = i; + const tabBarItem = this.createTabBarItem(tabStripItem, i); tabBarItems.push(tabBarItem); - item.setNativeView(tabBarItem); + tabStripItem.setNativeView(tabBarItem); }); this.tabBarItems = tabBarItems;