tor-browser

The Tor Browser
git clone https://git.dasho.dev/tor-browser.git
Log | Files | Refs | README | LICENSE

test_extended_attributes.py (3125B)


      1 import WebIDL
      2 
      3 
      4 def WebIDLTest(parser, harness):
      5    parser.parse(
      6        """
      7        [LegacyNoInterfaceObject]
      8        interface TestExtendedAttr {
      9          [LegacyUnforgeable] readonly attribute byte b;
     10        };
     11    """
     12    )
     13 
     14    parser.finish()
     15 
     16    parser = parser.reset()
     17    parser.parse(
     18        """
     19        [Pref="foo.bar",Pref=flop]
     20        interface TestExtendedAttr {
     21          [Pref="foo.bar"] attribute byte b;
     22        };
     23    """
     24    )
     25 
     26    parser.finish()
     27 
     28    parser = parser.reset()
     29    parser.parse(
     30        """
     31        interface TestLegacyLenientThis {
     32          [LegacyLenientThis] attribute byte b;
     33        };
     34    """
     35    )
     36 
     37    results = parser.finish()
     38    harness.ok(
     39        results[0].members[0].hasLegacyLenientThis(), "Should have a lenient this"
     40    )
     41 
     42    parser = parser.reset()
     43    threw = False
     44    try:
     45        parser.parse(
     46            """
     47            interface TestLegacyLenientThis2 {
     48              [LegacyLenientThis=something] attribute byte b;
     49            };
     50        """
     51        )
     52        parser.finish()
     53    except WebIDL.WebIDLError:
     54        threw = True
     55 
     56    harness.ok(threw, "[LegacyLenientThis] must take no arguments")
     57 
     58    parser = parser.reset()
     59    parser.parse(
     60        """
     61        interface TestClamp {
     62          undefined testClamp([Clamp] long foo);
     63          undefined testNotClamp(long foo);
     64        };
     65    """
     66    )
     67 
     68    results = parser.finish()
     69    # Pull out the first argument out of the arglist of the first (and
     70    # only) signature.
     71    harness.ok(
     72        results[0].members[0].signatures()[0][1][0].type.hasClamp(), "Should be clamped"
     73    )
     74    harness.ok(
     75        not results[0].members[1].signatures()[0][1][0].type.hasClamp(),
     76        "Should not be clamped",
     77    )
     78 
     79    parser = parser.reset()
     80    threw = False
     81    try:
     82        parser.parse(
     83            """
     84            interface TestClamp2 {
     85              undefined testClamp([Clamp=something] long foo);
     86            };
     87        """
     88        )
     89        parser.finish()
     90    except WebIDL.WebIDLError:
     91        threw = True
     92 
     93    harness.ok(threw, "[Clamp] must take no arguments")
     94 
     95    parser = parser.reset()
     96    parser.parse(
     97        """
     98        interface TestEnforceRange {
     99          undefined testEnforceRange([EnforceRange] long foo);
    100          undefined testNotEnforceRange(long foo);
    101        };
    102    """
    103    )
    104 
    105    results = parser.finish()
    106    # Pull out the first argument out of the arglist of the first (and
    107    # only) signature.
    108    harness.ok(
    109        results[0].members[0].signatures()[0][1][0].type.hasEnforceRange(),
    110        "Should be enforceRange",
    111    )
    112    harness.ok(
    113        not results[0].members[1].signatures()[0][1][0].type.hasEnforceRange(),
    114        "Should not be enforceRange",
    115    )
    116 
    117    parser = parser.reset()
    118    threw = False
    119    try:
    120        parser.parse(
    121            """
    122            interface TestEnforceRange2 {
    123              undefined testEnforceRange([EnforceRange=something] long foo);
    124            };
    125        """
    126        )
    127        parser.finish()
    128    except WebIDL.WebIDLError:
    129        threw = True
    130 
    131    harness.ok(threw, "[EnforceRange] must take no arguments")