feat: new expression parser for xml bindings (#9729)

This commit is contained in:
Dimitris - Rafail Katsampas
2022-01-06 19:04:54 +02:00
committed by Nathan Walker
parent a518249958
commit 90ceed15d3
17 changed files with 310 additions and 2496 deletions

View File

@@ -659,17 +659,19 @@ export function test_BindingConverterCalledEvenWithNullValue() {
const testPropertyValue = null;
const expectedValue = 'collapsed';
pageViewModel.set('testProperty', testPropertyValue);
appModule.getResources()['converter'] = function (value) {
if (value) {
return 'visible';
} else {
return 'collapsed';
}
appModule.getResources()['converter'] = {
toView: function (value) {
if (value) {
return 'visible';
} else {
return 'collapsed';
}
},
};
const testFunc = function (views: Array<View>) {
const testLabel = <Label>views[0];
testLabel.bind({ sourceProperty: 'testProperty', targetProperty: 'text', expression: 'testProperty | converter' });
testLabel.bind({ sourceProperty: 'testProperty', targetProperty: 'text', expression: 'testProperty | converter()' });
const page = <Page>views[1];
page.bindingContext = pageViewModel;

View File

@@ -437,15 +437,17 @@ export class ListViewTest extends UITest<ListView> {
public test_usingAppLevelConvertersInListViewItems() {
var listView = this.testView;
var dateConverter = function (value, format) {
var result = format;
var day = value.getDate();
result = result.replace('DD', day < 10 ? '0' + day : day);
var month = value.getMonth() + 1;
result = result.replace('MM', month < 10 ? '0' + month : month);
result = result.replace('YYYY', value.getFullYear());
var dateConverter = {
toView: function (value, format) {
var result = format;
var day = value.getDate();
result = result.replace('DD', day < 10 ? '0' + day : day);
var month = value.getMonth() + 1;
result = result.replace('MM', month < 10 ? '0' + month : month);
result = result.replace('YYYY', value.getFullYear());
return result;
return result;
},
};
Application.getResources()['dateConverter'] = dateConverter;
@@ -565,10 +567,12 @@ export class ListViewTest extends UITest<ListView> {
var listView = this.testView;
var converterCalledCounter = 0;
var testConverter = function (value) {
converterCalledCounter++;
var testConverter = {
toView: function (value) {
converterCalledCounter++;
return value;
return value;
},
};
Application.getResources()['testConverter'] = testConverter;
@@ -578,7 +582,7 @@ export class ListViewTest extends UITest<ListView> {
listView.bindingContext = listViewModel;
listView.bind({ sourceProperty: 'items', targetProperty: 'items' });
listView.itemTemplate = '<Label id="testLabel" text="{{ $value, $value | testConverter }}" />';
listView.itemTemplate = '<Label id="testLabel" text="{{ $value, $value | testConverter() }}" />';
this.waitUntilListViewReady();
@@ -589,10 +593,12 @@ export class ListViewTest extends UITest<ListView> {
var listView = this.testView;
var converterCalledCounter = 0;
var testConverter = function (value) {
converterCalledCounter++;
var testConverter = {
toView: function (value) {
converterCalledCounter++;
return value;
return value;
},
};
Application.getResources()['testConverter'] = testConverter;
@@ -602,7 +608,7 @@ export class ListViewTest extends UITest<ListView> {
listView.bindingContext = listViewModel;
listView.bind({ sourceProperty: 'items', targetProperty: 'items' });
listView.itemTemplate = '<StackLayout><Label id="testLabel" text="{{ $value, $value | testConverter }}" /></StackLayout>';
listView.itemTemplate = '<StackLayout><Label id="testLabel" text="{{ $value, $value | testConverter() }}" /></StackLayout>';
this.waitUntilListViewReady();

View File

@@ -252,15 +252,17 @@ export function test_splice_observable_array_refreshes_the_Repeater() {
export function test_usingAppLevelConvertersInRepeaterItems() {
var repeater = new Repeater();
var dateConverter = function (value, format) {
var result = format;
var day = value.getDate();
result = result.replace('DD', month < 10 ? '0' + day : day);
var month = value.getMonth() + 1;
result = result.replace('MM', month < 10 ? '0' + month : month);
result = result.replace('YYYY', value.getFullYear());
var dateConverter = {
toView: function (value, format) {
var result = format;
var day = value.getDate();
result = result.replace('DD', month < 10 ? '0' + day : day);
var month = value.getMonth() + 1;
result = result.replace('MM', month < 10 ? '0' + month : month);
result = result.replace('YYYY', value.getFullYear());
return result;
return result;
},
};
Application.getResources()['dateConverter'] = dateConverter;
@@ -275,7 +277,7 @@ export function test_usingAppLevelConvertersInRepeaterItems() {
TKUnit.waitUntilReady(() => repeater.isLayoutValid);
TKUnit.assertEqual(getChildAtText(repeater, 0), dateConverter(new Date(), 'DD.MM.YYYY'), 'element');
TKUnit.assertEqual(getChildAtText(repeater, 0), dateConverter.toView(new Date(), 'DD.MM.YYYY'), 'element');
}
helper.buildUIAndRunTest(repeater, testAction);