Skip to content
Merged
3 changes: 2 additions & 1 deletion src/core/webidl.js
Original file line number Diff line number Diff line change
Expand Up @@ -236,7 +236,8 @@ function resolveNameAndId(defn, parent) {
case "callback interface":
case "dictionary":
case "interface":
case "interface mixin": {
case "interface mixin":
case "namespace": {
idlId += resolvePartial(defn);
break;
}
Expand Down
24 changes: 24 additions & 0 deletions tests/spec/core/webidl-spec.js
Original file line number Diff line number Diff line change
Expand Up @@ -1791,6 +1791,30 @@ callback CallBack = Z? (X x, optional Y y, /*trivia*/ optional Z z);
expect(errors[0].details).toContain("Promise<void>");
});

it("gives unique IDs to partial namespaces", async () => {
const body = `
<section>
<pre class="idl">
namespace Foo { undefined bar(); };
partial namespace Foo { undefined baz(); };
partial namespace Foo { undefined qux(); };
</pre>
</section>
`;
const ops = makeStandardOps(null, body);
const doc = await makeRSDoc(ops);
const idls = [
...doc.querySelectorAll("pre.idl code [data-idl][id]"),
].filter(el => /^idl-def-foo(?:-partial-[12])?$/.test(el.id));
expect(idls).toHaveSize(3);
const ids = idls.map(el => el.id);
const uniqueIds = new Set(ids);
expect(uniqueIds.size).toBe(ids.length);
expect(ids).toContain("idl-def-foo");
expect(ids).toContain("idl-def-foo-partial-1");
expect(ids).toContain("idl-def-foo-partial-2");
});

it("does not set data-dfn-for on top-level IDL entities inside a data-dfn-for section (prose dfns)", () => {
const section = doc.querySelector("#top-level-no-dfn-for");
const dictDfn = section.querySelector("dfn[data-dfn-type='dictionary']");
Expand Down
Loading