383 lines
9.8 KiB
Python
383 lines
9.8 KiB
Python
import WebIDL
|
|
|
|
|
|
def WebIDLTest(parser, harness):
|
|
parser.parse(
|
|
"""
|
|
[Global=Foo, Exposed=Foo] interface Foo {};
|
|
[Global=(Bar, Bar1,Bar2), Exposed=Bar] interface Bar {};
|
|
[Global=(Baz, Baz2), Exposed=Baz] interface Baz {};
|
|
|
|
[Exposed=(Foo,Bar1)]
|
|
interface Iface {
|
|
undefined method1();
|
|
|
|
[Exposed=Bar1]
|
|
readonly attribute any attr;
|
|
};
|
|
|
|
[Exposed=Foo]
|
|
partial interface Iface {
|
|
undefined method2();
|
|
};
|
|
"""
|
|
)
|
|
|
|
results = parser.finish()
|
|
|
|
harness.check(len(results), 5, "Should know about five things")
|
|
iface = results[3]
|
|
harness.ok(isinstance(iface, WebIDL.IDLInterface), "Should have an interface here")
|
|
members = iface.members
|
|
harness.check(len(members), 3, "Should have three members")
|
|
|
|
harness.ok(
|
|
members[0].exposureSet == set(["Foo", "Bar"]),
|
|
"method1 should have the right exposure set",
|
|
)
|
|
harness.ok(
|
|
members[0]._exposureGlobalNames == set(["Foo", "Bar1"]),
|
|
"method1 should have the right exposure global names",
|
|
)
|
|
|
|
harness.ok(
|
|
members[1].exposureSet == set(["Bar"]),
|
|
"attr should have the right exposure set",
|
|
)
|
|
harness.ok(
|
|
members[1]._exposureGlobalNames == set(["Bar1"]),
|
|
"attr should have the right exposure global names",
|
|
)
|
|
|
|
harness.ok(
|
|
members[2].exposureSet == set(["Foo"]),
|
|
"method2 should have the right exposure set",
|
|
)
|
|
harness.ok(
|
|
members[2]._exposureGlobalNames == set(["Foo"]),
|
|
"method2 should have the right exposure global names",
|
|
)
|
|
|
|
harness.ok(
|
|
iface.exposureSet == set(["Foo", "Bar"]),
|
|
"Iface should have the right exposure set",
|
|
)
|
|
harness.ok(
|
|
iface._exposureGlobalNames == set(["Foo", "Bar1"]),
|
|
"Iface should have the right exposure global names",
|
|
)
|
|
|
|
parser = parser.reset()
|
|
parser.parse(
|
|
"""
|
|
[Global=Foo, Exposed=Foo] interface Foo {};
|
|
[Global=(Bar, Bar1, Bar2), Exposed=Bar] interface Bar {};
|
|
[Global=(Baz, Baz2), Exposed=Baz] interface Baz {};
|
|
|
|
[Exposed=Foo]
|
|
interface Iface2 {
|
|
undefined method3();
|
|
};
|
|
"""
|
|
)
|
|
results = parser.finish()
|
|
|
|
harness.check(len(results), 4, "Should know about four things")
|
|
iface = results[3]
|
|
harness.ok(isinstance(iface, WebIDL.IDLInterface), "Should have an interface here")
|
|
members = iface.members
|
|
harness.check(len(members), 1, "Should have one member")
|
|
|
|
harness.ok(
|
|
members[0].exposureSet == set(["Foo"]),
|
|
"method3 should have the right exposure set",
|
|
)
|
|
harness.ok(
|
|
members[0]._exposureGlobalNames == set(["Foo"]),
|
|
"method3 should have the right exposure global names",
|
|
)
|
|
|
|
harness.ok(
|
|
iface.exposureSet == set(["Foo"]), "Iface2 should have the right exposure set"
|
|
)
|
|
harness.ok(
|
|
iface._exposureGlobalNames == set(["Foo"]),
|
|
"Iface2 should have the right exposure global names",
|
|
)
|
|
|
|
parser = parser.reset()
|
|
parser.parse(
|
|
"""
|
|
[Global=Foo, Exposed=Foo] interface Foo {};
|
|
[Global=(Bar, Bar1, Bar2), Exposed=Bar] interface Bar {};
|
|
[Global=(Baz, Baz2), Exposed=Baz] interface Baz {};
|
|
|
|
[Exposed=Foo]
|
|
interface Iface3 {
|
|
undefined method4();
|
|
};
|
|
|
|
[Exposed=(Foo,Bar1)]
|
|
interface mixin Mixin {
|
|
undefined method5();
|
|
};
|
|
|
|
Iface3 includes Mixin;
|
|
"""
|
|
)
|
|
results = parser.finish()
|
|
harness.check(len(results), 6, "Should know about six things")
|
|
iface = results[3]
|
|
harness.ok(isinstance(iface, WebIDL.IDLInterface), "Should have an interface here")
|
|
members = iface.members
|
|
harness.check(len(members), 2, "Should have two members")
|
|
|
|
harness.ok(
|
|
members[0].exposureSet == set(["Foo"]),
|
|
"method4 should have the right exposure set",
|
|
)
|
|
harness.ok(
|
|
members[0]._exposureGlobalNames == set(["Foo"]),
|
|
"method4 should have the right exposure global names",
|
|
)
|
|
|
|
harness.ok(
|
|
members[1].exposureSet == set(["Foo", "Bar"]),
|
|
"method5 should have the right exposure set",
|
|
)
|
|
harness.ok(
|
|
members[1]._exposureGlobalNames == set(["Foo", "Bar1"]),
|
|
"method5 should have the right exposure global names",
|
|
)
|
|
|
|
parser = parser.reset()
|
|
threw = False
|
|
try:
|
|
parser.parse(
|
|
"""
|
|
[Exposed=Foo]
|
|
interface Bar {
|
|
};
|
|
"""
|
|
)
|
|
|
|
results = parser.finish()
|
|
except WebIDL.WebIDLError:
|
|
threw = True
|
|
|
|
harness.ok(threw, "Should have thrown on invalid Exposed value on interface.")
|
|
|
|
parser = parser.reset()
|
|
threw = False
|
|
try:
|
|
parser.parse(
|
|
"""
|
|
interface Bar {
|
|
[Exposed=Foo]
|
|
readonly attribute bool attr;
|
|
};
|
|
"""
|
|
)
|
|
|
|
results = parser.finish()
|
|
except WebIDL.WebIDLError:
|
|
threw = True
|
|
|
|
harness.ok(threw, "Should have thrown on invalid Exposed value on attribute.")
|
|
|
|
parser = parser.reset()
|
|
threw = False
|
|
try:
|
|
parser.parse(
|
|
"""
|
|
interface Bar {
|
|
[Exposed=Foo]
|
|
undefined operation();
|
|
};
|
|
"""
|
|
)
|
|
|
|
results = parser.finish()
|
|
except WebIDL.WebIDLError:
|
|
threw = True
|
|
|
|
harness.ok(threw, "Should have thrown on invalid Exposed value on operation.")
|
|
|
|
parser = parser.reset()
|
|
threw = False
|
|
try:
|
|
parser.parse(
|
|
"""
|
|
interface Bar {
|
|
[Exposed=Foo]
|
|
const long constant = 5;
|
|
};
|
|
"""
|
|
)
|
|
|
|
results = parser.finish()
|
|
except WebIDL.WebIDLError:
|
|
threw = True
|
|
|
|
harness.ok(threw, "Should have thrown on invalid Exposed value on constant.")
|
|
|
|
parser = parser.reset()
|
|
threw = False
|
|
try:
|
|
parser.parse(
|
|
"""
|
|
[Global=Foo, Exposed=Foo] interface Foo {};
|
|
[Global=Bar, Exposed=Bar] interface Bar {};
|
|
|
|
[Exposed=Foo]
|
|
interface Baz {
|
|
[Exposed=Bar]
|
|
undefined method();
|
|
};
|
|
"""
|
|
)
|
|
|
|
results = parser.finish()
|
|
except WebIDL.WebIDLError:
|
|
threw = True
|
|
|
|
harness.ok(
|
|
threw, "Should have thrown on member exposed where its interface is not."
|
|
)
|
|
|
|
parser = parser.reset()
|
|
parser.parse(
|
|
"""
|
|
[Global=Foo, Exposed=Foo] interface Foo {};
|
|
[Global=Bar, Exposed=Bar] interface Bar {};
|
|
|
|
[Exposed=Foo]
|
|
interface Baz {
|
|
undefined method();
|
|
};
|
|
|
|
[Exposed=Bar]
|
|
interface mixin Mixin {
|
|
undefined otherMethod();
|
|
};
|
|
|
|
Baz includes Mixin;
|
|
"""
|
|
)
|
|
|
|
results = parser.finish()
|
|
|
|
harness.check(len(results), 5, "Should know about five things")
|
|
iface = results[2]
|
|
harness.ok(isinstance(iface, WebIDL.IDLInterface), "Should have an interface here")
|
|
members = iface.members
|
|
harness.check(len(members), 2, "Should have two members")
|
|
|
|
harness.ok(
|
|
members[0].exposureSet == set(["Foo"]),
|
|
"method should have the right exposure set",
|
|
)
|
|
harness.ok(
|
|
members[0]._exposureGlobalNames == set(["Foo"]),
|
|
"method should have the right exposure global names",
|
|
)
|
|
|
|
harness.ok(
|
|
members[1].exposureSet == set(["Bar"]),
|
|
"otherMethod should have the right exposure set",
|
|
)
|
|
harness.ok(
|
|
members[1]._exposureGlobalNames == set(["Bar"]),
|
|
"otherMethod should have the right exposure global names",
|
|
)
|
|
|
|
parser = parser.reset()
|
|
parser.parse(
|
|
"""
|
|
[Global=Foo, Exposed=Foo] interface Foo {};
|
|
[Global=Bar, Exposed=Bar] interface Bar {};
|
|
|
|
[Exposed=*]
|
|
interface Baz {
|
|
undefined methodWild();
|
|
};
|
|
|
|
[Exposed=Bar]
|
|
interface mixin Mixin {
|
|
undefined methodNotWild();
|
|
};
|
|
|
|
Baz includes Mixin;
|
|
"""
|
|
)
|
|
|
|
results = parser.finish()
|
|
|
|
harness.check(len(results), 5, "Should know about five things")
|
|
iface = results[2]
|
|
harness.ok(isinstance(iface, WebIDL.IDLInterface), "Should have an interface here")
|
|
members = iface.members
|
|
harness.check(len(members), 2, "Should have two members")
|
|
|
|
harness.ok(
|
|
members[0].exposureSet == set(["Foo", "Bar"]),
|
|
"methodWild should have the right exposure set",
|
|
)
|
|
harness.ok(
|
|
members[0]._exposureGlobalNames == set(["Foo", "Bar"]),
|
|
"methodWild should have the right exposure global names",
|
|
)
|
|
|
|
harness.ok(
|
|
members[1].exposureSet == set(["Bar"]),
|
|
"methodNotWild should have the right exposure set",
|
|
)
|
|
harness.ok(
|
|
members[1]._exposureGlobalNames == set(["Bar"]),
|
|
"methodNotWild should have the right exposure global names",
|
|
)
|
|
|
|
parser = parser.reset()
|
|
threw = False
|
|
try:
|
|
parser.parse(
|
|
"""
|
|
[Global=Foo, Exposed=Foo] interface Foo {};
|
|
[Global=Bar, Exposed=Bar] interface Bar {};
|
|
|
|
[Exposed=Foo]
|
|
interface Baz {
|
|
[Exposed=*]
|
|
undefined method();
|
|
};
|
|
"""
|
|
)
|
|
|
|
results = parser.finish()
|
|
except WebIDL.WebIDLError:
|
|
threw = True
|
|
|
|
harness.ok(
|
|
threw, "Should have thrown on member exposed where its interface is not."
|
|
)
|
|
|
|
parser = parser.reset()
|
|
threw = False
|
|
try:
|
|
parser.parse(
|
|
"""
|
|
[Global=Foo, Exposed=Foo] interface Foo {};
|
|
[Global=Bar, Exposed=Bar] interface Bar {};
|
|
|
|
[Exposed=(Foo,*)]
|
|
interface Baz {
|
|
undefined method();
|
|
};
|
|
"""
|
|
)
|
|
|
|
results = parser.finish()
|
|
except WebIDL.WebIDLError:
|
|
threw = True
|
|
|
|
harness.ok(threw, "Should have thrown on a wildcard in an identifier list.")
|