blob: 94b956db6eed1e19d7dd37ca62a804c4fe36ea2a [file] [log] [blame]
<!DOCTYPE HTML>
<html>
<head>
<title>IdlDictionary.prototype.traverse_inherited_and_consequential_interfaces()</title>
</head>
<body>
<div id="log"></div>
<script src="/resources/testharness.js"></script>
<script src="/resources/testharnessreport.js"></script>
<script src="/resources/WebIDLParser.js"></script>
<script src="/resources/idlharness.js"></script>
<script src="../../../idl-helper.js"></script>
<pre id=fragments>
interface A : B { };
interface B : C { };
interface C { };
interface mixin D { };
interface mixin G { };
interface mixin H { };
A includes G;
A includes H;
B includes D;
</pre>
<script>
"use strict";
test(function() {
var interfaces = [];
interfaceFrom('interface A { };').traverse_inherited_and_consequential_interfaces(function(i) {
interfaces.push(i.name);
});
assert_array_equals(interfaces, ["A"]);
}, 'should return an array that includes itself.');
test(function() {
var context = new IdlArray();
context.add_idls("interface A { }; A includes B;");
assert_throws_js(Error, _ => context.members["A"].traverse_inherited_and_consequential_interfaces(function() {}));
}, "should throw for interfaces which are extended by another interface which wasn't added to the IdlArray.");
test(function() {
var context = new IdlArray();
context.add_idls("interface A { };");
assert_throws_js(TypeError, _ => context.members["A"].traverse_inherited_and_consequential_interfaces());
}, "should throw if not passed a callback");
test(function() {
var context = new IdlArray();
context.add_idls(document.getElementById('fragments').textContent);
var interfaces = [];
context.members["A"].traverse_inherited_and_consequential_interfaces(function(i) {
interfaces.push(i.name);
});
assert_array_equals(interfaces, ["C", "B", "D", "A", "G", "H"]);
}, 'should return an array that includes the identifier of the interfaces in the correct order.');
</script>
</body>
</html>