| OLD | NEW |
| (Empty) |
| 1 <!DOCTYPE html> | |
| 2 <html> | |
| 3 <head> | |
| 4 <script src="../../resources/js-test.js"></script> | |
| 5 </head> | |
| 6 <body> | |
| 7 <script> | |
| 8 description('Unittests for private scripts.'); | |
| 9 if (!internals || !internals.privateScriptTest()) | |
| 10 debug('This test needs window.internals.privateScriptTest().'); | |
| 11 | |
| 12 var privateScriptTest = internals.privateScriptTest(); | |
| 13 privateScriptTest.doNothing(); | |
| 14 shouldBe('privateScriptTest.return123()', '123'); | |
| 15 shouldBe('privateScriptTest.echoInteger(111)', '111'); | |
| 16 shouldBeEqualToString('privateScriptTest.echoString("foo")', 'foo') | |
| 17 shouldBe('privateScriptTest.addInteger(111, 222)', '333'); | |
| 18 shouldBeEqualToString('privateScriptTest.addString("foo", "bar")', 'foobar') | |
| 19 | |
| 20 shouldBe('privateScriptTest.getIntegerFromPrototype()', '0'); | |
| 21 privateScriptTest.setIntegerToPrototype(123); | |
| 22 shouldBe('privateScriptTest.getIntegerFromPrototype()', '123'); | |
| 23 | |
| 24 shouldBe('privateScriptTest.getIntegerFromDocument(document)', '0'); | |
| 25 privateScriptTest.setIntegerToDocument(document, 123); | |
| 26 shouldBe('privateScriptTest.getIntegerFromDocument(document)', '123'); | |
| 27 | |
| 28 var node1 = privateScriptTest.createElement(document); | |
| 29 var node2 = privateScriptTest.createElement(document); | |
| 30 var node3 = privateScriptTest.createElement(document); | |
| 31 var node4 = privateScriptTest.createElement(document); | |
| 32 privateScriptTest.appendChild(node1, node2); | |
| 33 privateScriptTest.appendChild(node1, node3); | |
| 34 privateScriptTest.appendChild(node1, node4); | |
| 35 shouldBe('privateScriptTest.firstChild(node1)', 'node2'); | |
| 36 shouldBe('privateScriptTest.nextSibling(node2)', 'node3'); | |
| 37 shouldBe('privateScriptTest.nextSibling(node3)', 'node4'); | |
| 38 shouldBe('privateScriptTest.nextSibling(node4)', 'null'); | |
| 39 | |
| 40 var node5 = privateScriptTest.createElement(document); | |
| 41 shouldBeEqualToString('privateScriptTest.innerHTML(node5)', '') | |
| 42 privateScriptTest.setInnerHTML(node5, '<div>foo</div>'); | |
| 43 shouldBeEqualToString('privateScriptTest.innerHTML(node5)', '<div>foo</div>') | |
| 44 var node6 = privateScriptTest.firstChild(node5); | |
| 45 shouldBeEqualToString('privateScriptTest.innerHTML(node6)', 'foo'); | |
| 46 | |
| 47 var node7 = privateScriptTest.createElement(document); | |
| 48 shouldBeEqualToString('privateScriptTest.innerHTML(node7)', '') | |
| 49 privateScriptTest.addClickListener(node7); | |
| 50 privateScriptTest.clickNode(document, node7); | |
| 51 shouldBeEqualToString('privateScriptTest.innerHTML(node7)', 'clicked') | |
| 52 | |
| 53 shouldBe('privateScriptTest.readonlyShortAttribute', '123'); | |
| 54 shouldBe('privateScriptTest.shortAttribute', '-1'); | |
| 55 privateScriptTest.shortAttribute = 111; | |
| 56 shouldBe('privateScriptTest.shortAttribute', '111'); | |
| 57 shouldBeEqualToString('privateScriptTest.stringAttribute', 'xxx'); | |
| 58 privateScriptTest.stringAttribute = "foo"; | |
| 59 shouldBeEqualToString('privateScriptTest.stringAttribute', 'foo'); | |
| 60 shouldBe('privateScriptTest.nodeAttribute', 'null'); | |
| 61 var node8 = privateScriptTest.createElement(document); | |
| 62 privateScriptTest.nodeAttribute = node8; | |
| 63 shouldBe('privateScriptTest.nodeAttribute', 'node8'); | |
| 64 | |
| 65 shouldThrow('privateScriptTest.nodeAttributeThrowsIndexSizeError'); | |
| 66 shouldThrow('privateScriptTest.nodeAttributeThrowsIndexSizeError = null'); | |
| 67 shouldThrow('privateScriptTest.voidMethodThrowsDOMSyntaxError()'); | |
| 68 shouldThrow('privateScriptTest.voidMethodThrowsError()'); | |
| 69 shouldThrow('privateScriptTest.voidMethodThrowsTypeError()'); | |
| 70 shouldThrow('privateScriptTest.voidMethodThrowsRangeError()'); | |
| 71 shouldThrow('privateScriptTest.voidMethodThrowsSyntaxError()'); | |
| 72 shouldThrow('privateScriptTest.voidMethodThrowsReferenceError()'); | |
| 73 shouldThrow('privateScriptTest.voidMethodThrowsStackOverflowError()'); | |
| 74 | |
| 75 shouldBe('privateScriptTest.addIntegerImplementedInCPP(111, 222)', '333'); | |
| 76 shouldBeEqualToString('privateScriptTest.stringAttributeImplementedInCPP', 'unde
fined'); | |
| 77 privateScriptTest.stringAttributeImplementedInCPP = "foo"; | |
| 78 shouldBeEqualToString('privateScriptTest.stringAttributeImplementedInCPP', 'foo'
); | |
| 79 | |
| 80 // These tests are important. [OnlyExposedToPrivateScript] APIs should not be vi
sible to user's script. | |
| 81 shouldBeUndefined('privateScriptTest.addIntegerImplementedInCPPForPrivateScriptO
nly'); | |
| 82 shouldBeUndefined('privateScriptTest.stringAttributeImplementedInCPPForPrivateSc
riptOnly'); | |
| 83 | |
| 84 shouldBe('privateScriptTest.addIntegerInPartial(111, 222)', '333'); | |
| 85 shouldBe('privateScriptTest.addInteger2InPartial(111, 222)', '333'); | |
| 86 privateScriptTest.stringAttributeInPartial = "foo"; | |
| 87 shouldBeEqualToString('privateScriptTest.stringAttributeInPartial', 'foo'); | |
| 88 | |
| 89 document.onload = function (event) { | |
| 90 shouldBeTrue('event.bubbles'); | |
| 91 shouldBeTrue('event.cancelable'); | |
| 92 // Object properties set in private scripts should not be visible in user's
script. | |
| 93 shouldBeUndefined('event.valueInPrivateScript'); | |
| 94 } | |
| 95 privateScriptTest.dispatchDocumentOnload(document); | |
| 96 | |
| 97 var exception; | |
| 98 function testThrows(expression, type, code) | |
| 99 { | |
| 100 exception = undefined; | |
| 101 // Test that `expression` throws a userscript visible exception of `type`, o
ptionally with | |
| 102 // exception code `code` | |
| 103 try { | |
| 104 eval(expression); | |
| 105 } catch (e) { | |
| 106 exception = e; | |
| 107 } | |
| 108 | |
| 109 if (type === DOMException && typeof code === "string" && code in DOMExceptio
n) | |
| 110 code = DOMException[code]; | |
| 111 | |
| 112 if (exception === undefined) { | |
| 113 testFailed("`" + expression + "` should throw"); | |
| 114 } else { | |
| 115 shouldBeType("exception", type); | |
| 116 if (code !== undefined) | |
| 117 shouldBeEqualToNumber("exception.code", code); | |
| 118 } | |
| 119 } | |
| 120 | |
| 121 testThrows("privateScriptTest.nodeAttributeThrowsIndexSizeError", DOMException,
"INDEX_SIZE_ERR"); | |
| 122 testThrows("privateScriptTest.nodeAttributeThrowsIndexSizeError = null", DOMExce
ption, "INDEX_SIZE_ERR"); | |
| 123 testThrows("privateScriptTest.voidMethodThrowsDOMSyntaxError()", DOMException, "
SYNTAX_ERR"); | |
| 124 testThrows("privateScriptTest.voidMethodThrowsError()", Error); | |
| 125 testThrows("privateScriptTest.voidMethodThrowsTypeError()", TypeError); | |
| 126 testThrows("privateScriptTest.voidMethodThrowsRangeError()", RangeError); | |
| 127 testThrows("privateScriptTest.voidMethodThrowsSyntaxError()", SyntaxError); | |
| 128 testThrows("privateScriptTest.voidMethodThrowsReferenceError()", ReferenceError)
; | |
| 129 | |
| 130 </script> | |
| 131 </body> | |
| 132 </html> | |
| OLD | NEW |