132 lines
3.9 KiB
Python
132 lines
3.9 KiB
Python
import WebIDL
|
|
|
|
|
|
def WebIDLTest(parser, harness):
|
|
parser = parser.reset()
|
|
threw = False
|
|
try:
|
|
parser.parse(
|
|
"""
|
|
dictionary TestDict {
|
|
DOMString member;
|
|
};
|
|
[LegacyTreatNonObjectAsNull] callback TestCallback = undefined ();
|
|
typedef (TestCallback or TestDict) TestUnionCallbackDict;
|
|
"""
|
|
)
|
|
results = parser.finish()
|
|
except WebIDL.WebIDLError:
|
|
threw = True
|
|
harness.ok(
|
|
threw,
|
|
"Should not allow Dict/Callback union where callback is [LegacyTreatNonObjectAsNull]",
|
|
)
|
|
|
|
parser = parser.reset()
|
|
|
|
threw = False
|
|
try:
|
|
parser.parse(
|
|
"""
|
|
dictionary TestDict {
|
|
DOMString member;
|
|
};
|
|
[LegacyTreatNonObjectAsNull] callback TestCallback = undefined ();
|
|
typedef (TestDict or TestCallback) TestUnionCallbackDict;
|
|
"""
|
|
)
|
|
results = parser.finish()
|
|
except WebIDL.WebIDLError:
|
|
threw = True
|
|
harness.ok(
|
|
threw,
|
|
"Should not allow Dict/Callback union where callback is [LegacyTreatNonObjectAsNull]",
|
|
)
|
|
|
|
parser = parser.reset()
|
|
|
|
parser.parse(
|
|
"""
|
|
dictionary TestDict {
|
|
DOMString member;
|
|
};
|
|
callback TestCallback = undefined ();
|
|
typedef (TestCallback or TestDict) TestUnionCallbackDict;
|
|
"""
|
|
)
|
|
results = parser.finish()
|
|
|
|
harness.ok(True, "TestUnionCallbackDict interface parsed without error")
|
|
harness.check(len(results), 3, "Document should have 3 types")
|
|
|
|
myDict = results[0]
|
|
harness.ok(isinstance(myDict, WebIDL.IDLDictionary), "Expect an IDLDictionary")
|
|
|
|
myCallback = results[1]
|
|
harness.ok(isinstance(myCallback, WebIDL.IDLCallback), "Expect an IDLCallback")
|
|
|
|
myUnion = results[2]
|
|
harness.ok(isinstance(myUnion, WebIDL.IDLTypedef), "Expect a IDLTypedef")
|
|
harness.ok(
|
|
isinstance(myUnion.innerType, WebIDL.IDLUnionType), "Expect a IDLUnionType"
|
|
)
|
|
harness.ok(
|
|
isinstance(myUnion.innerType.memberTypes[0], WebIDL.IDLCallbackType),
|
|
"Expect a IDLCallbackType",
|
|
)
|
|
harness.ok(
|
|
isinstance(myUnion.innerType.memberTypes[1], WebIDL.IDLWrapperType),
|
|
"Expect a IDLDictionary",
|
|
)
|
|
harness.ok(
|
|
(myUnion.innerType.memberTypes[0].callback == myCallback),
|
|
"Expect left Union member to be MyCallback",
|
|
)
|
|
harness.ok(
|
|
(myUnion.innerType.memberTypes[1].inner == myDict),
|
|
"Expect right Union member to be MyDict",
|
|
)
|
|
|
|
parser = parser.reset()
|
|
|
|
parser.parse(
|
|
"""
|
|
dictionary TestDict {
|
|
DOMString member;
|
|
};
|
|
callback TestCallback = undefined ();
|
|
typedef (TestDict or TestCallback) TestUnionCallbackDict;
|
|
"""
|
|
)
|
|
results = parser.finish()
|
|
|
|
harness.ok(True, "TestUnionCallbackDict interface parsed without error")
|
|
harness.check(len(results), 3, "Document should have 3 types")
|
|
|
|
myDict = results[0]
|
|
harness.ok(isinstance(myDict, WebIDL.IDLDictionary), "Expect an IDLDictionary")
|
|
|
|
myCallback = results[1]
|
|
harness.ok(isinstance(myCallback, WebIDL.IDLCallback), "Expect an IDLCallback")
|
|
|
|
myUnion = results[2]
|
|
harness.ok(isinstance(myUnion, WebIDL.IDLTypedef), "Expect a IDLTypedef")
|
|
harness.ok(
|
|
isinstance(myUnion.innerType, WebIDL.IDLUnionType), "Expect a IDLUnionType"
|
|
)
|
|
harness.ok(
|
|
isinstance(myUnion.innerType.memberTypes[0], WebIDL.IDLWrapperType),
|
|
"Expect a IDLDictionary",
|
|
)
|
|
harness.ok(
|
|
isinstance(myUnion.innerType.memberTypes[1], WebIDL.IDLCallbackType),
|
|
"Expect a IDLCallbackType",
|
|
)
|
|
harness.ok(
|
|
(myUnion.innerType.memberTypes[0].inner == myDict),
|
|
"Expect right Union member to be MyDict",
|
|
)
|
|
harness.ok(
|
|
(myUnion.innerType.memberTypes[1].callback == myCallback),
|
|
"Expect left Union member to be MyCallback",
|
|
)
|