Skip to content
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
8 changes: 6 additions & 2 deletions lib/webidl/parser/idl.treetop
Original file line number Diff line number Diff line change
Expand Up @@ -74,8 +74,12 @@ module WebIDL
(eal:ExtendedAttributeList ws member:DictionaryMember ws members:DictionaryMembers <ParseTree::DictionaryMembers>)?
end

rule Required
"required"
end

rule DictionaryMember
type:Type ws name:identifier ws default:Default ws ";" <ParseTree::DictionaryMember>
required:Required? ws type:Type ws name:identifier ws default:Default ws ";" <ParseTree::DictionaryMember>
end

rule Default
Expand Down Expand Up @@ -442,7 +446,7 @@ module WebIDL
end

rule PromiseType
"Promise" "<" return_type:ReturnType ">" {
"Promise" ws "<" ws return_type:ReturnType ws ">" {
def build(parent)
Ast::PromiseType.new(return_type.text_value)
end
Expand Down
47 changes: 47 additions & 0 deletions spec/parser_spec.rb
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,53 @@

describe WebIDL::Parser::IDLParser do

#
# dictionaries
#

it "parses an empty dictionary" do
str = <<-IDL
dictionary Foo {};
IDL
parse(str).should_not be_nil
end

it "parses dictionary members" do
str = <<-IDL
dictionary Foo { DOMString foo; };
IDL
parse(str).should_not be_nil
end

it "parses required dictionary members" do
str = <<-IDL
dictionary Foo { required DOMString foo; };
IDL
parse(str).should_not be_nil
end

#
# promises
#

it "parses empty promises" do
str = <<-IDL
interface Asdf {
Promise <DOMString> doSomething ();
};
IDL
parse(str).should_not be_nil
end

it "parses promises with ws around return type" do
str = <<-IDL
interface Asdf {
Promise < DOMString > doSomething ();
};
IDL
parse(str).should_not be_nil
end

#
# interfaces
#
Expand Down