From 31f5554d6df6d89c9815cde8b1e4636698160c86 Mon Sep 17 00:00:00 2001 From: Svetoslav Date: Fri, 22 Mar 2019 00:46:03 +0200 Subject: [PATCH 1/5] release: cut the 5.3.0 release (#7049) * release: cut the 5.3.0 release --- CHANGELOG.md | 26 ++++++++++++++++++++++++++ tns-core-modules/package.json | 2 +- 2 files changed, 27 insertions(+), 1 deletion(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 31011072b..704a46a4e 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,3 +1,29 @@ + +# [5.3.0](https://github.com/NativeScript/NativeScript/compare/5.2.1...5.3.0) (2019-03-21) + + +### Bug Fixes + +* **android:** resource ID not found on navigation between pages with nested and single frames ([#6955](https://github.com/NativeScript/NativeScript/issues/6955)) ([33d6d1f](https://github.com/NativeScript/NativeScript/commit/33d6d1f)) +* **android:** navigation between pages with single and nested frames ([#7011](https://github.com/NativeScript/NativeScript/issues/7011)) ([91d90cc](https://github.com/NativeScript/NativeScript/commit/91d90cc)) +* **http:** ensure httpcontent.toFile() creates intermediate directories ([#6451](https://github.com/NativeScript/NativeScript/issues/6451)) ([d7fb9b8](https://github.com/NativeScript/NativeScript/commit/d7fb9b8)) +* WrappedValue.unwrap empty string behavior ([#6900](https://github.com/NativeScript/NativeScript/issues/6900)) ([0482460](https://github.com/NativeScript/NativeScript/commit/0482460)) +* **android-bottom-tabs:** use immediate transition on programmatic selectedIndex change ([#6942](https://github.com/NativeScript/NativeScript/issues/6942)) ([e9dfa20](https://github.com/NativeScript/NativeScript/commit/e9dfa20)) +* **ios:** disable default tab reselect behavior ([#6968](https://github.com/NativeScript/NativeScript/issues/6968)) ([043cbf3](https://github.com/NativeScript/NativeScript/commit/043cbf3)) +* **ios-webview:** report hostname lookup errors in loadFinished event ([#6988](https://github.com/NativeScript/NativeScript/issues/6988)) ([e6486f6](https://github.com/NativeScript/NativeScript/commit/e6486f6)) +* **ios-webview:** loading of local-file dependency ([#6947](https://github.com/NativeScript/NativeScript/issues/6947)) ([dcad754](https://github.com/NativeScript/NativeScript/commit/dcad754)), closes [/github.com/NativeScript/NativeScript/issues/6377#issuecomment-433322681](https://github.com//github.com/NativeScript/NativeScript/issues/6377/issues/issuecomment-433322681) [#6377](https://github.com/NativeScript/NativeScript/issues/6377) +* set/unset touchListener.owner onLoaded/onUnloaded ([#6922](https://github.com/NativeScript/NativeScript/issues/6922)) ([f056167](https://github.com/NativeScript/NativeScript/commit/f056167)) + + +### Features + +* local icon handling in actionbar and tabview ([#7009](https://github.com/NativeScript/NativeScript/issues/7009)) ([cd66300](https://github.com/NativeScript/NativeScript/commit/cd66300)) +* **android:** add openFile to utils ([#6895](https://github.com/NativeScript/NativeScript/issues/6895)) ([f8eee40](https://github.com/NativeScript/NativeScript/commit/f8eee40)) +* **hmr:** style views at runtime ([#7012](https://github.com/NativeScript/NativeScript/issues/7012)) ([3c2c1d9](https://github.com/NativeScript/NativeScript/commit/3c2c1d9)) +* **hmr:** apply changes in page styles at runtime when app root is a frame ([#6857](https://github.com/NativeScript/NativeScript/issues/6857)) ([44b8acd](https://github.com/NativeScript/NativeScript/commit/44b8acd)) +* **view** expose missing backgroundSize, backgroundRepeat, and backgroundPosition properties on View class ([#7032](https://github.com/NativeScript/NativeScript/issues/7032)) ([88f2242](https://github.com/NativeScript/NativeScript/commit/88f2242)) + + ## [5.2.2](https://github.com/NativeScript/NativeScript/compare/5.2.1...5.2.2) (2019-03-01) diff --git a/tns-core-modules/package.json b/tns-core-modules/package.json index 642d7903d..bf25e81a7 100644 --- a/tns-core-modules/package.json +++ b/tns-core-modules/package.json @@ -26,7 +26,7 @@ "license": "Apache-2.0", "typings": "tns-core-modules.d.ts", "dependencies": { - "tns-core-modules-widgets": "next", + "tns-core-modules-widgets": "5.3.0", "tslib": "^1.9.3" }, "devDependencies": { From 32646be19ccedd13faebe4f653367d4a68d7a640 Mon Sep 17 00:00:00 2001 From: Manol Donev Date: Fri, 22 Mar 2019 11:14:37 +0200 Subject: [PATCH 2/5] chore: restore lazy load requires in http module (#7052) --- .../http/http-request/http-request.android.ts | 62 +++++++++++++------ .../http/http-request/http-request.ios.ts | 45 +++++++++----- 2 files changed, 73 insertions(+), 34 deletions(-) diff --git a/tns-core-modules/http/http-request/http-request.android.ts b/tns-core-modules/http/http-request/http-request.android.ts index a6a1f04bc..150b2ba89 100644 --- a/tns-core-modules/http/http-request/http-request.android.ts +++ b/tns-core-modules/http/http-request/http-request.android.ts @@ -1,14 +1,10 @@ -/** - * Android specific http request implementation. - */ -import { fromNativeSource } from "../../image-source"; -import { screen } from "../../platform"; -import { File } from "../../file-system"; +// imported for definition purposes only +import * as httpModule from "../../http"; +import * as imageSourceModule from "../../image-source"; +import * as platformModule from "../../platform"; +import * as fsModule from "../../file-system"; + import { getFilenameFromUrl } from "./http-request-common"; - -// this is imported for definition purposes only -import * as http from "../../http"; - import { NetworkAgent } from "../../debugger/debugger"; export enum HttpResponseEncoding { @@ -28,6 +24,27 @@ function parseJSON(source: string): any { let requestIdCounter = 0; const pendingRequests = {}; +let imageSource: typeof imageSourceModule; +function ensureImageSource() { + if (!imageSource) { + imageSource = require("image-source"); + } +} + +let platform: typeof platformModule; +function ensurePlatform() { + if (!platform) { + platform = require("platform"); + } +} + +let fs: typeof fsModule; +function ensureFileSystem() { + if (!fs) { + fs = require("file-system"); + } +} + let completeCallback: org.nativescript.widgets.Async.CompleteCallback; function ensureCompleteCallback() { if (completeCallback) { @@ -55,7 +72,7 @@ function onRequestComplete(requestId: number, result: org.nativescript.widgets.A } // read the headers - const headers: http.Headers = {}; + const headers: httpModule.Headers = {}; if (result.headers) { const jHeaders = result.headers; const length = jHeaders.size(); @@ -97,9 +114,11 @@ function onRequestComplete(requestId: number, result: org.nativescript.widgets.A return parseJSON(str); }, toImage: () => { + ensureImageSource(); + return new Promise((resolveImage, rejectImage) => { if (result.responseAsImage != null) { - resolveImage(fromNativeSource(result.responseAsImage)); + resolveImage(imageSource.fromNativeSource(result.responseAsImage)); } else { rejectImage(new Error("Response content may not be converted to an Image")); @@ -107,13 +126,15 @@ function onRequestComplete(requestId: number, result: org.nativescript.widgets.A }); }, toFile: (destinationFilePath: string) => { + ensureFileSystem(); + if (!destinationFilePath) { destinationFilePath = getFilenameFromUrl(callbacks.url); } let stream: java.io.FileOutputStream; try { // ensure destination path exists by creating any missing parent directories - const file = File.fromPath(destinationFilePath); + const file = fs.File.fromPath(destinationFilePath); const javaFile = new java.io.File(destinationFilePath); stream = new java.io.FileOutputStream(javaFile); @@ -144,7 +165,7 @@ function onRequestError(error: string, requestId: number) { } } -function buildJavaOptions(options: http.HttpRequestOptions) { +function buildJavaOptions(options: httpModule.HttpRequestOptions) { if (typeof options.url !== "string") { throw new Error("Http request must provide a valid url."); } @@ -177,20 +198,23 @@ function buildJavaOptions(options: http.HttpRequestOptions) { javaOptions.headers = arrayList; } + ensurePlatform(); + // pass the maximum available image size to the request options in case we need a bitmap conversion - javaOptions.screenWidth = screen.mainScreen.widthPixels; - javaOptions.screenHeight = screen.mainScreen.heightPixels; + const screen = platform.screen.mainScreen; + javaOptions.screenWidth = screen.widthPixels; + javaOptions.screenHeight = screen.heightPixels; return javaOptions; } -export function request(options: http.HttpRequestOptions): Promise { +export function request(options: httpModule.HttpRequestOptions): Promise { if (options === undefined || options === null) { // TODO: Shouldn't we throw an error here - defensive programming return; } - return new Promise((resolve, reject) => { + return new Promise((resolve, reject) => { try { // initialize the options const javaOptions = buildJavaOptions(options); @@ -228,7 +252,7 @@ function decodeResponse(raw: any, encoding?: HttpResponseEncoding) { return raw.toString(charsetName) } -export function addHeader(headers: http.Headers, key: string, value: string): void { +export function addHeader(headers: httpModule.Headers, key: string, value: string): void { if (!headers[key]) { headers[key] = value; } else if (Array.isArray(headers[key])) { diff --git a/tns-core-modules/http/http-request/http-request.ios.ts b/tns-core-modules/http/http-request/http-request.ios.ts index 6e02247b2..2475fb9c7 100644 --- a/tns-core-modules/http/http-request/http-request.ios.ts +++ b/tns-core-modules/http/http-request/http-request.ios.ts @@ -1,18 +1,15 @@ -/** - * iOS specific http request implementation. - */ +// imported for definition purposes only +import * as httpModule from "../../http"; +import * as imageSourceModule from "../../image-source"; +import * as fsModule from "../../file-system"; -import { HttpRequestOptions, HttpResponse, Headers } from "../../http"; import * as types from "../../utils/types"; -import { fromNativeSource } from "../../image-source"; -import { File } from "../../file-system"; - import * as utils from "../../utils/utils"; -import getter = utils.ios.getter; - import * as domainDebugger from "../../debugger/debugger"; import { getFilenameFromUrl } from "./http-request-common"; +const getter = utils.ios.getter; + export enum HttpResponseEncoding { UTF8, GBK @@ -59,8 +56,22 @@ function ensureSessionNotFollowingRedirects() { } } -export function request(options: HttpRequestOptions): Promise { - return new Promise((resolve, reject) => { +let imageSource: typeof imageSourceModule; +function ensureImageSource() { + if (!imageSource) { + imageSource = require("image-source"); + } +} + +let fs: typeof fsModule; +function ensureFileSystem() { + if (!fs) { + fs = require("file-system"); + } +} + +export function request(options: httpModule.HttpRequestOptions): Promise { + return new Promise((resolve, reject) => { if (!options.url) { reject(new Error("Request url was empty.")); @@ -106,7 +117,7 @@ export function request(options: HttpRequestOptions): Promise { if (error) { reject(new Error(error.localizedDescription)); } else { - const headers: Headers = {}; + const headers: httpModule.Headers = {}; if (response && response.allHeaderFields) { const headerFields = response.allHeaderFields; @@ -136,10 +147,12 @@ export function request(options: HttpRequestOptions): Promise { toString: (encoding?: any) => NSDataToString(data, encoding), toJSON: (encoding?: any) => parseJSON(NSDataToString(data, encoding)), toImage: () => { + ensureImageSource(); + return new Promise((resolve, reject) => { (UIImage).tns_decodeImageWithDataCompletion(data, image => { if (image) { - resolve(fromNativeSource(image)); + resolve(imageSource.fromNativeSource(image)); } else { reject(new Error("Response content may not be converted to an Image")); } @@ -147,12 +160,14 @@ export function request(options: HttpRequestOptions): Promise { }); }, toFile: (destinationFilePath?: string) => { + ensureFileSystem(); + if (!destinationFilePath) { destinationFilePath = getFilenameFromUrl(options.url); } if (data instanceof NSData) { // ensure destination path exists by creating any missing parent directories - const file = File.fromPath(destinationFilePath); + const file = fs.File.fromPath(destinationFilePath); data.writeToFileAtomically(destinationFilePath, true); @@ -192,7 +207,7 @@ function NSDataToString(data: any, encoding?: HttpResponseEncoding): string { return NSString.alloc().initWithDataEncoding(data, code).toString(); } -export function addHeader(headers: Headers, key: string, value: string): void { +export function addHeader(headers: httpModule.Headers, key: string, value: string): void { if (!headers[key]) { headers[key] = value; } else if (Array.isArray(headers[key])) { From 493f314eb82fdc2ca914d80921691994c7879575 Mon Sep 17 00:00:00 2001 From: Manol Donev Date: Fri, 22 Mar 2019 11:40:40 +0200 Subject: [PATCH 3/5] chore: next widgets in master --- tns-core-modules/package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tns-core-modules/package.json b/tns-core-modules/package.json index bf25e81a7..642d7903d 100644 --- a/tns-core-modules/package.json +++ b/tns-core-modules/package.json @@ -26,7 +26,7 @@ "license": "Apache-2.0", "typings": "tns-core-modules.d.ts", "dependencies": { - "tns-core-modules-widgets": "5.3.0", + "tns-core-modules-widgets": "next", "tslib": "^1.9.3" }, "devDependencies": { From 9e789a6c2bd8bf2cabfa152a6f68d331a986de36 Mon Sep 17 00:00:00 2001 From: Nikolay Tsonev Date: Fri, 22 Mar 2019 12:19:05 +0200 Subject: [PATCH 4/5] chore(docs): remove http-post-json doc comment (#7060) Removing `// >> http-post-json`, which breaks the docs build --- tests/app/http/http-tests.ts | 1 - 1 file changed, 1 deletion(-) diff --git a/tests/app/http/http-tests.ts b/tests/app/http/http-tests.ts index 2921db254..1cd5283e9 100644 --- a/tests/app/http/http-tests.ts +++ b/tests/app/http/http-tests.ts @@ -621,7 +621,6 @@ export var test_request_NonStringHeadersSentAndReceivedProperly = function (done }; export var test_request_jsonAsContentSentAndReceivedProperly = function (done) { - // >> http-post-json var result; http.request({ From 34fe24732d98d6dfc4a7d4d4f2603b11dab5de52 Mon Sep 17 00:00:00 2001 From: Manol Donev Date: Fri, 22 Mar 2019 17:33:21 +0200 Subject: [PATCH 5/5] chore: deprecate utils.ios.getter (#7054) --- apps/app/ui-tests-app/font/all-fonts.ts | 3 +- tests/app/TKUnit.ts | 5 +- .../app/application/application-tests.ios.ts | 6 +- tests/app/pages/page5.ts | 6 +- .../date-picker-tests-native.ios.ts | 24 +- tests/app/ui/helper.ts | 985 +++++++++--------- tests/app/ui/layouts/safe-area-tests.ts | 5 +- .../time-picker-tests-native.ios.ts | 18 +- .../application-settings.ios.ts | 4 +- .../application/application.ios.ts | 30 +- .../debugger/webinspector-network.ios.ts | 17 +- .../file-system/file-system-access.ios.ts | 26 +- tns-core-modules/fps-meter/fps-native.ios.ts | 4 +- .../http/http-request/http-request.ios.ts | 9 +- tns-core-modules/platform/platform.ios.ts | 16 +- tns-core-modules/timer/timer.ios.ts | 2 +- .../ui/animation/animation.ios.ts | 6 +- tns-core-modules/ui/core/view/view.ios.ts | 4 +- .../ui/date-picker/date-picker.ios.ts | 6 +- tns-core-modules/ui/gestures/gestures.ios.ts | 6 +- .../ui/image-cache/image-cache.ios.ts | 26 +- .../ui/segmented-bar/segmented-bar.ios.ts | 4 +- tns-core-modules/ui/styling/background.ios.ts | 4 +- tns-core-modules/ui/styling/font.ios.ts | 7 +- .../ui/time-picker/time-picker.ios.ts | 7 +- tns-core-modules/ui/utils.ios.ts | 3 +- tns-core-modules/utils/utils.d.ts | 2 + tns-core-modules/utils/utils.ios.ts | 15 +- 28 files changed, 597 insertions(+), 653 deletions(-) diff --git a/apps/app/ui-tests-app/font/all-fonts.ts b/apps/app/ui-tests-app/font/all-fonts.ts index 3b4f97260..fd374dae6 100644 --- a/apps/app/ui-tests-app/font/all-fonts.ts +++ b/apps/app/ui-tests-app/font/all-fonts.ts @@ -6,7 +6,6 @@ import { Label } from "tns-core-modules/ui/label"; import { FontStyle, FontWeight } from "tns-core-modules/ui/enums"; import * as typeUtils from "tns-core-modules/utils/types"; import { Color } from "tns-core-modules/color"; -import * as utils from "tns-core-modules/utils/utils"; import { isIOS } from "tns-core-modules/platform"; const genericFontFamilies = [ @@ -48,7 +47,7 @@ let compareIgnoreCase = function (a, b) { }; if (isIOS) { - const nsFontFamilies = utils.ios.getter(UIFont, UIFont.familyNames); + const nsFontFamilies = UIFont.familyNames; for (let i = 0; i < nsFontFamilies.count; i++) { const family = nsFontFamilies.objectAtIndex(i); fontFamilies.push(family) diff --git a/tests/app/TKUnit.ts b/tests/app/TKUnit.ts index 72e4ea164..f5fda0c8f 100644 --- a/tests/app/TKUnit.ts +++ b/tests/app/TKUnit.ts @@ -15,9 +15,6 @@ import * as timer from "tns-core-modules/timer"; import * as trace from "tns-core-modules/trace"; import * as types from "tns-core-modules/utils/types"; import * as platform from "tns-core-modules/platform"; -import { topmost } from "tns-core-modules/ui/frame"; - -import * as utils from "tns-core-modules/utils/utils"; const sdkVersion = parseInt(platform.device.sdkVersion); @@ -371,7 +368,7 @@ export function waitUntilReady(isReady: () => boolean, timeoutSec: number = 3, s let totalWaitTime = 0; while (true) { const begin = time(); - const currentRunLoop = utils.ios.getter(NSRunLoop, NSRunLoop.currentRunLoop); + const currentRunLoop = NSRunLoop.currentRunLoop; currentRunLoop.limitDateForMode(currentRunLoop.currentMode); if (isReady()) { break; diff --git a/tests/app/application/application-tests.ios.ts b/tests/app/application/application-tests.ios.ts index 6be1a1073..b019da98f 100644 --- a/tests/app/application/application-tests.ios.ts +++ b/tests/app/application/application-tests.ios.ts @@ -1,11 +1,7 @@ /* tslint:disable:no-unused-variable */ import * as app from "tns-core-modules/application"; -import * as TKUnit from "../TKUnit"; import * as commonTests from "./application-tests-common"; -import * as utils from "tns-core-modules/utils/utils"; -import getter = utils.ios.getter; - global.moduleMerge(commonTests, exports); // >> application-ios-observer @@ -13,7 +9,7 @@ global.moduleMerge(commonTests, exports); if (app.ios) { var observer = app.ios.addNotificationObserver(UIDeviceBatteryLevelDidChangeNotification, function onReceiveCallback(notification: NSNotification) { - var percent = getter(UIDevice, UIDevice.currentDevice).batteryLevel * 100; + var percent = UIDevice.currentDevice.batteryLevel * 100; var message = "Battery: " + percent + "%"; ////console.log(message); }); diff --git a/tests/app/pages/page5.ts b/tests/app/pages/page5.ts index cd6f17640..b78b881b2 100644 --- a/tests/app/pages/page5.ts +++ b/tests/app/pages/page5.ts @@ -4,8 +4,6 @@ import * as buttons from "tns-core-modules/ui/button"; import * as app from "tns-core-modules/application"; import * as platform from "tns-core-modules/platform"; -import * as utils from "tns-core-modules/utils/utils"; - function printDeviceInfoAndroid() { console.log("android.os.Build.DEVICE = " + android.os.Build.DEVICE); //android.os.Build.DEVICE = hammerhead console.log("android.os.Build.VERSION.SDK = " + android.os.Build.VERSION.SDK); //android.os.Build.VERSION.SDK = 19 @@ -29,7 +27,7 @@ function printDeviceInfoAndroid() { } function printDeviceInfoIOS() { - var device = utils.ios.getter(UIDevice, UIDevice.currentDevice); + var device = UIDevice.currentDevice; console.log("device.name = " + device.name); //device.name = iPhone Simulator console.log("device.systemName = " + device.systemName); //device.systemName = iPhone OS console.log("device.systemVersion = " + device.systemVersion); //device.systemVersion = 8.1 @@ -37,7 +35,7 @@ function printDeviceInfoIOS() { console.log("device.localizedModel = " + device.localizedModel); //device.localizedModel = iPhone Simulator console.log("device.userInterfaceIdiom = " + device.userInterfaceIdiom); //device.userInterfaceIdiom = 0 console.log("device.batteryLevel = " + device.batteryLevel); //device.batteryLevel = -1 - var screen = utils.ios.getter(UIScreen, UIScreen.mainScreen); + var screen = UIScreen.mainScreen; console.log("screen = " + screen); console.log("screen.nativeBounds = " + screen.nativeBounds.size.width + ", " + screen.nativeBounds.size.height); //screen.nativeBounds = 640, 1136 console.log("screen.scale = " + screen.scale); //screen.scale = 2 diff --git a/tests/app/ui/date-picker/date-picker-tests-native.ios.ts b/tests/app/ui/date-picker/date-picker-tests-native.ios.ts index 9361d62ef..3a3231eac 100644 --- a/tests/app/ui/date-picker/date-picker-tests-native.ios.ts +++ b/tests/app/ui/date-picker/date-picker-tests-native.ios.ts @@ -1,17 +1,15 @@ import * as datePickerModule from "tns-core-modules/ui/date-picker"; -import * as utils from "tns-core-modules/utils/utils"; - export function getNativeYear(datePicker: datePickerModule.DatePicker): number { - return utils.ios.getter(NSCalendar, NSCalendar.currentCalendar).componentsFromDate(NSCalendarUnit.CalendarUnitYear | NSCalendarUnit.CalendarUnitMonth | NSCalendarUnit.CalendarUnitDay, datePicker.ios.date).year; + return NSCalendar.currentCalendar.componentsFromDate(NSCalendarUnit.CalendarUnitYear | NSCalendarUnit.CalendarUnitMonth | NSCalendarUnit.CalendarUnitDay, datePicker.ios.date).year; } export function getNativeMonth(datePicker: datePickerModule.DatePicker): number { - return utils.ios.getter(NSCalendar, NSCalendar.currentCalendar).componentsFromDate(NSCalendarUnit.CalendarUnitYear | NSCalendarUnit.CalendarUnitMonth | NSCalendarUnit.CalendarUnitDay, datePicker.ios.date).month; + return NSCalendar.currentCalendar.componentsFromDate(NSCalendarUnit.CalendarUnitYear | NSCalendarUnit.CalendarUnitMonth | NSCalendarUnit.CalendarUnitDay, datePicker.ios.date).month; } export function getNativeDay(datePicker: datePickerModule.DatePicker): number { - return utils.ios.getter(NSCalendar, NSCalendar.currentCalendar).componentsFromDate(NSCalendarUnit.CalendarUnitYear | NSCalendarUnit.CalendarUnitMonth | NSCalendarUnit.CalendarUnitDay, datePicker.ios.date).day; + return NSCalendar.currentCalendar.componentsFromDate(NSCalendarUnit.CalendarUnitYear | NSCalendarUnit.CalendarUnitMonth | NSCalendarUnit.CalendarUnitDay, datePicker.ios.date).day; } export function getNativeMaxDate(datePicker: datePickerModule.DatePicker): Date { @@ -23,31 +21,31 @@ export function getNativeMinDate(datePicker: datePickerModule.DatePicker): Date } export function setNativeYear(datePicker: datePickerModule.DatePicker, value: number): void { - var comps = utils.ios.getter(NSCalendar, NSCalendar.currentCalendar).componentsFromDate(NSCalendarUnit.CalendarUnitYear | NSCalendarUnit.CalendarUnitMonth | NSCalendarUnit.CalendarUnitDay, datePicker.ios.date); + var comps = NSCalendar.currentCalendar.componentsFromDate(NSCalendarUnit.CalendarUnitYear | NSCalendarUnit.CalendarUnitMonth | NSCalendarUnit.CalendarUnitDay, datePicker.ios.date); comps.year = value; - datePicker.ios.setDateAnimated(utils.ios.getter(NSCalendar, NSCalendar.currentCalendar).dateFromComponents(comps), false); + datePicker.ios.setDateAnimated(NSCalendar.currentCalendar.dateFromComponents(comps), false); (datePicker)._changeHandler.valueChanged(datePicker.ios); } export function setNativeMonth(datePicker: datePickerModule.DatePicker, value: number): void { - var comps = utils.ios.getter(NSCalendar, NSCalendar.currentCalendar).componentsFromDate(NSCalendarUnit.CalendarUnitYear | NSCalendarUnit.CalendarUnitMonth | NSCalendarUnit.CalendarUnitDay, datePicker.ios.date); + var comps = NSCalendar.currentCalendar.componentsFromDate(NSCalendarUnit.CalendarUnitYear | NSCalendarUnit.CalendarUnitMonth | NSCalendarUnit.CalendarUnitDay, datePicker.ios.date); comps.month = value; - datePicker.ios.setDateAnimated(utils.ios.getter(NSCalendar, NSCalendar.currentCalendar).dateFromComponents(comps), false); + datePicker.ios.setDateAnimated(NSCalendar.currentCalendar.dateFromComponents(comps), false); (datePicker)._changeHandler.valueChanged(datePicker.ios); } export function setNativeDay(datePicker: datePickerModule.DatePicker, value: number): void { - var comps = utils.ios.getter(NSCalendar, NSCalendar.currentCalendar).componentsFromDate(NSCalendarUnit.CalendarUnitYear | NSCalendarUnit.CalendarUnitMonth | NSCalendarUnit.CalendarUnitDay, datePicker.ios.date); + var comps = NSCalendar.currentCalendar.componentsFromDate(NSCalendarUnit.CalendarUnitYear | NSCalendarUnit.CalendarUnitMonth | NSCalendarUnit.CalendarUnitDay, datePicker.ios.date); comps.day = value; - datePicker.ios.setDateAnimated(utils.ios.getter(NSCalendar, NSCalendar.currentCalendar).dateFromComponents(comps), false); + datePicker.ios.setDateAnimated(NSCalendar.currentCalendar.dateFromComponents(comps), false); (datePicker)._changeHandler.valueChanged(datePicker.ios); } export function setNativeDate(datePicker: datePickerModule.DatePicker, year: number, month: number, day: number): void { - var comps = utils.ios.getter(NSCalendar, NSCalendar.currentCalendar).componentsFromDate(NSCalendarUnit.CalendarUnitYear | NSCalendarUnit.CalendarUnitMonth | NSCalendarUnit.CalendarUnitDay, datePicker.ios.date); + var comps = NSCalendar.currentCalendar.componentsFromDate(NSCalendarUnit.CalendarUnitYear | NSCalendarUnit.CalendarUnitMonth | NSCalendarUnit.CalendarUnitDay, datePicker.ios.date); comps.year = year; comps.month = month; comps.day = day; - datePicker.ios.setDateAnimated(utils.ios.getter(NSCalendar, NSCalendar.currentCalendar).dateFromComponents(comps), false); + datePicker.ios.setDateAnimated(NSCalendar.currentCalendar.dateFromComponents(comps), false); (datePicker)._changeHandler.valueChanged(datePicker.ios); } diff --git a/tests/app/ui/helper.ts b/tests/app/ui/helper.ts index 74bc6dd4a..6ccd5b490 100644 --- a/tests/app/ui/helper.ts +++ b/tests/app/ui/helper.ts @@ -10,7 +10,6 @@ import { ActionBar } from "tns-core-modules/ui/action-bar"; import { Color } from "tns-core-modules/color"; import { LayoutBase } from "tns-core-modules/ui/layouts/layout-base"; -import { FlexboxLayout } from "tns-core-modules/ui/layouts/flexbox-layout"; import { FormattedString, Span } from "tns-core-modules/text/formatted-string"; import { _getProperties, _getStyleProperties } from "tns-core-modules/ui/core/properties"; import { device } from "tns-core-modules/platform"; @@ -305,11 +304,11 @@ export function _generateFormattedString(): FormattedString { return formattedString; } -const props = _getProperties(); -const styleProps = _getStyleProperties(); -let setters: Map; -let cssSetters: Map; -let defaultNativeGetters: Map any>; +// const props = _getProperties(); +// const styleProps = _getStyleProperties(); +// let setters: Map; +// let cssSetters: Map; +// let defaultNativeGetters: Map any>; export function nativeView_recycling_test(createNew: () => View, createLayout?: () => LayoutBase, nativeGetters?: Map any>, customSetters?: Map) { return; @@ -373,490 +372,490 @@ export function nativeView_recycling_test(createNew: () => View, createLayout?: // layout.removeChild(first); } -function compareUsingReflection(recycledNativeView: View, newNativeView: View): void { - const recycled: android.view.View = recycledNativeView.nativeViewProtected; - const newer: android.view.View = newNativeView.nativeViewProtected; - TKUnit.assertNotEqual(recycled, newer); - const methods = newer.getClass().getMethods(); - for (let i = 0, length = methods.length; i < length; i++) { - const method = methods[i]; - const returnType = method.getReturnType(); - const name = method.getName(); - const skip = name.includes("ViewId") - || name.includes("Accessibility") - || name.includes("hashCode") - || name === "getId" - || name === "hasFocus" - || name === "isDirty" - || name === "getLeft" - || name === "getTop" - || name === "getRight" - || name === "getBottom" - || name === "getWidth" - || name === "getHeight" - || name === "getX" - || name === "getY" - || name.includes("getMeasured") - || name === "toString"; - - if (skip || method.getParameterTypes().length > 0) { - continue; - } - - if ((java).lang.Comparable.class.isAssignableFrom(returnType)) { - const defValue = method.invoke(newer, null); - const currValue = method.invoke(recycled, null); - if (defValue !== currValue && defValue.compareTo(currValue) !== 0) { - throw new Error(`Actual: ${currValue}, Expected: ${defValue}, for method: ${method.getName()}`); - } - } else if (java.lang.String.class === returnType || - java.lang.Character.class === returnType || - (java).lang.CharSequence.class === returnType || - returnType === java.lang.Byte.TYPE || - returnType === java.lang.Double.TYPE || - returnType === java.lang.Float.TYPE || - returnType === java.lang.Integer.TYPE || - returnType === java.lang.Long.TYPE || - returnType === java.lang.Short.TYPE || - returnType === java.lang.Boolean.TYPE) { - - const defValue = method.invoke(newer, null); - const currValue = method.invoke(recycled, null); - if ((currValue + "") !== (defValue + "")) { - throw new Error(`Actual: ${currValue}, Expected: ${defValue}, for method: ${method.getName()}`); - } - } - } -} - -function checkDefaults(newer: View, first: View, props: Array, nativeGetters: Map any>): void { - props.forEach(prop => { - const name = (prop).name; - if (nativeGetters.has(name)) { - const getter = nativeGetters.get(name); - TKUnit.assertDeepEqual(getter(newer), getter(first), name); - } else if (newer[prop.getDefault]) { - TKUnit.assertDeepEqual(newer[prop.getDefault](), first[prop.getDefault](), name); - } else if (newer[prop.setNative]) { - console.log(`Type: ${newer.typeName} has no getter for ${name} property.`) - } - }); -} - -function setValue(object: Object, setters: Map, customSetters?: Map): void { - setters.forEach((value1, key) => { - let value = customSetters && customSetters.has(key) ? customSetters.get(key) : value1; - const currentValue = object[key]; - if (currentValue === value) { - if (value === "horizontal" && key === "orientation") { - // wrap-layout.orientation default value is 'horizontal' - value = "vertical"; - } else if (value === 2) { - value = 3; - } - } - - object[key] = value; - const newValue = object[key]; - TKUnit.assertNotEqual(newValue, currentValue, `${object} setting ${key} should change current value.`); - }); -} - -function setupSetters(): void { - if (setters) { - return; - } - - setters = new Map(); - // view-base - setters.set("id", "someId"); - setters.set("className", "someClassName"); - setters.set("bindingContext", "someBindingContext"); - - // view - setters.set("automationText", "automationText"); - setters.set("originX", 0.2); - setters.set("originY", 0.2); - setters.set("isEnabled", false); - setters.set("isUserInteractionEnabled", false); - - // action-bar - setters.set("title", "title"); - setters.set("text", "text"); - setters.set("icon", "~/logo.png"); - setters.set("visibility", "collapse"); - - // activity-indicator - setters.set("busy", true); - - // date-picker - setters.set("year", "2010"); - setters.set("month", "2"); - setters.set("day", "2"); - setters.set("maxDate", "2100"); - setters.set("minDate", "2000"); - setters.set("date", new Date(2011, 3, 3)); - - // editable-text - setters.set("keyboardType", "datetime"); - setters.set("returnKeyType", "done"); - setters.set("editable", false); - setters.set("updateTextTrigger", "focusLost"); - setters.set("autocapitalizationType", "words"); - setters.set("autocorrect", true); - setters.set("hint", "hint"); - setters.set("maxLength", "10"); - - // html-view - setters.set("html", ""); - - // image-view - setters.set("imageSource", ""); - setters.set("src", ""); - setters.set("loadMode", "async"); - setters.set("isLoading", true); - setters.set("stretch", "none"); - - // layout-base - setters.set("clipToBounds", false); - - // absolute-layout - setters.set("left", "20"); - setters.set("top", "20"); - - // dock-layout - setters.set("dock", "top"); - setters.set("stretchLastChild", false); - - // grid-layout props - setters.set("row", "1"); - setters.set("rowSpan", "2"); - setters.set("col", "1"); - setters.set("colSpan", "2"); - - // stack-layout - setters.set("orientation", "horizontal"); - - // wrap-layout - // custom orientation value - // setters.set('orientation', 'vertical'); - setters.set("itemWidth", "50"); - setters.set("itemHeight", "50"); - - // list-picker - setters.set("items", ["1", "2", "3"]); - setters.set("selectedIndex", "1"); - - // list-view - setters.set("items", ["1", "2", "3"]); - setters.set("itemTemplate", "