blob: 1bd504a778d3d21ff9951b3c9ba403970cc33868 [file] [log] [blame]
<!DOCTYPE html>
<script src="../resources/testharness.js"></script>
<script src="../resources/testharnessreport.js"></script>
<script src="file:///gen/layout_test_data/mojo/public/js/mojo_bindings.js"></script>
<script src="file:///gen/mojo/public/interfaces/bindings/tests/math_calculator.mojom.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});
};
test(() => {
var binding = new mojo.Binding(math.Calculator, new CalculatorImpl());
assert_false(binding.isBound());
var calc = new math.CalculatorPtr();
var request = mojo.makeRequest(calc);
binding.bind(request);
assert_true(binding.isBound());
binding.close();
assert_false(binding.isBound());
}, 'is bound');
promise_test(async () => {
var calc1 = new math.CalculatorPtr();
var calcBinding = new mojo.Binding(math.Calculator, new CalculatorImpl(),
mojo.makeRequest(calc1));
assert_equals((await calc1.add(2)).value, 2);
var calc2 = new math.CalculatorPtr();
calcBinding.bind(mojo.makeRequest(calc2));
assert_equals((await calc2.add(2)).value, 4);
}, 'reusable');
promise_test(async () => {
var calc = new math.CalculatorPtr();
var calcBinding = new mojo.Binding(math.Calculator, new CalculatorImpl(),
mojo.makeRequest(calc));
await new Promise((resolve, reject) => {
calcBinding.setConnectionErrorHandler(() => { resolve(); });
calc.ptr.reset();
});
}, 'connection error');
promise_test(async () => {
var calc = new math.CalculatorPtr();
var calcBinding = new mojo.Binding(math.Calculator, new CalculatorImpl(),
mojo.makeRequest(calc));
await new Promise((resolve, reject) => {
calcBinding.setConnectionErrorHandler(({customReason, description}) => {
assert_equals(customReason, 32);
assert_equals(description, 'goodbye');
resolve();
});
calc.ptr.resetWithReason({customReason: 32, description: 'goodbye'});
});
}, 'connection error with reason');
promise_test(async () => {
var calc = new math.CalculatorPtr();
var calcBinding = new mojo.Binding(math.Calculator, new CalculatorImpl(),
mojo.makeRequest(calc));
assert_equals((await calc.add(2)).value, 2);
var interfaceRequest = calcBinding.unbind();
assert_false(calcBinding.isBound());
var newCalcBinding = new mojo.Binding(math.Calculator, new CalculatorImpl(),
interfaceRequest);
assert_equals((await calc.add(2)).value, 2);
}, 'unbind');
promise_test(async () => {
var calc1 = new math.CalculatorPtr();
var calc2 = new math.CalculatorPtr();
var calcImpl = new CalculatorImpl();
var bindingSet = new mojo.BindingSet(math.Calculator);
assert_true(bindingSet.isEmpty());
bindingSet.addBinding(calcImpl, mojo.makeRequest(calc1));
bindingSet.addBinding(calcImpl, mojo.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>