OLD | NEW |
1 <!DOCTYPE html> | 1 <!DOCTYPE html> |
2 <title>[LenientThis] test</title> | 2 <title>[LenientThis] test</title> |
3 <script src="../../resources/testharness.js"></script> | 3 <script src="../../resources/testharness.js"></script> |
4 <script src="../../resources/testharnessreport.js"></script> | 4 <script src="../../resources/testharnessreport.js"></script> |
5 <script> | 5 <script> |
6 test(function() { | 6 test(function() { |
7 // GlobalEventHandlers.onmouseenter is [LenientThis]. | 7 // GlobalEventHandlers.onmouseenter is [LenientThis]. |
8 assert_equals(document.onmouseenter, null, "|this| is an appropriate object.
"); | 8 assert_equals(document.onmouseenter, null, "|this| is an appropriate object.
"); |
9 assert_equals(Document.prototype.onmouseenter, undefined, "|this| is not an
appropriate object."); | 9 assert_equals(Document.prototype.onmouseenter, undefined, "|this| is not an
appropriate object."); |
10 Document.prototype.onmouseenter = 'foo'; // must not throw. | 10 Document.prototype.onmouseenter = 'foo'; // must not throw. |
11 assert_equals(Document.prototype.onmouseenter, undefined, "the value must no
t change."); | 11 assert_equals(Document.prototype.onmouseenter, undefined, "the value must no
t change."); |
12 | 12 |
13 // GlobalEventHandlers.onmousedown is NOT [LenientThis]. | 13 // GlobalEventHandlers.onmousedown is NOT [LenientThis]. |
14 assert_equals(document.onmousedown, null, "|this| is an appropriate object."
); | 14 assert_equals(document.onmousedown, null, "|this| is an appropriate object."
); |
15 assert_throws(null, function() { | 15 assert_throws(null, function() { |
16 Document.prototype.onmousedown; | 16 Document.prototype.onmousedown; |
17 }, "Document.prototype is invalid as |this|."); | 17 }, "Document.prototype is invalid as |this|."); |
18 assert_throws(null, function() { | 18 assert_throws(null, function() { |
19 Document.prototype.onmousedown = 'foo'; | 19 Document.prototype.onmousedown = 'foo'; |
20 }, "Document.prototype is invalid as |this|."); | 20 }, "Document.prototype is invalid as |this|."); |
21 }); | 21 }, "Test [LenientThis] and non-[LenientThis]."); |
| 22 |
| 23 test(function() { |
| 24 var noop = function() {}; |
| 25 var testPatterns = [ |
| 26 {name: 'document', instance: document, holder: Document.prototype, noninst
ance: window}, |
| 27 {name: 'window', instance: window, holder: window, noninstance: document} |
| 28 ]; |
| 29 function msg(pattern, text) { |
| 30 return '[' + pattern.name + '] ' + text; |
| 31 } |
| 32 for (var p, i = 0; p = testPatterns[i]; ++i) { |
| 33 var pd = Object.getOwnPropertyDescriptor(p.holder, 'onmouseleave'); |
| 34 // get |
| 35 assert_equals(pd.get.call(p.noninstance), undefined, msg(p, 'get: non-inst
ance should return undefined.')); |
| 36 assert_equals(pd.get.call(p.instance), null, msg(p, 'get: instance should
return null by default.')); |
| 37 |
| 38 // set |
| 39 assert_equals(pd.set.call(p.noninstance, noop), undefined, msg(p, 'set: se
tter always returns undefined.')); |
| 40 assert_equals(pd.get.call(p.noninstance), undefined, msg(p, 'set: non-inst
ance should returns undefined.')); |
| 41 assert_equals(pd.set.call(p.instance, noop), undefined, msg(p, 'set: even
instance should return undefined.')); |
| 42 assert_equals(pd.get.call(p.instance), noop, msg(p, 'set: instance should
return the assigned function.')); |
| 43 } |
| 44 |
| 45 // document specific tests. |
| 46 pd = Object.getOwnPropertyDescriptor(Document.prototype, 'onmouseleave'); |
| 47 assert_equals(pd.get.call(null), undefined, '[document] get: null is not a v
alid instance.'); |
| 48 assert_equals(pd.get.call(undefined), undefined, '[document] get: undefined
is not a valid instance.'); |
| 49 |
| 50 // window specific tests. |
| 51 pd = Object.getOwnPropertyDescriptor(window, 'onmouseleave'); |
| 52 assert_equals(pd.get.call(null), noop, '[window] get: null should be interpr
eted as the global object.'); |
| 53 assert_equals(pd.get.call(undefined), noop, '[window] get: undefined should
be interpreted as the global object.'); |
| 54 assert_equals(pd.set.call(undefined, null), undefined, '[window] set: return
s undefined.'); |
| 55 assert_equals(pd.get.call(undefined), null, '[window] set: should be updated
.'); |
| 56 |
| 57 }, "Test with extracted accessors."); |
22 </script> | 58 </script> |
OLD | NEW |