Index: third_party/WebKit/LayoutTests/mojo/binding.html |
diff --git a/third_party/WebKit/LayoutTests/mojo/binding.html b/third_party/WebKit/LayoutTests/mojo/binding.html |
new file mode 100644 |
index 0000000000000000000000000000000000000000..f04de81efb751d602118da27daf51cac19a48805 |
--- /dev/null |
+++ b/third_party/WebKit/LayoutTests/mojo/binding.html |
@@ -0,0 +1,122 @@ |
+<!DOCTYPE html> |
+<script src="../resources/testharness.js"></script> |
+<script src="../resources/testharnessreport.js"></script> |
+<script src="../resources/mojo-helpers.js"></script> |
+<script> |
+'use strict'; |
+ |
+function CalculatorImpl() { |
+ this.total = 0; |
+} |
+ |
+CalculatorImpl.prototype.clear = function() { |
+ this.total = 0; |
+ return Promise.resolve({value: this.total}); |
+}; |
+ |
+CalculatorImpl.prototype.add = function(value) { |
+ this.total += value; |
+ return Promise.resolve({value: this.total}); |
+}; |
+ |
+CalculatorImpl.prototype.multiply = function(value) { |
+ this.total *= value; |
+ return Promise.resolve({value: this.total}); |
+}; |
+ |
+function loadModules(name, func) { |
+ return define( |
+ name, |
+ [ |
+ 'mojo/public/js/bindings', |
+ 'mojo/public/interfaces/bindings/tests/math_calculator.mojom' |
+ ], |
+ func); |
+}; |
+ |
+function binding_test(func, name, properties) { |
+ promise_test(() => { |
+ return loadModules(name, func); |
+ }, name, properties); |
+} |
+ |
+binding_test((bindings, math) => { |
+ var binding = new bindings.Binding(math.Calculator, new CalculatorImpl()); |
+ assert_false(binding.isBound()); |
+ |
+ var calc = new math.CalculatorPtr(); |
+ var request = bindings.makeRequest(calc); |
+ binding.bind(request); |
+ assert_true(binding.isBound()); |
+ |
+ binding.close(); |
+ assert_false(binding.isBound()); |
+}, 'is bound'); |
+ |
+binding_test(async (bindings, math) => { |
+ var calc1 = new math.CalculatorPtr(); |
+ var calcBinding = new bindings.Binding(math.Calculator, |
+ new CalculatorImpl(), |
+ bindings.makeRequest(calc1)); |
+ assert_equals((await calc1.add(2)).value, 2); |
+ |
+ var calc2 = new math.CalculatorPtr(); |
+ calcBinding.bind(bindings.makeRequest(calc2)); |
+ assert_equals((await calc2.add(2)).value, 4); |
+}, 'reusable'); |
+ |
+binding_test(async (bindings, math) => { |
+ var calc = new math.CalculatorPtr(); |
+ var calcBinding = new bindings.Binding(math.Calculator, |
+ new CalculatorImpl(), |
+ bindings.makeRequest(calc)); |
+ |
+ await new Promise((resolve, reject) => { |
+ calcBinding.setConnectionErrorHandler(() => { resolve(); }); |
+ calc.ptr.reset(); |
+ }); |
+}, 'connection error'); |
+ |
+binding_test(async (bindings, math) => { |
+ var calc = new math.CalculatorPtr(); |
+ var calcBinding = new bindings.Binding(math.Calculator, |
+ new CalculatorImpl(), |
+ bindings.makeRequest(calc)); |
+ assert_equals((await calc.add(2)).value, 2); |
+ |
+ var interfaceRequest = calcBinding.unbind(); |
+ assert_false(calcBinding.isBound()); |
+ |
+ var newCalcBinding = new bindings.Binding(math.Calculator, |
+ new CalculatorImpl(), |
+ interfaceRequest); |
+ assert_equals((await calc.add(2)).value, 2); |
+}, 'unbind'); |
+ |
+binding_test(async (bindings, math) => { |
+ var calc1 = new math.CalculatorPtr(); |
+ var calc2 = new math.CalculatorPtr(); |
+ var calcImpl = new CalculatorImpl(); |
+ |
+ var bindingSet = new bindings.BindingSet(math.Calculator); |
+ assert_true(bindingSet.isEmpty()); |
+ |
+ bindingSet.addBinding(calcImpl, bindings.makeRequest(calc1)); |
+ bindingSet.addBinding(calcImpl, bindings.makeRequest(calc2)); |
+ assert_false(bindingSet.isEmpty()); |
+ |
+ assert_equals((await calc1.add(3)).value, 3); |
+ assert_equals((await calc2.add(4)).value, 7); |
+ |
+ await new Promise((resolve, reject) => { |
+ bindingSet.setConnectionErrorHandler(() => { resolve(); }); |
+ calc1.ptr.reset(); |
+ }); |
+ |
+ assert_equals((await calc2.add(5)).value, 12); |
+ |
+ bindingSet.closeAllBindings(); |
+ assert_true(bindingSet.isEmpty()); |
+}, 'binding set'); |
+ |
+</script> |