зеркало из https://github.com/mozilla/gecko-dev.git
254 строки
7.0 KiB
Python
254 строки
7.0 KiB
Python
def WebIDLTest(parser, harness):
|
|
parser.parse("""
|
|
interface Child : Parent {
|
|
};
|
|
interface Parent {
|
|
[Unforgeable] readonly attribute long foo;
|
|
};
|
|
""")
|
|
|
|
results = parser.finish()
|
|
harness.check(len(results), 2,
|
|
"Should be able to inherit from an interface with "
|
|
"[Unforgeable] properties.")
|
|
|
|
parser = parser.reset();
|
|
parser.parse("""
|
|
interface Child : Parent {
|
|
const short foo = 10;
|
|
};
|
|
interface Parent {
|
|
[Unforgeable] readonly attribute long foo;
|
|
};
|
|
""")
|
|
|
|
results = parser.finish()
|
|
harness.check(len(results), 2,
|
|
"Should be able to inherit from an interface with "
|
|
"[Unforgeable] properties even if we have a constant with "
|
|
"the same name.")
|
|
|
|
parser = parser.reset();
|
|
parser.parse("""
|
|
interface Child : Parent {
|
|
static attribute short foo;
|
|
};
|
|
interface Parent {
|
|
[Unforgeable] readonly attribute long foo;
|
|
};
|
|
""")
|
|
|
|
results = parser.finish()
|
|
harness.check(len(results), 2,
|
|
"Should be able to inherit from an interface with "
|
|
"[Unforgeable] properties even if we have a static attribute "
|
|
"with the same name.")
|
|
|
|
parser = parser.reset();
|
|
parser.parse("""
|
|
interface Child : Parent {
|
|
static void foo();
|
|
};
|
|
interface Parent {
|
|
[Unforgeable] readonly attribute long foo;
|
|
};
|
|
""")
|
|
|
|
results = parser.finish()
|
|
harness.check(len(results), 2,
|
|
"Should be able to inherit from an interface with "
|
|
"[Unforgeable] properties even if we have a static operation "
|
|
"with the same name.")
|
|
|
|
parser = parser.reset();
|
|
threw = False
|
|
try:
|
|
parser.parse("""
|
|
interface Child : Parent {
|
|
void foo();
|
|
};
|
|
interface Parent {
|
|
[Unforgeable] readonly attribute long foo;
|
|
};
|
|
""")
|
|
|
|
results = parser.finish()
|
|
except:
|
|
threw = True
|
|
harness.ok(threw,
|
|
"Should have thrown when shadowing unforgeable attribute on "
|
|
"parent with operation.")
|
|
|
|
parser = parser.reset();
|
|
threw = False
|
|
try:
|
|
parser.parse("""
|
|
interface Child : Parent {
|
|
void foo();
|
|
};
|
|
interface Parent {
|
|
[Unforgeable] void foo();
|
|
};
|
|
""")
|
|
|
|
results = parser.finish()
|
|
except:
|
|
threw = True
|
|
harness.ok(threw,
|
|
"Should have thrown when shadowing unforgeable operation on "
|
|
"parent with operation.")
|
|
|
|
parser = parser.reset();
|
|
threw = False
|
|
try:
|
|
parser.parse("""
|
|
interface Child : Parent {
|
|
attribute short foo;
|
|
};
|
|
interface Parent {
|
|
[Unforgeable] readonly attribute long foo;
|
|
};
|
|
""")
|
|
|
|
results = parser.finish()
|
|
except Exception,x:
|
|
threw = True
|
|
harness.ok(threw,
|
|
"Should have thrown when shadowing unforgeable attribute on "
|
|
"parent with attribute.")
|
|
|
|
parser = parser.reset();
|
|
threw = False
|
|
try:
|
|
parser.parse("""
|
|
interface Child : Parent {
|
|
attribute short foo;
|
|
};
|
|
interface Parent {
|
|
[Unforgeable] void foo();
|
|
};
|
|
""")
|
|
|
|
results = parser.finish()
|
|
except Exception,x:
|
|
threw = True
|
|
harness.ok(threw,
|
|
"Should have thrown when shadowing unforgeable operation on "
|
|
"parent with attribute.")
|
|
|
|
parser = parser.reset();
|
|
parser.parse("""
|
|
interface Child : Parent {
|
|
};
|
|
interface Parent {};
|
|
interface Consequential {
|
|
[Unforgeable] readonly attribute long foo;
|
|
};
|
|
Parent implements Consequential;
|
|
""")
|
|
|
|
results = parser.finish()
|
|
harness.check(len(results), 4,
|
|
"Should be able to inherit from an interface with a "
|
|
"consequential interface with [Unforgeable] properties.")
|
|
|
|
parser = parser.reset();
|
|
threw = False
|
|
try:
|
|
parser.parse("""
|
|
interface Child : Parent {
|
|
void foo();
|
|
};
|
|
interface Parent {};
|
|
interface Consequential {
|
|
[Unforgeable] readonly attribute long foo;
|
|
};
|
|
Parent implements Consequential;
|
|
""")
|
|
|
|
results = parser.finish()
|
|
except:
|
|
threw = True
|
|
|
|
harness.ok(threw,
|
|
"Should have thrown when shadowing unforgeable attribute "
|
|
"of parent's consequential interface.")
|
|
|
|
parser = parser.reset();
|
|
threw = False
|
|
try:
|
|
parser.parse("""
|
|
interface Child : Parent {
|
|
};
|
|
interface Parent : GrandParent {};
|
|
interface GrandParent {};
|
|
interface Consequential {
|
|
[Unforgeable] readonly attribute long foo;
|
|
};
|
|
GrandParent implements Consequential;
|
|
interface ChildConsequential {
|
|
void foo();
|
|
};
|
|
Child implements ChildConsequential;
|
|
""")
|
|
|
|
results = parser.finish()
|
|
except:
|
|
threw = True
|
|
|
|
harness.ok(threw,
|
|
"Should have thrown when our consequential interface shadows unforgeable attribute "
|
|
"of ancestor's consequential interface.")
|
|
|
|
parser = parser.reset();
|
|
threw = False
|
|
try:
|
|
parser.parse("""
|
|
interface Child : Parent {
|
|
};
|
|
interface Parent : GrandParent {};
|
|
interface GrandParent {};
|
|
interface Consequential {
|
|
[Unforgeable] void foo();
|
|
};
|
|
GrandParent implements Consequential;
|
|
interface ChildConsequential {
|
|
void foo();
|
|
};
|
|
Child implements ChildConsequential;
|
|
""")
|
|
|
|
results = parser.finish()
|
|
except:
|
|
threw = True
|
|
|
|
harness.ok(threw,
|
|
"Should have thrown when our consequential interface shadows unforgeable operation "
|
|
"of ancestor's consequential interface.")
|
|
|
|
parser = parser.reset();
|
|
parser.parse("""
|
|
interface iface {
|
|
[Unforgeable] attribute long foo;
|
|
};
|
|
""")
|
|
|
|
results = parser.finish()
|
|
harness.check(len(results), 1,
|
|
"Should allow writable [Unforgeable] attribute.")
|
|
|
|
parser = parser.reset();
|
|
threw = False
|
|
try:
|
|
parser.parse("""
|
|
interface iface {
|
|
[Unforgeable] static readonly attribute long foo;
|
|
};
|
|
""")
|
|
|
|
results = parser.finish()
|
|
except:
|
|
threw = True
|
|
|
|
harness.ok(threw, "Should have thrown for static [Unforgeable] attribute.")
|