diff --git a/CrossPlatformModules.csproj b/CrossPlatformModules.csproj
index eee46e931..7ac220658 100644
--- a/CrossPlatformModules.csproj
+++ b/CrossPlatformModules.csproj
@@ -220,8 +220,33 @@
bindingContext_testPage.xml
+
+ bindingExpressions_logicalComparisonOperators_testPage.xml
+
+
+ bindingExpressions_comparisonOperators_testPage.xml
+
+
+ bindingExpressions_binaryOperators_testPage.xml
+
+
+ bindingExpressions_ternaryOperator_testPage.xml
+
+
+ bindingExpressions_groupingParenthesis_testPage.xml
+
+
+ bindingExpressions_unaryOperators_testPage.xml
+
+
+ bindingExpressions_logicalOperators_testPage.xml
+
+
+ bindingExpressions_arrayAccess_testPage.xml
+
+
time-picker-tests-native.d.ts
@@ -792,6 +817,14 @@
+
+
+
+
+
+
+
+
diff --git a/apps/tests/testRunner.ts b/apps/tests/testRunner.ts
index f9facf84a..59680937e 100644
--- a/apps/tests/testRunner.ts
+++ b/apps/tests/testRunner.ts
@@ -47,6 +47,7 @@ allTests["VIRTUAL-ARRAY"] = require("./virtual-array-tests");
allTests["OBSERVABLE"] = require("./ui/observable-tests");
allTests["DEPENDENCY-OBSERVABLE"] = require("./ui/dependency-observable-tests");
allTests["BINDABLE"] = require("./ui/bindable-tests");
+allTests["BINDING-EXPRESSIONS"] = require("./ui/binding-expressions-tests");
allTests["XML-PARSER"] = require("./xml-parser-tests/xml-parser-tests");
allTests["VIEW"] = require("./ui/view/view-tests");
allTests["STYLE"] = require("./ui/style/style-tests");
diff --git a/apps/tests/ui/binding-expressions-tests.ts b/apps/tests/ui/binding-expressions-tests.ts
new file mode 100644
index 000000000..62f30d037
--- /dev/null
+++ b/apps/tests/ui/binding-expressions-tests.ts
@@ -0,0 +1,122 @@
+import frameModule = require("ui/frame");
+import textFieldModule = require("ui/text-field");
+import fs = require("file-system");
+import helper = require("../ui/helper");
+
+export var test_BindingExpressions_ArrayAccess = function () {
+ navigateToPage("bindingExpressions_arrayAccess_testPage");
+ try {
+ assertElementString("textField1", "bindings");
+ assertElementString("textField2", "1");
+ } finally {
+ helper.goBack();
+ }
+}
+
+export var test_BindingExpressions_LogicalOperators = function () {
+ navigateToPage("bindingExpressions_logicalOperators_testPage");
+ try {
+ assertElementString("textField1", "true");
+ assertElementString("textField2", "false");
+ assertElementString("textField3", "true");
+ } finally {
+ helper.goBack();
+ }
+}
+
+export var test_BindingExpressions_UnaryOperators = function () {
+ navigateToPage("bindingExpressions_unaryOperators_testPage");
+ try {
+ assertElementString("textField1", "5");
+ assertElementString("textField2", "-5");
+ assertElementString("textField3", "3");
+ assertElementString("textField4", "-3");
+ assertElementString("textField5", "1");
+ assertElementString("textField6", "-1");
+ assertElementValueIsNaN("textField7");
+ assertElementValueIsNaN("textField8");
+ } finally {
+ helper.goBack();
+ }
+}
+
+export var test_BindingExpressions_BinaryOperators = function () {
+ navigateToPage("bindingExpressions_binaryOperators_testPage");
+ try {
+ assertElementString("textField1", "1");
+ assertElementString("textField2", "-1");
+ assertElementString("textField3", "0");
+ assertElementString("textField4", "0");
+ assertElementString("textField5", "Infinity");
+ assertElementString("textField6", "0");
+ assertElementValueIsNaN("textField7");
+ } finally {
+ helper.goBack();
+ }
+}
+
+export var test_BindingExpressions_ComparisonOperators = function () {
+ navigateToPage("bindingExpressions_comparisonOperators_testPage");
+ try {
+ assertElementString("textField1", "true");
+ //assertElementString("textField2", "false");
+ assertElementString("textField3", "true");
+ //assertElementString("textField4", "false");
+ assertElementString("textField5", "false");
+ assertElementString("textField6", "true");
+ assertElementString("textField7", "false");
+ assertElementString("textField8", "true");
+ } finally {
+ helper.goBack();
+ }
+}
+
+export var test_BindingExpressions_LogicalComparisonOperators = function () {
+ navigateToPage("bindingExpressions_logicalComparisonOperators_testPage");
+ try {
+ assertElementString("textField1", "false");
+ assertElementString("textField2", "true");
+ assertElementString("textField3", "Text");
+ } finally {
+ helper.goBack();
+ }
+}
+
+export var test_BindingExpressions_TernaryOperator = function () {
+ navigateToPage("bindingExpressions_ternaryOperator_testPage");
+ try {
+ assertElementString("textField1", "by Pratchett");
+ } finally {
+ helper.goBack();
+ }
+}
+
+export var test_BindingExpressions_GroupingParenthesis = function () {
+ navigateToPage("bindingExpressions_groupingParenthesis_testPage");
+ try {
+ assertElementString("textField1", "21");
+ assertElementString("textField2", "8");
+ } finally {
+ helper.goBack();
+ }
+}
+
+export var assertElementString = function (elementId: string, value: any) {
+ var element: textFieldModule.TextField = (frameModule.topmost().currentPage.getViewById(elementId));
+ if (element.text.toString() !== value) {
+ throw new Error(" Actual: " + element.text.toString() + " Expected: " + value);
+ }
+}
+
+export var assertElementValueIsNaN = function (elementId: string) {
+ var element: textFieldModule.TextField = (frameModule.topmost().currentPage.getViewById(elementId));
+ var value: any = element.text;
+ if (isNaN(value) !== true) {
+ throw new Error(" Actual: " + value + " is not NaN");
+ }
+}
+
+export var navigateToPage = function (pageName: string) {
+ var path = __dirname.substr(fs.knownFolders.currentApp().path.length);
+ helper.navigateToModule(path + "/test-pages/" + pageName);
+}
\ No newline at end of file
diff --git a/apps/tests/ui/test-pages/bindingExpressions_arrayAccess_testPage.ts b/apps/tests/ui/test-pages/bindingExpressions_arrayAccess_testPage.ts
new file mode 100644
index 000000000..7ac8a688b
--- /dev/null
+++ b/apps/tests/ui/test-pages/bindingExpressions_arrayAccess_testPage.ts
@@ -0,0 +1,8 @@
+import pages = require("ui/page");
+
+export function pageLoaded(args) {
+ var strArr: string[] = ["tests", "bindings", "tests"];
+ var numArr: number[] = [-1, 0, 1];
+ var page = args.object;
+ page.bindingContext = { strArray: strArr, numArray: numArr };
+}
\ No newline at end of file
diff --git a/apps/tests/ui/test-pages/bindingExpressions_arrayAccess_testPage.xml b/apps/tests/ui/test-pages/bindingExpressions_arrayAccess_testPage.xml
new file mode 100644
index 000000000..e79a23786
--- /dev/null
+++ b/apps/tests/ui/test-pages/bindingExpressions_arrayAccess_testPage.xml
@@ -0,0 +1,6 @@
+
+
+
+
+
+
diff --git a/apps/tests/ui/test-pages/bindingExpressions_binaryOperators_testPage.ts b/apps/tests/ui/test-pages/bindingExpressions_binaryOperators_testPage.ts
new file mode 100644
index 000000000..0f5981e6b
--- /dev/null
+++ b/apps/tests/ui/test-pages/bindingExpressions_binaryOperators_testPage.ts
@@ -0,0 +1,6 @@
+import pages = require("ui/page");
+
+export function pageLoaded(args) {
+ var page = args.object;
+ page.bindingContext = { var0: 0, var1: 1 };
+}
\ No newline at end of file
diff --git a/apps/tests/ui/test-pages/bindingExpressions_binaryOperators_testPage.xml b/apps/tests/ui/test-pages/bindingExpressions_binaryOperators_testPage.xml
new file mode 100644
index 000000000..dddeac4c7
--- /dev/null
+++ b/apps/tests/ui/test-pages/bindingExpressions_binaryOperators_testPage.xml
@@ -0,0 +1,11 @@
+
+
+
+
+
+
+
+
+
+
+
diff --git a/apps/tests/ui/test-pages/bindingExpressions_comparisonOperators_testPage.ts b/apps/tests/ui/test-pages/bindingExpressions_comparisonOperators_testPage.ts
new file mode 100644
index 000000000..0ab289a84
--- /dev/null
+++ b/apps/tests/ui/test-pages/bindingExpressions_comparisonOperators_testPage.ts
@@ -0,0 +1,6 @@
+import pages = require("ui/page");
+
+export function pageLoaded(args) {
+ var page = args.object;
+ page.bindingContext = { var0: 0, var1: 1};
+}
\ No newline at end of file
diff --git a/apps/tests/ui/test-pages/bindingExpressions_comparisonOperators_testPage.xml b/apps/tests/ui/test-pages/bindingExpressions_comparisonOperators_testPage.xml
new file mode 100644
index 000000000..d008e24d7
--- /dev/null
+++ b/apps/tests/ui/test-pages/bindingExpressions_comparisonOperators_testPage.xml
@@ -0,0 +1,12 @@
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/apps/tests/ui/test-pages/bindingExpressions_groupingParenthesis_testPage.ts b/apps/tests/ui/test-pages/bindingExpressions_groupingParenthesis_testPage.ts
new file mode 100644
index 000000000..7a25d8ad6
--- /dev/null
+++ b/apps/tests/ui/test-pages/bindingExpressions_groupingParenthesis_testPage.ts
@@ -0,0 +1,6 @@
+import pages = require("ui/page");
+
+export function pageLoaded(args) {
+ var page = args.object;
+ page.bindingContext = { var1: 1, var2: 2, var3: 3, var4: 4 };
+}
\ No newline at end of file
diff --git a/apps/tests/ui/test-pages/bindingExpressions_groupingParenthesis_testPage.xml b/apps/tests/ui/test-pages/bindingExpressions_groupingParenthesis_testPage.xml
new file mode 100644
index 000000000..d130c8fe8
--- /dev/null
+++ b/apps/tests/ui/test-pages/bindingExpressions_groupingParenthesis_testPage.xml
@@ -0,0 +1,6 @@
+
+
+
+
+
+
diff --git a/apps/tests/ui/test-pages/bindingExpressions_logicalComparisonOperators_testPage.ts b/apps/tests/ui/test-pages/bindingExpressions_logicalComparisonOperators_testPage.ts
new file mode 100644
index 000000000..66b0245ec
--- /dev/null
+++ b/apps/tests/ui/test-pages/bindingExpressions_logicalComparisonOperators_testPage.ts
@@ -0,0 +1,6 @@
+import pages = require("ui/page");
+
+export function pageLoaded(args) {
+ var page = args.object;
+ page.bindingContext = { varFalse: false, varTrue: true, varText: "Text" };
+}
\ No newline at end of file
diff --git a/apps/tests/ui/test-pages/bindingExpressions_logicalComparisonOperators_testPage.xml b/apps/tests/ui/test-pages/bindingExpressions_logicalComparisonOperators_testPage.xml
new file mode 100644
index 000000000..b22a68571
--- /dev/null
+++ b/apps/tests/ui/test-pages/bindingExpressions_logicalComparisonOperators_testPage.xml
@@ -0,0 +1,7 @@
+
+
+
+
+
+
+
diff --git a/apps/tests/ui/test-pages/bindingExpressions_logicalOperators_testPage.ts b/apps/tests/ui/test-pages/bindingExpressions_logicalOperators_testPage.ts
new file mode 100644
index 000000000..66b0245ec
--- /dev/null
+++ b/apps/tests/ui/test-pages/bindingExpressions_logicalOperators_testPage.ts
@@ -0,0 +1,6 @@
+import pages = require("ui/page");
+
+export function pageLoaded(args) {
+ var page = args.object;
+ page.bindingContext = { varFalse: false, varTrue: true, varText: "Text" };
+}
\ No newline at end of file
diff --git a/apps/tests/ui/test-pages/bindingExpressions_logicalOperators_testPage.xml b/apps/tests/ui/test-pages/bindingExpressions_logicalOperators_testPage.xml
new file mode 100644
index 000000000..7724d37d9
--- /dev/null
+++ b/apps/tests/ui/test-pages/bindingExpressions_logicalOperators_testPage.xml
@@ -0,0 +1,7 @@
+
+
+
+
+
+
+
diff --git a/apps/tests/ui/test-pages/bindingExpressions_ternaryOperator_testPage.ts b/apps/tests/ui/test-pages/bindingExpressions_ternaryOperator_testPage.ts
new file mode 100644
index 000000000..2a34cbe5e
--- /dev/null
+++ b/apps/tests/ui/test-pages/bindingExpressions_ternaryOperator_testPage.ts
@@ -0,0 +1,6 @@
+import pages = require("ui/page");
+
+export function pageLoaded(args) {
+ var page = args.object;
+ page.bindingContext = { author: "Pratchett" };
+}
\ No newline at end of file
diff --git a/apps/tests/ui/test-pages/bindingExpressions_ternaryOperator_testPage.xml b/apps/tests/ui/test-pages/bindingExpressions_ternaryOperator_testPage.xml
new file mode 100644
index 000000000..df396c344
--- /dev/null
+++ b/apps/tests/ui/test-pages/bindingExpressions_ternaryOperator_testPage.xml
@@ -0,0 +1,5 @@
+
+
+
+
+
diff --git a/apps/tests/ui/test-pages/bindingExpressions_unaryOperators_testPage.ts b/apps/tests/ui/test-pages/bindingExpressions_unaryOperators_testPage.ts
new file mode 100644
index 000000000..5967032ca
--- /dev/null
+++ b/apps/tests/ui/test-pages/bindingExpressions_unaryOperators_testPage.ts
@@ -0,0 +1,6 @@
+import pages = require("ui/page");
+
+export function pageLoaded(args) {
+ var page = args.object;
+ page.bindingContext = { varStr: "5", varNum: 3, varTrue: true, varText: "Text"};
+}
\ No newline at end of file
diff --git a/apps/tests/ui/test-pages/bindingExpressions_unaryOperators_testPage.xml b/apps/tests/ui/test-pages/bindingExpressions_unaryOperators_testPage.xml
new file mode 100644
index 000000000..0d9601596
--- /dev/null
+++ b/apps/tests/ui/test-pages/bindingExpressions_unaryOperators_testPage.xml
@@ -0,0 +1,12 @@
+
+
+
+
+
+
+
+
+
+
+
+