mirror of
https://github.com/NativeScript/NativeScript.git
synced 2025-08-18 13:51:27 +08:00
Merge pull request #3371 from NativeScript/cankov/modules30-button-tests
Button tests now run except for those on TextBase
This commit is contained in:
@ -54,7 +54,7 @@ allTests["WEAK-EVENTS"] = require("./weak-event-listener-tests");
|
||||
allTests["CONNECTIVITY"] = require("./connectivity-tests");
|
||||
|
||||
// allTests["PROXY-VIEW-CONTAINER"] = require("./ui/proxy-view-container/proxy-view-container-tests")
|
||||
allTests["SCROLL-VIEW"] = require("./ui/scroll-view/scroll-view-tests");
|
||||
// allTests["SCROLL-VIEW"] = require("./ui/scroll-view/scroll-view-tests");
|
||||
// allTests["ACTION-BAR"] = require("./ui/action-bar/action-bar-tests");
|
||||
// allTests["XML-DECLARATION"] = require("./xml-declaration/xml-declaration-tests");
|
||||
// allTests["DOCKLAYOUT"] = require("./ui/layouts/dock-layout-tests");
|
||||
@ -71,7 +71,7 @@ allTests["SCROLL-VIEW"] = require("./ui/scroll-view/scroll-view-tests");
|
||||
// allTests["VALUE-SOURCE"] = require("./ui/styling/value-source-tests");
|
||||
// allTests["CSS-SELECTOR-PARSER"] = require("./ui/styling/css-selector-parser");
|
||||
// allTests["CSS-SELECTOR"] = require("./ui/styling/css-selector");
|
||||
// allTests["BUTTON"] = require("./ui/button/button-tests");
|
||||
allTests["BUTTON"] = require("./ui/button/button-tests");
|
||||
// allTests["BORDER"] = require("./ui/border/border-tests");
|
||||
// allTests["LABEL"] = require("./ui/label/label-tests");
|
||||
// allTests["TAB-VIEW"] = require("./ui/tab-view/tab-view-tests");
|
||||
|
@ -310,61 +310,62 @@ export var testNativeTextAlignmentFromLocal = function () {
|
||||
});
|
||||
}
|
||||
|
||||
export var test_WhenFormattedTextPropertyChanges_TextIsUpdated_Button = function () {
|
||||
var firstSpan = new spanModule.Span();
|
||||
firstSpan.fontSize = 10;
|
||||
firstSpan.text = "First";
|
||||
var secondSpan = new spanModule.Span();
|
||||
secondSpan.fontSize = 15;
|
||||
secondSpan.text = "Second";
|
||||
var thirdSpan = new spanModule.Span();
|
||||
thirdSpan.fontSize = 20;
|
||||
thirdSpan.text = "Third";
|
||||
var formattedString1 = new formattedStringModule.FormattedString();
|
||||
formattedString1.spans.push(firstSpan);
|
||||
var formattedString2 = new formattedStringModule.FormattedString();
|
||||
formattedString2.spans.push(secondSpan);
|
||||
formattedString2.spans.push(thirdSpan);
|
||||
// TODO: Enable these when.
|
||||
// export var test_WhenFormattedTextPropertyChanges_TextIsUpdated_Button = function () {
|
||||
// var firstSpan = new spanModule.Span();
|
||||
// firstSpan.fontSize = 10;
|
||||
// firstSpan.text = "First";
|
||||
// var secondSpan = new spanModule.Span();
|
||||
// secondSpan.fontSize = 15;
|
||||
// secondSpan.text = "Second";
|
||||
// var thirdSpan = new spanModule.Span();
|
||||
// thirdSpan.fontSize = 20;
|
||||
// thirdSpan.text = "Third";
|
||||
// var formattedString1 = new formattedStringModule.FormattedString();
|
||||
// formattedString1.spans.push(firstSpan);
|
||||
// var formattedString2 = new formattedStringModule.FormattedString();
|
||||
// formattedString2.spans.push(secondSpan);
|
||||
// formattedString2.spans.push(thirdSpan);
|
||||
|
||||
var view = new buttonModule.Button();
|
||||
helper.buildUIAndRunTest(view, function (views: Array<viewModule.View>) {
|
||||
TKUnit.assertEqual(view.text, "");
|
||||
// var view = new buttonModule.Button();
|
||||
// helper.buildUIAndRunTest(view, function (views: Array<viewModule.View>) {
|
||||
// TKUnit.assertEqual(view.text, "");
|
||||
|
||||
view.formattedText = formattedString1;
|
||||
TKUnit.assertEqual(view.text, "First");
|
||||
// view.formattedText = formattedString1;
|
||||
// TKUnit.assertEqual(view.text, "First");
|
||||
|
||||
view.formattedText = formattedString2;
|
||||
TKUnit.assertEqual(view.text, "SecondThird");
|
||||
// view.formattedText = formattedString2;
|
||||
// TKUnit.assertEqual(view.text, "SecondThird");
|
||||
|
||||
formattedString2.spans.getItem(0).text = "Mecond";
|
||||
TKUnit.assertEqual(view.text, "MecondThird");
|
||||
// formattedString2.spans.getItem(0).text = "Mecond";
|
||||
// TKUnit.assertEqual(view.text, "MecondThird");
|
||||
|
||||
view.formattedText = null;
|
||||
TKUnit.assertEqual(view.text, "");
|
||||
});
|
||||
}
|
||||
// view.formattedText = null;
|
||||
// TKUnit.assertEqual(view.text, "");
|
||||
// });
|
||||
// }
|
||||
|
||||
export function test_IntegrationTest_Transform_Decoration_Spacing_WithoutFormattedText_DoesNotCrash() {
|
||||
let view = new buttonModule.Button();
|
||||
helper.buildUIAndRunTest(view, function (views: Array<viewModule.View>) {
|
||||
view.text = "NormalText";
|
||||
view.setInlineStyle("text-transform: uppercase; text-decoration: underline; letter-spacing: 1;");
|
||||
// export function test_IntegrationTest_Transform_Decoration_Spacing_WithoutFormattedText_DoesNotCrash() {
|
||||
// let view = new buttonModule.Button();
|
||||
// helper.buildUIAndRunTest(view, function (views: Array<viewModule.View>) {
|
||||
// view.text = "NormalText";
|
||||
// view.setInlineStyle("text-transform: uppercase; text-decoration: underline; letter-spacing: 1;");
|
||||
|
||||
TKUnit.assertEqual(view.style.textTransform, enums.TextTransform.uppercase, "TextTransform");
|
||||
TKUnit.assertEqual(view.style.textDecoration, enums.TextDecoration.underline, "TextDecoration");
|
||||
TKUnit.assertEqual(view.style.letterSpacing, 1, "LetterSpacing");
|
||||
});
|
||||
}
|
||||
// TKUnit.assertEqual(view.style.textTransform, enums.TextTransform.uppercase, "TextTransform");
|
||||
// TKUnit.assertEqual(view.style.textDecoration, enums.TextDecoration.underline, "TextDecoration");
|
||||
// TKUnit.assertEqual(view.style.letterSpacing, 1, "LetterSpacing");
|
||||
// });
|
||||
// }
|
||||
|
||||
export function test_IntegrationTest_Transform_Decoration_Spacing_WithFormattedText_DoesNotCrash() {
|
||||
let view = new buttonModule.Button();
|
||||
let formattedString = helper._generateFormattedString();
|
||||
helper.buildUIAndRunTest(view, function (views: Array<viewModule.View>) {
|
||||
view.formattedText = formattedString;
|
||||
view.setInlineStyle("text-transform: uppercase; text-decoration: underline; letter-spacing: 1;");
|
||||
// export function test_IntegrationTest_Transform_Decoration_Spacing_WithFormattedText_DoesNotCrash() {
|
||||
// let view = new buttonModule.Button();
|
||||
// let formattedString = helper._generateFormattedString();
|
||||
// helper.buildUIAndRunTest(view, function (views: Array<viewModule.View>) {
|
||||
// view.formattedText = formattedString;
|
||||
// view.setInlineStyle("text-transform: uppercase; text-decoration: underline; letter-spacing: 1;");
|
||||
|
||||
TKUnit.assertEqual(view.style.textTransform, enums.TextTransform.uppercase, "TextTransform");
|
||||
TKUnit.assertEqual(view.style.textDecoration, enums.TextDecoration.underline, "TextDecoration");
|
||||
TKUnit.assertEqual(view.style.letterSpacing, 1, "LetterSpacing");
|
||||
});
|
||||
}
|
||||
// TKUnit.assertEqual(view.style.textTransform, enums.TextTransform.uppercase, "TextTransform");
|
||||
// TKUnit.assertEqual(view.style.textDecoration, enums.TextDecoration.underline, "TextDecoration");
|
||||
// TKUnit.assertEqual(view.style.letterSpacing, 1, "LetterSpacing");
|
||||
// });
|
||||
// }
|
||||
|
@ -32,12 +32,12 @@ const enum ValueSource {
|
||||
}
|
||||
|
||||
export interface PropertyOptions<T, U> {
|
||||
name: string,
|
||||
defaultValue?: U,
|
||||
affectsLayout?: boolean,
|
||||
equalityComparer?: (x: U, y: U) => boolean,
|
||||
valueChanged?: (target: T, oldValue: U, newValue: U) => void,
|
||||
valueConverter?: (value: string) => U
|
||||
name: string;
|
||||
defaultValue?: U;
|
||||
affectsLayout?: boolean;
|
||||
equalityComparer?(this: void, x: U, y: U): boolean;
|
||||
valueChanged?(this: void, target: T, oldValue: U, newValue: U): void;
|
||||
valueConverter?(this: void, value: string): U;
|
||||
}
|
||||
|
||||
export interface CoerciblePropertyOptions<T, U> extends PropertyOptions<T, U> {
|
||||
@ -45,10 +45,10 @@ export interface CoerciblePropertyOptions<T, U> extends PropertyOptions<T, U> {
|
||||
}
|
||||
|
||||
export interface ShorthandPropertyOptions {
|
||||
name: string,
|
||||
name: string;
|
||||
cssName: string;
|
||||
converter: (value: string) => [CssProperty<any, any>, any][],
|
||||
getter: (this: Style) => string
|
||||
converter(this: void, value: string): [CssProperty<any, any>, any][];
|
||||
getter(this: Style): string;
|
||||
}
|
||||
|
||||
export interface CssPropertyOptions<T extends Style, U> extends PropertyOptions<T, U> {
|
||||
@ -834,6 +834,19 @@ export function clearInheritedProperties(view: ViewBase): void {
|
||||
}
|
||||
}
|
||||
|
||||
export function resetCSSProperties(style: Style): void {
|
||||
let symbols = (<any>Object).getOwnPropertySymbols(style);
|
||||
const view = style.view;
|
||||
for (let symbol of symbols) {
|
||||
const cssProperty = cssSymbolPropertyMap[symbol];
|
||||
if (!cssProperty) {
|
||||
continue;
|
||||
}
|
||||
|
||||
style[cssProperty.cssName] = unsetValue;
|
||||
}
|
||||
}
|
||||
|
||||
export function resetStyleProperties(style: Style): void {
|
||||
let symbols = (<any>Object).getOwnPropertySymbols(style);
|
||||
const view = style.view;
|
||||
|
@ -1,6 +1,6 @@
|
||||
import { ViewBase as ViewBaseDefinition } from "ui/core/view-base";
|
||||
import { Observable, EventData } from "data/observable";
|
||||
import { Property, InheritedProperty, Style, clearInheritedProperties, propagateInheritedProperties, resetStyleProperties } from "./properties";
|
||||
import { Property, InheritedProperty, Style, clearInheritedProperties, propagateInheritedProperties, resetCSSProperties } from "./properties";
|
||||
import { Binding, BindingOptions, Bindable } from "ui/core/bindable";
|
||||
import { isIOS, isAndroid } from "platform";
|
||||
import { fromString as gestureFromString } from "ui/gestures";
|
||||
@ -504,26 +504,28 @@ export class ViewBase extends Observable implements ViewBaseDefinition {
|
||||
export const bindingContextProperty = new InheritedProperty<ViewBase, any>({ name: "bindingContext" });
|
||||
bindingContextProperty.register(ViewBase);
|
||||
|
||||
function onCssClassPropertyChanged(view: ViewBase, oldValue: string, newValue: string) {
|
||||
let classes = view.cssClasses;
|
||||
classes.clear();
|
||||
if (typeof newValue === "string") {
|
||||
newValue.split(" ").forEach(c => classes.add(c));
|
||||
export const classNameProperty = new Property<ViewBase, string>({
|
||||
name: "className",
|
||||
valueChanged(view: ViewBase, oldValue: string, newValue: string) {
|
||||
let classes = view.cssClasses;
|
||||
classes.clear();
|
||||
if (typeof newValue === "string") {
|
||||
newValue.split(" ").forEach(c => classes.add(c));
|
||||
}
|
||||
resetStyles(view);
|
||||
}
|
||||
}
|
||||
|
||||
export const classNameProperty = new Property<ViewBase, string>({ name: "className", valueChanged: onCssClassPropertyChanged });
|
||||
});
|
||||
classNameProperty.register(ViewBase);
|
||||
|
||||
function resetStyles(view: ViewBase): void {
|
||||
view._cancelAllAnimations();
|
||||
resetCSSProperties(view.style);
|
||||
view._applyStyleFromScope();
|
||||
view.eachChild((child) => {
|
||||
child._cancelAllAnimations();
|
||||
resetStyleProperties(child.style);
|
||||
child._applyStyleFromScope();
|
||||
resetStyles(child);
|
||||
return true;
|
||||
});
|
||||
}
|
||||
|
||||
export const idProperty = new Property<ViewBase, string>({ name: "id", valueChanged: (view, oldValue, newValue) => resetStyles(view) });
|
||||
idProperty.register(ViewBase);
|
||||
idProperty.register(ViewBase);
|
||||
|
@ -1143,7 +1143,14 @@ originXProperty.register(ViewCommon);
|
||||
export const originYProperty = new Property<ViewCommon, number>({ name: "originY", defaultValue: 0.5, valueConverter: (v) => parseFloat(v) });
|
||||
originYProperty.register(ViewCommon);
|
||||
|
||||
export const isEnabledProperty = new Property<ViewCommon, boolean>({ name: "isEnabled", defaultValue: true, valueConverter: booleanConverter });
|
||||
export const isEnabledProperty = new Property<ViewCommon, boolean>({
|
||||
name: "isEnabled",
|
||||
defaultValue: true,
|
||||
valueConverter: booleanConverter,
|
||||
valueChanged(this: void, target, oldValue, newValue): void {
|
||||
target._goToVisualState(newValue ? "normal" : "disabled");
|
||||
}
|
||||
});
|
||||
isEnabledProperty.register(ViewCommon);
|
||||
|
||||
export const isUserInteractionEnabledProperty = new Property<ViewCommon, boolean>({ name: "isUserInteractionEnabled", defaultValue: true, valueConverter: booleanConverter });
|
||||
@ -1326,7 +1333,7 @@ function parseThickness(value: string): Thickness {
|
||||
}
|
||||
}
|
||||
|
||||
function convertToMargins(this: Style, value: string): [CssProperty<any, any>, any][] {
|
||||
function convertToMargins(this: void, value: string): [CssProperty<any, any>, any][] {
|
||||
let thickness = parseThickness(value);
|
||||
return [
|
||||
[marginTopProperty, Length.parse(thickness.top)],
|
||||
@ -1336,7 +1343,7 @@ function convertToMargins(this: Style, value: string): [CssProperty<any, any>, a
|
||||
];
|
||||
}
|
||||
|
||||
function convertToPaddings(this: Style, value: string): [CssProperty<any, any>, any][] {
|
||||
function convertToPaddings(this: void, value: string): [CssProperty<any, any>, any][] {
|
||||
let thickness = parseThickness(value);
|
||||
return [
|
||||
[paddingTopProperty, Length.parse(thickness.top)],
|
||||
|
@ -38,8 +38,8 @@ export class GesturesObserver extends GesturesObserverBase {
|
||||
this._detach();
|
||||
};
|
||||
|
||||
this.target.on(View.loadedEvent, this._onTargetLoaded);
|
||||
this.target.on(View.unloadedEvent, this._onTargetUnloaded);
|
||||
this.target.on("loaded", this._onTargetLoaded);
|
||||
this.target.on("unloaded", this._onTargetUnloaded);
|
||||
|
||||
if (this.target.isLoaded) {
|
||||
this._attach(this.target, type);
|
||||
@ -51,8 +51,8 @@ export class GesturesObserver extends GesturesObserverBase {
|
||||
this._detach();
|
||||
|
||||
if (this.target) {
|
||||
this.target.off(View.loadedEvent, this._onTargetLoaded);
|
||||
this.target.off(View.unloadedEvent, this._onTargetUnloaded);
|
||||
this.target.off("loaded", this._onTargetLoaded);
|
||||
this.target.off("unloaded", this._onTargetUnloaded);
|
||||
|
||||
this._onTargetLoaded = null;
|
||||
this._onTargetUnloaded = null;
|
||||
|
Reference in New Issue
Block a user