summaryrefslogtreecommitdiffstats
path: root/js/xpconnect/tests/unit/test_bug1082450.js
diff options
context:
space:
mode:
Diffstat (limited to 'js/xpconnect/tests/unit/test_bug1082450.js')
-rw-r--r--js/xpconnect/tests/unit/test_bug1082450.js39
1 files changed, 39 insertions, 0 deletions
diff --git a/js/xpconnect/tests/unit/test_bug1082450.js b/js/xpconnect/tests/unit/test_bug1082450.js
new file mode 100644
index 0000000000..116fe8aa32
--- /dev/null
+++ b/js/xpconnect/tests/unit/test_bug1082450.js
@@ -0,0 +1,39 @@
+function run_test() {
+
+ var sb = new Cu.Sandbox('http://www.example.com');
+ function checkThrows(str, rgxp) {
+ try {
+ sb.eval(str);
+ Assert.ok(false, "eval should have thrown");
+ } catch (e) {
+ Assert.ok(rgxp.test(e), "error message should match");
+ }
+ }
+
+ sb.exposed = {
+ get getterProp() { return 42; },
+ set setterProp(x) { },
+ get getterSetterProp() { return 42; },
+ set getterSetterProp(x) { },
+ simpleValueProp: 42,
+ objectValueProp: { val: 42, __exposedProps__: { val: 'r' } },
+ contentCallableValueProp: new sb.Function('return 42'),
+ chromeCallableValueProp: function() {},
+ __exposedProps__: { getterProp : 'r',
+ setterProp : 'w',
+ getterSetterProp: 'rw',
+ simpleValueProp: 'r',
+ objectValueProp: 'r',
+ contentCallableValueProp: 'r',
+ chromeCallableValueProp: 'r' }
+ };
+
+ Assert.equal(sb.eval('exposed.simpleValueProp'), undefined);
+ Assert.equal(sb.eval('exposed.objectValueProp'), undefined);
+ Assert.equal(sb.eval('exposed.getterProp;'), undefined);
+ Assert.equal(sb.eval('exposed.getterSetterProp;'), undefined);
+ checkThrows('exposed.setterProp = 42;', /Permission denied/i);
+ checkThrows('exposed.getterSetterProp = 42;', /Permission denied/i);
+ Assert.equal(sb.eval('exposed.contentCallableValueProp'), undefined);
+ checkThrows('exposed.chromeCallableValueProp();', /is not a function/i);
+}