OLD | NEW |
1 /* | 1 /* |
2 Distributed under both the W3C Test Suite License [1] and the W3C | 2 Distributed under both the W3C Test Suite License [1] and the W3C |
3 3-clause BSD License [2]. To contribute to a W3C Test Suite, see the | 3 3-clause BSD License [2]. To contribute to a W3C Test Suite, see the |
4 policies and contribution forms [3]. | 4 policies and contribution forms [3]. |
5 | 5 |
6 [1] http://www.w3.org/Consortium/Legal/2008/04-testsuite-license | 6 [1] http://www.w3.org/Consortium/Legal/2008/04-testsuite-license |
7 [2] http://www.w3.org/Consortium/Legal/2008/03-bsd-license | 7 [2] http://www.w3.org/Consortium/Legal/2008/03-bsd-license |
8 [3] http://www.w3.org/2004/10/27-testcases | 8 [3] http://www.w3.org/2004/10/27-testcases |
9 */ | 9 */ |
10 | 10 |
11 /* For user documentation see docs/idlharness.md */ | 11 /* For user documentation see docs/_writing-tests/idlharness.md */ |
12 | 12 |
13 /** | 13 /** |
14 * Notes for people who want to edit this file (not just use it as a library): | 14 * Notes for people who want to edit this file (not just use it as a library): |
15 * | 15 * |
16 * Most of the interesting stuff happens in the derived classes of IdlObject, | 16 * Most of the interesting stuff happens in the derived classes of IdlObject, |
17 * especially IdlInterface. The entry point for all IdlObjects is .test(), | 17 * especially IdlInterface. The entry point for all IdlObjects is .test(), |
18 * which is called by IdlArray.test(). An IdlObject is conceptually just | 18 * which is called by IdlArray.test(). An IdlObject is conceptually just |
19 * "thing we want to run tests on", and an IdlArray is an array of IdlObjects | 19 * "thing we want to run tests on", and an IdlArray is an array of IdlObjects |
20 * with some additional data thrown in. | 20 * with some additional data thrown in. |
21 * | 21 * |
(...skipping 1604 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1626 } | 1626 } |
1627 current_interface.test_interface_of(desc, obj, exception, expected_typeo
f); | 1627 current_interface.test_interface_of(desc, obj, exception, expected_typeo
f); |
1628 current_interface = this.array.members[current_interface.base]; | 1628 current_interface = this.array.members[current_interface.base]; |
1629 } | 1629 } |
1630 }; | 1630 }; |
1631 | 1631 |
1632 //@} | 1632 //@} |
1633 IdlInterface.prototype.test_primary_interface_of = function(desc, obj, exception
, expected_typeof) | 1633 IdlInterface.prototype.test_primary_interface_of = function(desc, obj, exception
, expected_typeof) |
1634 //@{ | 1634 //@{ |
1635 { | 1635 { |
| 1636 // Only the object itself, not its members, are tested here, so if the |
| 1637 // interface is untested, there is nothing to do. |
| 1638 if (!this.untested) |
| 1639 { |
| 1640 return; |
| 1641 } |
| 1642 |
1636 // We can't easily test that its prototype is correct if there's no | 1643 // We can't easily test that its prototype is correct if there's no |
1637 // interface object, or the object is from a different global environment | 1644 // interface object, or the object is from a different global environment |
1638 // (not instanceof Object). TODO: test in this case that its prototype at | 1645 // (not instanceof Object). TODO: test in this case that its prototype at |
1639 // least looks correct, even if we can't test that it's actually correct. | 1646 // least looks correct, even if we can't test that it's actually correct. |
1640 if (!this.has_extended_attribute("NoInterfaceObject") | 1647 if (!this.has_extended_attribute("NoInterfaceObject") |
1641 && (typeof obj != expected_typeof || obj instanceof Object)) | 1648 && (typeof obj != expected_typeof || obj instanceof Object)) |
1642 { | 1649 { |
1643 test(function() | 1650 test(function() |
1644 { | 1651 { |
1645 assert_equals(exception, null, "Unexpected exception when evaluating
object"); | 1652 assert_equals(exception, null, "Unexpected exception when evaluating
object"); |
(...skipping 31 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1677 //@} | 1684 //@} |
1678 IdlInterface.prototype.test_interface_of = function(desc, obj, exception, expect
ed_typeof) | 1685 IdlInterface.prototype.test_interface_of = function(desc, obj, exception, expect
ed_typeof) |
1679 //@{ | 1686 //@{ |
1680 { | 1687 { |
1681 // TODO: Indexed and named properties, more checks on interface members | 1688 // TODO: Indexed and named properties, more checks on interface members |
1682 this.already_tested = true; | 1689 this.already_tested = true; |
1683 | 1690 |
1684 for (var i = 0; i < this.members.length; i++) | 1691 for (var i = 0; i < this.members.length; i++) |
1685 { | 1692 { |
1686 var member = this.members[i]; | 1693 var member = this.members[i]; |
| 1694 if (member.untested) { |
| 1695 continue; |
| 1696 } |
1687 if (!exposed_in(exposure_set(member, this.exposureSet))) { | 1697 if (!exposed_in(exposure_set(member, this.exposureSet))) { |
1688 test(function() { | 1698 test(function() { |
1689 assert_false(member.name in obj); | 1699 assert_false(member.name in obj); |
1690 }.bind(this), this.name + "interface: " + desc + 'must not have prop
erty "' + member.name + '"'); | 1700 }.bind(this), this.name + "interface: " + desc + 'must not have prop
erty "' + member.name + '"'); |
1691 continue; | 1701 continue; |
1692 } | 1702 } |
1693 if (member.type == "attribute" && member.isUnforgeable) | 1703 if (member.type == "attribute" && member.isUnforgeable) |
1694 { | 1704 { |
1695 var a_test = async_test(this.name + " interface: " + desc + ' must h
ave own property "' + member.name + '"'); | 1705 var a_test = async_test(this.name + " interface: " + desc + ' must h
ave own property "' + member.name + '"'); |
1696 a_test.step(function() { | 1706 a_test.step(function() { |
(...skipping 187 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1884 } | 1894 } |
1885 | 1895 |
1886 // "The value of the Function object’s “length” property is the Number | 1896 // "The value of the Function object’s “length” property is the Number |
1887 // value 0." | 1897 // value 0." |
1888 assert_equals(desc.get.length, 0, "getter length must be 0"); | 1898 assert_equals(desc.get.length, 0, "getter length must be 0"); |
1889 | 1899 |
1890 | 1900 |
1891 // TODO: Test calling setter on the interface prototype (should throw | 1901 // TODO: Test calling setter on the interface prototype (should throw |
1892 // TypeError in most cases). | 1902 // TypeError in most cases). |
1893 if (member.readonly | 1903 if (member.readonly |
| 1904 && !member.has_extended_attribute("LenientSetter") |
1894 && !member.has_extended_attribute("PutForwards") | 1905 && !member.has_extended_attribute("PutForwards") |
1895 && !member.has_extended_attribute("Replaceable")) | 1906 && !member.has_extended_attribute("Replaceable")) |
1896 { | 1907 { |
1897 // "The attribute setter is undefined if the attribute is declared | 1908 // "The attribute setter is undefined if the attribute is declared |
1898 // readonly and has neither a [PutForwards] nor a [Replaceable] | 1909 // readonly and has neither a [PutForwards] nor a [Replaceable] |
1899 // extended attribute declared on it." | 1910 // extended attribute declared on it." |
1900 assert_equals(desc.set, undefined, "setter must be undefined for readonl
y attributes"); | 1911 assert_equals(desc.set, undefined, "setter must be undefined for readonl
y attributes"); |
1901 } | 1912 } |
1902 else | 1913 else |
1903 { | 1914 { |
(...skipping 129 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
2033 /** The idlType that we are supposed to be typedeffing to. */ | 2044 /** The idlType that we are supposed to be typedeffing to. */ |
2034 this.idlType = obj.idlType; | 2045 this.idlType = obj.idlType; |
2035 | 2046 |
2036 } | 2047 } |
2037 //@} | 2048 //@} |
2038 | 2049 |
2039 IdlTypedef.prototype = Object.create(IdlObject.prototype); | 2050 IdlTypedef.prototype = Object.create(IdlObject.prototype); |
2040 | 2051 |
2041 }()); | 2052 }()); |
2042 // vim: set expandtab shiftwidth=4 tabstop=4 foldmarker=@{,@} foldmethod=marker: | 2053 // vim: set expandtab shiftwidth=4 tabstop=4 foldmarker=@{,@} foldmethod=marker: |
OLD | NEW |