Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(296)

Side by Side Diff: LayoutTests/resources/idlharness.js

Issue 1209033011: Pull in the latest upstream testharness.js changes. (Closed) Base URL: https://chromium.googlesource.com/chromium/blink.git@bluetooth-temp
Patch Set: Rebase Created 5 years, 5 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
OLDNEW
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
(...skipping 38 matching lines...) Expand 10 before | Expand all | Expand 10 after
49 (function(){ 49 (function(){
50 "use strict"; 50 "use strict";
51 /// Helpers /// 51 /// Helpers ///
52 function constValue (cnt) { 52 function constValue (cnt) {
53 if (cnt.type === "null") return null; 53 if (cnt.type === "null") return null;
54 if (cnt.type === "NaN") return NaN; 54 if (cnt.type === "NaN") return NaN;
55 if (cnt.type === "Infinity") return cnt.negative ? -Infinity : Infinity; 55 if (cnt.type === "Infinity") return cnt.negative ? -Infinity : Infinity;
56 return cnt.value; 56 return cnt.value;
57 } 57 }
58 58
59 function minOverloadLength(overloads) {
60 if (!overloads.length) {
61 return 0;
62 }
63
64 return overloads.map(function(attr) {
65 return attr.arguments ? attr.arguments.filter(function(arg) {
66 return !arg.optional && !arg.variadic;
67 }).length : 0;
68 })
69 .reduce(function(m, n) { return Math.min(m, n); });
70 }
71
59 /// IdlArray /// 72 /// IdlArray ///
60 // Entry point 73 // Entry point
61 self.IdlArray = function() 74 self.IdlArray = function()
62 //@{ 75 //@{
63 { 76 {
64 /** 77 /**
65 * A map from strings to the corresponding named IdlObject, such as 78 * A map from strings to the corresponding named IdlObject, such as
66 * IdlInterface or IdlException. These are the things that test() will run 79 * IdlInterface or IdlException. These are the things that test() will run
67 * tests on. 80 * tests on.
68 */ 81 */
(...skipping 678 matching lines...) Expand 10 before | Expand all | Expand 10 after
747 assert_own_property(self[this.name], "length"); 760 assert_own_property(self[this.name], "length");
748 var desc = Object.getOwnPropertyDescriptor(self[this.name], "length" ); 761 var desc = Object.getOwnPropertyDescriptor(self[this.name], "length" );
749 assert_false("get" in desc, this.name + ".length has getter"); 762 assert_false("get" in desc, this.name + ".length has getter");
750 assert_false("set" in desc, this.name + ".length has setter"); 763 assert_false("set" in desc, this.name + ".length has setter");
751 assert_false(desc.writable, this.name + ".length is writable"); 764 assert_false(desc.writable, this.name + ".length is writable");
752 assert_false(desc.enumerable, this.name + ".length is enumerable"); 765 assert_false(desc.enumerable, this.name + ".length is enumerable");
753 assert_true(desc.configurable, this.name + ".length is not configura ble"); 766 assert_true(desc.configurable, this.name + ".length is not configura ble");
754 767
755 var constructors = this.extAttrs 768 var constructors = this.extAttrs
756 .filter(function(attr) { return attr.name == "Constructor"; }); 769 .filter(function(attr) { return attr.name == "Constructor"; });
757 var expected_length; 770 var expected_length = minOverloadLength(constructors);
758 if (!constructors.length) {
759 // "If the [Constructor] extended attribute, does not appear on
760 // the interface definition, then the value is 0."
761 expected_length = 0;
762 } else {
763 // "Otherwise, the value is determined as follows: . . .
764 // "Return the length of the shortest argument list of the
765 // entries in S."
766 expected_length = constructors.map(function(attr) {
767 return attr.arguments ? attr.arguments.filter(function(arg) {
768 return !arg.optional;
769 }).length : 0;
770 })
771 .reduce(function(m, n) { return Math.min(m, n); });
772 }
773 assert_equals(self[this.name].length, expected_length, "wrong value for " + this.name + ".length"); 771 assert_equals(self[this.name].length, expected_length, "wrong value for " + this.name + ".length");
774 }.bind(this), this.name + " interface object length"); 772 }.bind(this), this.name + " interface object length");
775 } 773 }
776 774
777 // TODO: Test named constructors if I find any interfaces that have them. 775 // TODO: Test named constructors if I find any interfaces that have them.
778 776
779 test(function() 777 test(function()
780 { 778 {
781 // This function tests WebIDL as of 2015-01-21. 779 // This function tests WebIDL as of 2015-01-21.
782 // https://heycam.github.io/webidl/#interface-object 780 // https://heycam.github.io/webidl/#interface-object
(...skipping 332 matching lines...) Expand 10 before | Expand all | Expand 10 after
1115 "property should be configurable if and only if not unforgeabl e"); 1113 "property should be configurable if and only if not unforgeabl e");
1116 // "The value of the property is a Function object whose 1114 // "The value of the property is a Function object whose
1117 // behavior is as follows . . ." 1115 // behavior is as follows . . ."
1118 assert_equals(typeof memberHolderObject[member.name], "function", 1116 assert_equals(typeof memberHolderObject[member.name], "function",
1119 "property must be a function"); 1117 "property must be a function");
1120 // "The value of the Function object’s “length” property is 1118 // "The value of the Function object’s “length” property is
1121 // a Number determined as follows: 1119 // a Number determined as follows:
1122 // ". . . 1120 // ". . .
1123 // "Return the length of the shortest argument list of the 1121 // "Return the length of the shortest argument list of the
1124 // entries in S." 1122 // entries in S."
1125 //
1126 // TODO: Doesn't handle overloading or variadic arguments.
1127 assert_equals(memberHolderObject[member.name].length, 1123 assert_equals(memberHolderObject[member.name].length,
1128 member.arguments.filter(function(arg) { 1124 minOverloadLength(this.members.filter(function(m) {
1129 return !arg.optional; 1125 return m.type == "operation" && m.name == member.name;
1130 }).length, 1126 })),
1131 "property has wrong .length"); 1127 "property has wrong .length");
1132 1128
1133 // Make some suitable arguments 1129 // Make some suitable arguments
1134 var args = member.arguments.map(function(arg) { 1130 var args = member.arguments.map(function(arg) {
1135 return create_suitable_object(arg.idlType); 1131 return create_suitable_object(arg.idlType);
1136 }); 1132 });
1137 1133
1138 // "Let O be a value determined as follows: 1134 // "Let O be a value determined as follows:
1139 // ". . . 1135 // ". . .
1140 // "Otherwise, throw a TypeError." 1136 // "Otherwise, throw a TypeError."
(...skipping 312 matching lines...) Expand 10 before | Expand all | Expand 10 after
1453 if (!this.is_global() && !member.isUnforgeable) { 1449 if (!this.is_global() && !member.isUnforgeable) {
1454 assert_inherits(obj, member.name); 1450 assert_inherits(obj, member.name);
1455 } else { 1451 } else {
1456 assert_own_property(obj, member.name); 1452 assert_own_property(obj, member.name);
1457 } 1453 }
1458 } 1454 }
1459 else 1455 else
1460 { 1456 {
1461 assert_false(member.name in obj); 1457 assert_false(member.name in obj);
1462 } 1458 }
1459
1460 var minLength = minOverloadLength(this.members.filter(function(m ) {
1461 return m.type == "operation" && m.name == member.name;
1462 }));
1463 var args = []; 1463 var args = [];
1464 for (var i = 0; i < member.arguments.length; i++) 1464 for (var i = 0; i < minLength; i++) {
1465 {
1466 if (member.arguments[i].optional)
1467 {
1468 break;
1469 }
1470 assert_throws(new TypeError(), function() 1465 assert_throws(new TypeError(), function()
1471 { 1466 {
1472 obj[member.name].apply(obj, args); 1467 obj[member.name].apply(obj, args);
1473 }.bind(this), "Called with " + i + " arguments"); 1468 }.bind(this), "Called with " + i + " arguments");
1474 1469
1475 args.push(create_suitable_object(member.arguments[i].idlType )); 1470 args.push(create_suitable_object(member.arguments[i].idlType ));
1476 } 1471 }
1477 }.bind(this), this.name + " interface: calling " + member.name + 1472 }.bind(this), this.name + " interface: calling " + member.name +
1478 "(" + member.arguments.map(function(m) { return m.idlType.idlType; } ) + 1473 "(" + member.arguments.map(function(m) { return m.idlType.idlType; } ) +
1479 ") on " + desc + " with too few arguments must throw TypeError"); 1474 ") on " + desc + " with too few arguments must throw TypeError");
(...skipping 222 matching lines...) Expand 10 before | Expand all | Expand 10 after
1702 /** An array of values produced by the "typedef" production. */ 1697 /** An array of values produced by the "typedef" production. */
1703 this.values = obj.values; 1698 this.values = obj.values;
1704 1699
1705 } 1700 }
1706 //@} 1701 //@}
1707 1702
1708 IdlTypedef.prototype = Object.create(IdlObject.prototype); 1703 IdlTypedef.prototype = Object.create(IdlObject.prototype);
1709 1704
1710 }()); 1705 }());
1711 // vim: set expandtab shiftwidth=4 tabstop=4 foldmarker=@{,@} foldmethod=marker: 1706 // vim: set expandtab shiftwidth=4 tabstop=4 foldmarker=@{,@} foldmethod=marker:
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698