Merge pull request #8066 from NativeScript/svetoslavtsenov/merge-6.2.0-release-in-master

chore: merge 6.2.0 release in master
This commit is contained in:
Svetoslav
2019-11-07 00:51:28 +02:00
committed by GitHub
49 changed files with 1636 additions and 1065 deletions

View File

@@ -1,3 +1,36 @@
<a name="6.2.0"></a>
# [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))
<a name="6.1.2"></a>
## [6.1.2](https://github.com/NativeScript/NativeScript/compare/6.1.1...6.1.2) (2019-10-15)

View File

@@ -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

View File

@@ -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(["*(?<!\.(d|android|ios)).ts"], processTypeScriptFile);
generateExportsForPrivateModules();
// Generate tests in

View File

@@ -4,6 +4,25 @@
// For more information, visit: https://go.microsoft.com/fwlink/?linkid=830387
"version": "0.2.0",
"configurations": [
{
"type": "node",
"request": "launch",
"name": "debug tests",
"program": "${workspaceFolder}/node_modules/mocha/bin/_mocha",
"args": [
"-u",
"tdd",
"--timeout",
"999999",
"--colors",
"--opts",
"../config/mocha.opts",
"-a",
"--grep",
"modal-frame:"
],
"internalConsoleOptions": "openOnSessionStart"
},
{
"type": "node",
"request": "launch",
@@ -15,13 +34,9 @@
"--timeout",
"999999",
"--colors",
// "${workspaceFolder}/test",
"--opts",
"./e2e/config/mocha.opts",
"--runType",
"android23",
"--reuseDevice",
"--verbose"
"../config/mocha.opts",
"android"
],
"internalConsoleOptions": "openOnSessionStart"
},
@@ -36,13 +51,9 @@
"--timeout",
"999999",
"--colors",
// "${workspaceFolder}/test",
"--opts",
"./e2e/config/mocha.opts",
"--runType",
"sim.iPhoneX.iOS112",
"--reuseDevice",
"--verbose"
"../config/mocha.opts",
"ios"
],
"internalConsoleOptions": "openOnSessionStart"
},

View File

@@ -48,18 +48,18 @@ export class Screen {
resetFrameRootView = async () => {
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 () => {

View File

@@ -22,7 +22,7 @@
"4723",
"-a",
"--grep",
"layout-root"
"layout-root-with-multi-frames"
],
"internalConsoleOptions": "openOnSessionStart"
},

View File

@@ -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"
}
}

View File

@@ -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();
});
});
}
});
}
});

View File

@@ -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"];

View File

@@ -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();
});
});
}
});
}
});

View File

@@ -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();
});
});
}
});
});

View File

@@ -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();
});
});
});

View File

@@ -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();
});
});
});

View File

@@ -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);

View File

@@ -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);

View File

@@ -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();
};

View File

@@ -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();
});
});
}
});

View File

@@ -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();

View File

@@ -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();
}
}

View File

@@ -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);

View File

@@ -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();
});
});
}
});

View File

@@ -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} =========`);
}
});

View File

@@ -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} =========`);
}
});

View File

@@ -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);

View File

@@ -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",

View File

@@ -1,6 +1,7 @@
{
"main": "app.js",
"android": {
"v8Flags": "--expose_gc"
"v8Flags": "--expose_gc",
"markingMode": "none"
}
}

View File

@@ -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 () {

View File

@@ -142,6 +142,14 @@ function removeCssClass(rootView: View, cssClass: string) {
rootView.cssClasses.delete(cssClass);
}
function increaseStyleScopeApplicationCssSelectorVersion(rootView: View) {
const styleScope = rootView._styleScope || ((<any>rootView).currentPage && (<any>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();
}
}

View File

@@ -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.
*/

View File

@@ -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;
}

View File

@@ -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;
}

View File

@@ -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[];

View File

@@ -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);
}

View File

@@ -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;
}

View File

@@ -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<org.nativescript.widgets.TabItemSpec>();
items.forEach((item, i, arr) => {
(<any>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 = (<any>tabStripItem).index;
const index = tabStripItem._index;
const tabBarItem = this._bottomNavigationBar.getViewForItemAt(index);
const imgView = <android.widget.ImageView>tabBarItem.getChildAt(0);
const drawable = this.getIcon(tabStripItem);

View File

@@ -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 = (<any>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);
(<any>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 = (<any>tabStripItem).bgView;
if (!bgView) {
const index = (<any>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);
(<any>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;
(<any>tabStripItem).index = i;
tabStripItem._index = i;
tabStripItem.setNativeView(tabBarItem);
}

View File

@@ -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
);
}

View File

@@ -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 {

View File

@@ -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<number, Set<ExpandedEntry>>();
export const completedEntries = new Map<number, ExpandedEntry>();
@@ -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 {

View File

@@ -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 = <application.AndroidActivityBackPressedEventData>{
eventName: "activityBackPressed",

View File

@@ -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 {

View File

@@ -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;

View File

@@ -760,6 +760,10 @@ export class StyleScope {
return this._getSelectorsVersion();
}
public _increaseApplicationCssSelectorVersion(): void {
applicationCssSelectorVersion++;
}
public isApplicationCssSelectorsLatestVersionApplied(): boolean {
return this._applicationCssSelectorsAppliedVersion === applicationCssSelectorVersion;
}

View File

@@ -37,6 +37,12 @@ export class TabStripItem extends View {
public static tapEvent: string;
//@private
/**
* @private
*/
_index: number;
/**
* @private
*/

View File

@@ -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 = <TabStrip>this.parent;
const tabStripParent = parent && <TabNavigationBase>parent.parent;
if ((<any>this).index === tabStripParent.selectedIndex &&
if (this._index === tabStripParent.selectedIndex &&
!(isIOS && tabStripParent instanceof Tabs)) {
this._goToVisualState("highlighted");
}

View File

@@ -617,10 +617,10 @@ export class Tabs extends TabsBase {
}
const tabItems = new Array<org.nativescript.widgets.TabItemSpec>();
items.forEach((item: TabStripItem, i, arr) => {
(<any>item).index = i;
const tabItemSpec = this.createTabItemSpec(item);
(<any>item).tabItemSpec = tabItemSpec;
items.forEach((tabStripItem: TabStripItem, i, arr) => {
tabStripItem._index = i;
const tabItemSpec = this.createTabItemSpec(tabStripItem);
(<any>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 = (<any>tabStripItem).index;
const index = tabStripItem._index;
const tabBarItem = this._tabsBar.getViewForItemAt(index);
const imgView = <android.widget.ImageView>tabBarItem.getChildAt(0);
const drawable = this.getIcon(tabStripItem);

View File

@@ -848,11 +848,11 @@ export class Tabs extends TabsBase {
const tabBarItems = [];
items.forEach((item: TabStripItem, i) => {
(<any>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;