Blame dom/bindings/parser/tests/test_conditional_dictionary_member.py

Packit f0b94e
def WebIDLTest(parser, harness):
Packit f0b94e
    parser.parse("""
Packit f0b94e
      dictionary Dict {
Packit f0b94e
        any foo;
Packit f0b94e
        [ChromeOnly] any bar;
Packit f0b94e
      };
Packit f0b94e
    """)
Packit f0b94e
    results = parser.finish()
Packit f0b94e
    harness.check(len(results), 1, "Should have a dictionary")
Packit f0b94e
    members = results[0].members;
Packit f0b94e
    harness.check(len(members), 2, "Should have two members")
Packit f0b94e
    # Note that members are ordered lexicographically, so "bar" comes
Packit f0b94e
    # before "foo".
Packit f0b94e
    harness.ok(members[0].getExtendedAttribute("ChromeOnly"),
Packit f0b94e
               "First member is not ChromeOnly")
Packit f0b94e
    harness.ok(not members[1].getExtendedAttribute("ChromeOnly"),
Packit f0b94e
               "Second member is ChromeOnly")
Packit f0b94e
Packit f0b94e
    parser = parser.reset()
Packit f0b94e
    parser.parse("""
Packit f0b94e
      dictionary Dict {
Packit f0b94e
        any foo;
Packit f0b94e
        any bar;
Packit f0b94e
      };
Packit f0b94e
Packit f0b94e
      interface Iface {
Packit f0b94e
        [Constant, Cached] readonly attribute Dict dict;
Packit f0b94e
      };
Packit f0b94e
    """)
Packit f0b94e
    results = parser.finish()
Packit f0b94e
    harness.check(len(results), 2, "Should have a dictionary and an interface")
Packit f0b94e
Packit f0b94e
    parser = parser.reset()
Packit f0b94e
    exception = None
Packit f0b94e
    try:
Packit f0b94e
      parser.parse("""
Packit f0b94e
        dictionary Dict {
Packit f0b94e
          any foo;
Packit f0b94e
          [ChromeOnly] any bar;
Packit f0b94e
        };
Packit f0b94e
Packit f0b94e
        interface Iface {
Packit f0b94e
          [Constant, Cached] readonly attribute Dict dict;
Packit f0b94e
        };
Packit f0b94e
      """)
Packit f0b94e
      results = parser.finish()
Packit f0b94e
    except Exception, exception:
Packit f0b94e
        pass
Packit f0b94e
Packit f0b94e
    harness.ok(exception, "Should have thrown.")
Packit f0b94e
    harness.check(exception.message,
Packit f0b94e
                  "[Cached] and [StoreInSlot] must not be used on an attribute "
Packit f0b94e
                  "whose type contains a [ChromeOnly] dictionary member",
Packit f0b94e
                  "Should have thrown the right exception")
Packit f0b94e
Packit f0b94e
    parser = parser.reset()
Packit f0b94e
    exception = None
Packit f0b94e
    try:
Packit f0b94e
      parser.parse("""
Packit f0b94e
        dictionary ParentDict {
Packit f0b94e
          [ChromeOnly] any bar;
Packit f0b94e
        };
Packit f0b94e
Packit f0b94e
        dictionary Dict : ParentDict {
Packit f0b94e
          any foo;
Packit f0b94e
        };
Packit f0b94e
Packit f0b94e
        interface Iface {
Packit f0b94e
          [Constant, Cached] readonly attribute Dict dict;
Packit f0b94e
        };
Packit f0b94e
      """)
Packit f0b94e
      results = parser.finish()
Packit f0b94e
    except Exception, exception:
Packit f0b94e
        pass
Packit f0b94e
Packit f0b94e
    harness.ok(exception, "Should have thrown (2).")
Packit f0b94e
    harness.check(exception.message,
Packit f0b94e
                  "[Cached] and [StoreInSlot] must not be used on an attribute "
Packit f0b94e
                  "whose type contains a [ChromeOnly] dictionary member",
Packit f0b94e
                  "Should have thrown the right exception (2)")
Packit f0b94e
Packit f0b94e
    parser = parser.reset()
Packit f0b94e
    exception = None
Packit f0b94e
    try:
Packit f0b94e
      parser.parse("""
Packit f0b94e
        dictionary GrandParentDict {
Packit f0b94e
          [ChromeOnly] any baz;
Packit f0b94e
        };
Packit f0b94e
Packit f0b94e
        dictionary ParentDict : GrandParentDict {
Packit f0b94e
          any bar;
Packit f0b94e
        };
Packit f0b94e
Packit f0b94e
        dictionary Dict : ParentDict {
Packit f0b94e
          any foo;
Packit f0b94e
        };
Packit f0b94e
Packit f0b94e
        interface Iface {
Packit f0b94e
          [Constant, Cached] readonly attribute Dict dict;
Packit f0b94e
        };
Packit f0b94e
      """)
Packit f0b94e
      results = parser.finish()
Packit f0b94e
    except Exception, exception:
Packit f0b94e
        pass
Packit f0b94e
Packit f0b94e
    harness.ok(exception, "Should have thrown (3).")
Packit f0b94e
    harness.check(exception.message,
Packit f0b94e
                  "[Cached] and [StoreInSlot] must not be used on an attribute "
Packit f0b94e
                  "whose type contains a [ChromeOnly] dictionary member",
Packit f0b94e
                  "Should have thrown the right exception (3)")