def test_page(self): page = """ page Selling { section "section1 name" { question question_name1 } section "section2 name" { question question_name2 } } """ page_node = AST.PageNode( "Selling", BlockNode([ AST.SectionNode( "section1 name", BlockNode([AST.QuestionNode("question_name1")])), AST.SectionNode( "section2 name", BlockNode([AST.QuestionNode("question_name2")])) ])) self.validate_node(self.parse_page, page, page_node) wrong_page = """ page Selling { page Page { section "section" { question question_name } } } """ self.check_parse_exception(self.parse_page, wrong_page, pp.ParseException)
def test_section_defaults(self): section = """ section "section name" { question question_name default integer widget slider default boolean widget checkbox } """ section_node = AST.SectionWithDefaultsNode( "section name", BlockNode([AST.QuestionNode("question_name")]), BlockNode([ AST.DefaultNode(AST.IntTypeNode(), AST.SliderNode()), AST.DefaultNode(AST.BoolTypeNode(), AST.CheckboxNode()) ])) self.validate_node(self.parse_section, section, section_node) wrong_section = """ section \"section name\" { question name default integer widget slider question name } """ self.check_parse_exception(self.parse_section, wrong_section, pp.ParseException)
def test_section_in_section(self): section = """ section "section1" { section "section2" { question name } } """ section_node = AST.SectionNode( "section1", BlockNode([ AST.SectionNode("section2", BlockNode([AST.QuestionNode("name")])) ])) self.validate_node(self.parse_section, section, section_node)
def test_section(self): section = """ section "section name" { question question_name } """ section_node = AST.SectionNode( "section name", BlockNode([AST.QuestionNode("question_name")])) self.validate_node(self.parse_section, section, section_node) self.check_parse_exception(self.parse_section, "section \"name\" {}", pp.ParseException)
def test_page_with_defaults(self): page = """ page Selling { section "section1 name" { question question_name1 } section "section2 name" { question question_name2 } default boolean widget radio default integer widget slider } """ page_node = AST.PageWithDefaultsNode( "Selling", BlockNode([ AST.SectionNode( "section1 name", BlockNode([AST.QuestionNode("question_name1")])), AST.SectionNode( "section2 name", BlockNode([AST.QuestionNode("question_name2")])) ]), BlockNode([ AST.DefaultNode(AST.BoolTypeNode(), AST.RadioNode()), AST.DefaultNode(AST.IntTypeNode(), AST.SliderNode()) ])) self.validate_node(self.parse_page, page, page_node) wrong_page = """ page Selling { section "section" { question question_name } default integer widget spinbox section "section" { question question_name } } """ self.check_parse_exception(self.parse_page, wrong_page, pp.ParseException)
def test_stylesheet(self): stylesheet = """ stylesheet StyleSheet { page Selling { section "Selling" { question hasSoldHouse question widgetQuestion widget spinbox default integer { color: #123123 fontsize: 12 widget spinbox } default boolean widget radio } } page Housing { section "Buying" { question name } } } """ default_block = BlockNode([ AST.DefaultWithPropsNode( AST.IntTypeNode(), BlockNode([AST.ColorNode("#123123"), AST.FontSizeNode(12)]), AST.SpinboxNode()), AST.DefaultNode(AST.BoolTypeNode(), AST.RadioNode()) ]) stylesheet_node = AST.StylesheetNode( "StyleSheet", BlockNode([ AST.PageNode( "Selling", BlockNode([ AST.SectionWithDefaultsNode( "Selling", BlockNode([ AST.QuestionNode("hasSoldHouse"), AST.WidgetQuestionNode("widgetQuestion", AST.SpinboxNode()) ]), default_block) ])), AST.PageNode( "Housing", BlockNode([ AST.SectionNode("Buying", BlockNode([AST.QuestionNode("name")])) ])) ])) self.validate_node(self.parse_stylesheet, stylesheet, stylesheet_node)
def test_default_with_props(self): default = """ default boolean { width: 400 widget checkbox } """ default_node = AST.DefaultWithPropsNode( AST.BoolTypeNode(), BlockNode([AST.WidthNode(400)]), AST.CheckboxNode()) self.validate_node(self.parse_default, default, default_node) default = """ default boolean { width: 400 widget checkbox font: "Arial" } """ self.check_parse_exception(self.parse_default, default, pp.ParseException)