|  | /* Copyright (c) 2013 The Chromium Authors. All rights reserved. | 
|  | Use of this source code is governed by a BSD-style license that can be | 
|  | found in the LICENSE file. */ | 
|  |  | 
|  | /* Test Dictionary productions | 
|  |  | 
|  | Run with --test to generate an AST and verify that all comments accurately | 
|  | reflect the state of the Nodes. | 
|  |  | 
|  | BUILD Type(Name) | 
|  | This comment signals that a node of type <Type> is created with the | 
|  | name <Name>. | 
|  |  | 
|  | ERROR Error String | 
|  | This comment signals that a error of <Error String> is generated.  The error | 
|  | is not assigned to a node, but are expected in order. | 
|  |  | 
|  | PROP Key=Value | 
|  | This comment signals that a property has been set on the Node such that | 
|  | <Key> = <Value>. | 
|  |  | 
|  | TREE | 
|  | Type(Name) | 
|  | Type(Name) | 
|  | Type(Name) | 
|  | Type(Name) | 
|  | ... | 
|  | This comment signals that a tree of nodes matching the BUILD comment | 
|  | symatics should exist.  This is an exact match. | 
|  | */ | 
|  |  | 
|  |  | 
|  | /* TREE | 
|  | *Dictionary(MyDict) | 
|  | */ | 
|  | dictionary MyDict { }; | 
|  |  | 
|  | /* TREE | 
|  | *Dictionary(MyDictInherit) | 
|  | *  Inherit(Foo) | 
|  | */ | 
|  | dictionary MyDictInherit : Foo {}; | 
|  |  | 
|  | /* TREE | 
|  | *Dictionary(MyDictPartial) | 
|  | */ | 
|  | partial dictionary MyDictPartial { }; | 
|  |  | 
|  | /* ERROR Unexpected ":" after identifier "MyDictInherit". */ | 
|  | partial dictionary MyDictInherit : Foo {}; | 
|  |  | 
|  | /* TREE | 
|  | *Dictionary(MyDictBig) | 
|  | *  Key(setString) | 
|  | *    Type() | 
|  | *      StringType(DOMString) | 
|  | *    Default(Foo) | 
|  | *  Key(setLong) | 
|  | *    Type() | 
|  | *      PrimitiveType(unsigned long long) | 
|  | *    Default(123) | 
|  | *  Key(unsetLong) | 
|  | *    Type() | 
|  | *      PrimitiveType(long) | 
|  | */ | 
|  | dictionary MyDictBig { | 
|  | DOMString setString = "Foo"; | 
|  | unsigned long long setLong = 123; | 
|  | long unsetLong; | 
|  | }; | 
|  |  | 
|  | /* TREE | 
|  | *Dictionary(MyDictRequired) | 
|  | *  Key(setLong) | 
|  | *    Type() | 
|  | *      PrimitiveType(long) | 
|  | */ | 
|  | dictionary MyDictRequired { | 
|  | required long setLong; | 
|  | }; | 
|  |  | 
|  | /* ERROR Unexpected "{" after keyword "dictionary". */ | 
|  | dictionary { | 
|  | DOMString? setString = null; | 
|  | }; | 
|  |  | 
|  | /* TREE | 
|  | *Dictionary(MyDictionaryInvalidOptional) | 
|  | *  Key(mandatory) | 
|  | *    Type() | 
|  | *      StringType(DOMString) | 
|  | *  Error(Unexpected keyword "optional" after ">".) | 
|  | */ | 
|  | dictionary MyDictionaryInvalidOptional { | 
|  | DOMString mandatory; | 
|  | sequence<DOMString> optional; | 
|  | }; | 
|  |  | 
|  | /* ERROR Unexpected identifier "NoColon" after identifier "ForParent". */ | 
|  | dictionary ForParent NoColon { | 
|  | DOMString? setString = null; | 
|  | }; | 
|  |  | 
|  | /* TREE | 
|  | *Dictionary(MyDictNull) | 
|  | *  Key(setString) | 
|  | *    Type() | 
|  | *      StringType(DOMString) | 
|  | *    Default(NULL) | 
|  | */ | 
|  | dictionary MyDictNull { | 
|  | DOMString? setString = null; | 
|  | }; | 
|  |  | 
|  | /* ERROR Unexpected keyword "attribute" after "{". */ | 
|  | dictionary MyDictUnexpectedAttribute { | 
|  | attribute DOMString foo = ""; | 
|  | }; |