RUN asdl/examples/typed_arith_parse_test.py > _test/py-unit/asdl/examples/typed_arith_parse_test.py.log OK RUN asdl/format_test.py > _test/py-unit/asdl/format_test.py.log OK RUN asdl/front_end_test.py > _test/py-unit/asdl/front_end_test.py.log OK RUN asdl/gen_python_test.py > _test/py-unit/asdl/gen_python_test.py.log OK RUN asdl/target_lang_test.py > _test/py-unit/asdl/target_lang_test.py.log OK RUN benchmarks/uftrace_allocs_test.py > _test/py-unit/benchmarks/uftrace_allocs_test.py.log OK RUN build/dynamic_deps_test.py > _test/py-unit/build/dynamic_deps_test.py.log OK RUN build/ninja_lib_test.py > _test/py-unit/build/ninja_lib_test.py.log OK RUN builtin/bracket_osh_test.py > _test/py-unit/builtin/bracket_osh_test.py.log OK RUN builtin/completion_osh_test.py > _test/py-unit/builtin/completion_osh_test.py.log OK RUN builtin/func_misc_test.py > _test/py-unit/builtin/func_misc_test.py.log OK RUN builtin/misc_osh_test.py > _test/py-unit/builtin/misc_osh_test.py.log OK RUN builtin/read_osh_test.py > _test/py-unit/builtin/read_osh_test.py.log OK RUN builtin/readline_osh_test.py > _test/py-unit/builtin/readline_osh_test.py.log OK RUN builtin/trap_osh_test.py > _test/py-unit/builtin/trap_osh_test.py.log OK RUN core/alloc_test.py > _test/py-unit/core/alloc_test.py.log OK RUN core/comp_ui_test.py > _test/py-unit/core/comp_ui_test.py.log OK RUN core/completion_test.py > _test/py-unit/core/completion_test.py.log OK RUN core/process_test.py > _test/py-unit/core/process_test.py.log OK RUN core/pyutil_test.py > _test/py-unit/core/pyutil_test.py.log OK RUN core/state_test.py > _test/py-unit/core/state_test.py.log OK RUN core/util_test.py > _test/py-unit/core/util_test.py.log OK RUN data_lang/htm8_test.py > _test/py-unit/data_lang/htm8_test.py.log OK RUN data_lang/htm8_util_test.py > _test/py-unit/data_lang/htm8_util_test.py.log OK RUN data_lang/j8_test.py > _test/py-unit/data_lang/j8_test.py.log OK RUN data_lang/pyj8_test.py > _test/py-unit/data_lang/pyj8_test.py.log OK RUN display/pretty_test.py > _test/py-unit/display/pretty_test.py.log OK RUN display/ui_test.py > _test/py-unit/display/ui_test.py.log OK RUN doctools/help_gen_test.py > _test/py-unit/doctools/help_gen_test.py.log OK RUN doctools/html_lib_test.py > _test/py-unit/doctools/html_lib_test.py.log OK RUN doctools/html_old_test.py > _test/py-unit/doctools/html_old_test.py.log OK RUN doctools/oils_doc_test.py > _test/py-unit/doctools/oils_doc_test.py.log OK RUN doctools/spelling_test.py > _test/py-unit/doctools/spelling_test.py.log OK RUN doctools/split_doc_test.py > _test/py-unit/doctools/split_doc_test.py.log OK RUN frontend/args_test.py > _test/py-unit/frontend/args_test.py.log OK RUN frontend/id_kind_def_test.py > _test/py-unit/frontend/id_kind_def_test.py.log OK RUN frontend/lexer_def_test.py > _test/py-unit/frontend/lexer_def_test.py.log OK RUN frontend/lexer_gen_test.py > _test/py-unit/frontend/lexer_gen_test.py.log OK RUN frontend/lexer_test.py > _test/py-unit/frontend/lexer_test.py.log OK RUN frontend/match_test.py > _test/py-unit/frontend/match_test.py.log OK RUN frontend/reader_test.py > _test/py-unit/frontend/reader_test.py.log OK RUN frontend/typed_args_test.py > _test/py-unit/frontend/typed_args_test.py.log OK RUN mycpp/mops_test.py > _test/py-unit/mycpp/mops_test.py.log OK RUN mycpp/mylib_test.py > _test/py-unit/mycpp/mylib_test.py.log OK RUN osh/arith_parse_test.py > _test/py-unit/osh/arith_parse_test.py.log OK RUN osh/bool_parse_test.py > _test/py-unit/osh/bool_parse_test.py.log === /home/uke/oil/_test/py-unit/osh/bool_parse_test.py.log === .... ---- CASE foo || ! bar (bool_expr.LogicalOr left:(bool_expr.WordTest w:(CompoundWord parts:[ (Token id:Lit_Chars length:3 col:0 line:(SourceLine line_num:1 content:"foo || ! bar ]]" src:(source.MainFile path:"") ) ) ] ) ) right:(bool_expr.LogicalNot child:(bool_expr.WordTest w:(CompoundWord parts:[(Token id:Lit_Chars length:3 col:9 line:...0x7f5463f29290)] ) ) ) ) ---- CASE a == b (bool_expr.Binary op_id:BoolBinary_GlobDEqual left:(CompoundWord parts:[ (Token id:Lit_Chars length:1 col:0 line:(SourceLine line_num:1 content:"a == b ]]" src:(source.MainFile path:"") ) ) ] ) right:(CompoundWord parts:[(Token id:Lit_Chars length:1 col:5 line:...0x7f5463f299b0)] ) ) ---- CASE foo (bool_expr.WordTest w:(CompoundWord parts:[ (Token id:Lit_Chars length:3 col:0 line:(SourceLine line_num:1 content:"foo ]]" src:(source.MainFile path:"") ) ) ] ) ) ---- CASE $foo"bar" (bool_expr.WordTest w:(CompoundWord parts:[ (SimpleVarSub tok:(Token id:VSub_DollarName length:4 col:0 line:(SourceLine line_num:1 content:"$foo\"bar\" ]]" src:(source.MainFile path:"") ) ) ) (DoubleQuoted left:(Token id:Left_DoubleQuote length:1 col:4 line:...0x7f5463f29cb0) parts:[(Token id:Lit_Chars length:3 col:5 line:...0x7f5463f29cb0)] right:(Token id:Right_DoubleQuote length:1 col:8 line:...0x7f5463f29cb0) ) ] ) ) ---- CASE -z foo ------------- (bool_expr.Unary op_id:BoolUnary_z child:(CompoundWord parts:[ (Token id:Lit_Chars length:3 col:3 line:(SourceLine line_num:1 content:"-z foo ]]" src:(source.MainFile path:"") ) ) ] ) ) ---- CASE foo == bar (bool_expr.Binary op_id:BoolBinary_GlobDEqual left:(CompoundWord parts:[ (Token id:Lit_Chars length:3 col:0 line:(SourceLine line_num:1 content:"foo == bar ]]" src:(source.MainFile path:"") ) ) ] ) right:(CompoundWord parts:[(Token id:Lit_Chars length:3 col:7 line:...0x7f5463f297d0)] ) ) ---- CASE ( foo == bar ) (bool_expr.Binary op_id:BoolBinary_GlobDEqual left:(CompoundWord parts:[ (Token id:Lit_Chars length:3 col:2 line:(SourceLine line_num:1 content:"( foo == bar ) ]]" src:(source.MainFile path:"") ) ) ] ) right:(CompoundWord parts:[(Token id:Lit_Chars length:3 col:9 line:...0x7f5463f297d0)] ) ) ---- CASE foo (bool_expr.WordTest w:(CompoundWord parts:[ (Token id:Lit_Chars length:3 col:0 line:(SourceLine line_num:1 content:"foo ]]" src:(source.MainFile path:"") ) ) ] ) ) ---- CASE ! foo (bool_expr.LogicalNot child:(bool_expr.WordTest w:(CompoundWord parts:[ (Token id:Lit_Chars length:3 col:2 line:(SourceLine line_num:1 content:"! foo ]]" src:(source.MainFile path:"") ) ) ] ) ) ) ---- CASE zoo && ( foo == bar ) (bool_expr.LogicalAnd left:(bool_expr.WordTest w:(CompoundWord parts:[ (Token id:Lit_Chars length:3 col:0 line:(SourceLine line_num:1 content:..bool_id = Id.BoolUnary_f Ecur_word = (CompoundWord parts:[ (Token id:BoolUnary_f length:2 col:0 line:(SourceLine line_num:1 content:"-f foo ]]" src:(source.MainFile path:"") ) ) ] ) bool_id = Id.BoolUnary_f ahead1 = None ahead2 = None /// cur_word = (CompoundWord parts:[ (Token id:BoolUnary_f length:2 col:0 line:(SourceLine line_num:1 content:"-f foo ]]" src:(source.MainFile path:"") ) ) ] ) bool_id = Id.BoolUnary_f ahead1 = (CompoundWord parts:[ (Token id:Lit_Chars length:3 col:3 line:(SourceLine line_num:1 content:"-f foo ]]" src:(source.MainFile path:"") ) ) ] ) ahead2 = None /// cur_word = (CompoundWord parts:[ (Token id:Lit_Chars length:3 col:3 line:(SourceLine line_num:1 content:"-f foo ]]" src:(source.MainFile path:"") ) ) ] ) bool_id = Id.Word_Compound ahead1 = None ahead2 = None /// cur_word = (CompoundWord parts:[ (Token id:Lit_DRightBracket length:2 col:7 line:(SourceLine line_num:1 content:"-f foo ]]" src:(source.MainFile path:"") ) ) ] ) bool_id = Id.Lit_DRightBracket ahead1 = None ahead2 = None /// .EF ====================================================================== ERROR: testLookAhead (__main__.BugsTest) ---------------------------------------------------------------------- Traceback (most recent call last): File "/home/uke/oil/osh/bool_parse_test.py", line 146, in testLookAhead log('n = %d', len(p.words)) AttributeError: 'BoolParser' object has no attribute 'words' ====================================================================== ERROR: testNextOne (__main__.BugsTest) ---------------------------------------------------------------------- Traceback (most recent call last): File "/home/uke/oil/osh/bool_parse_test.py", line 186, in testNextOne log('n = %d', len(p.words)) AttributeError: 'BoolParser' object has no attribute 'words' ====================================================================== FAIL: testParse (__main__.BugsTest) ---------------------------------------------------------------------- Traceback (most recent call last): File "/home/uke/oil/osh/bool_parse_test.py", line 141, in testParse self.assertEqual(bool_expr_e.Unary, node.tag()) AssertionError: 3 != 2 ---------------------------------------------------------------------- Ran 10 tests in 0.038s FAILED (failures=1, errors=2) "zoo && ( foo == bar ) ]]" src:(source.MainFile path:"") ) ) ] ) ) right:(bool_expr.Binary op_id:BoolBinary_GlobDEqual left:(CompoundWord parts:[(Token id:Lit_Chars length:3 col:9 line:...0x7f5463f29530)] ) right:(CompoundWord parts:[(Token id:Lit_Chars length:3 col:16 line:...0x7f5463f29530)] ) ) ) ---- CASE foo && ! bar (bool_expr.LogicalAnd left:(bool_expr.WordTest w:(CompoundWord parts:[ (Token id:Lit_Chars length:3 col:0 line:(SourceLine line_num:1 content:"foo && ! bar ]]" src:(source.MainFile path:"") ) ) ] ) ) right:(bool_expr.LogicalNot child:(bool_expr.WordTest w:(CompoundWord parts:[(Token id:Lit_Chars length:3 col:9 line:...0x7f5463f29d10)] ) ) ) ) ---- CASE foo && ! bar && baz (bool_expr.LogicalAnd left:(bool_expr.WordTest w:(CompoundWord parts:[ (Token id:Lit_Chars length:3 col:0 line:(SourceLine line_num:1 content:"foo && ! bar && baz ]]" src:(source.MainFile path:"") ) ) ] ) ) right:(bool_expr.LogicalAnd left:(bool_expr.LogicalNot child:(bool_expr.WordTest w:(CompoundWord parts:[(Token id:Lit_Chars length:3 col:9 line:...0x7f5463f29bf0)] ) ) ) right:(bool_expr.WordTest w:(CompoundWord parts:[(Token id:Lit_Chars length:3 col:16 line:...0x7f5463f29bf0)] ) ) ) ) ---- CASE -z foo && -z bar (bool_expr.LogicalAnd left:(bool_expr.Unary op_id:BoolUnary_z child:(CompoundWord parts:[ (Token id:Lit_Chars length:3 col:3 line:(SourceLine line_num:1 content:"-z foo && -z bar ]]" src:(source.MainFile path:"") ) ) ] ) ) right:(bool_expr.Unary op_id:BoolUnary_z child:(CompoundWord parts:[(Token id:Lit_Chars length:3 col:13 line:...0x7f5463f29d10)] ) ) ) ---- CASE -f foo ---- CASE -f foo *** LookAhead *** Next *** Next ---- CASE -f foo ---- CASE -f foo (bool_expr.Unary op_id:BoolUnary_f child:(CompoundWord parts:[ (Token id:Lit_Chars length:3 col:3 line:(SourceLine line_num:1 content:"-f foo ]]" src:(source.MainFile path:"") ) ) ] ) ) ---- CASE -f == -f (bool_expr.Binary op_id:BoolBinary_GlobDEqual left:(CompoundWord parts:[ (Token id:BoolUnary_f length:2 col:0 line:(SourceLine line_num:1 content:"-f == -f ]]" src:(source.MainFile path:"") ) ) ] ) right:(CompoundWord parts:[(Token id:BoolUnary_f length:2 col:6 line:...0x7f5463f29290)] ) ) ---- CASE -f == (bool_expr.Binary op_id:BoolBinary_GlobDEqual left:(CompoundWord parts:[ (Token id:BoolUnary_f length:2 col:0 line:(SourceLine line_num:1 content:"-f == ]]" src:(source.MainFile path:"") ) ) ] ) right:(CompoundWord parts:[(Token id:Lit_DRightBracket length:2 col:6 line:...0x7f5463f294d0)] ) ) FAIL: osh/bool_parse_test.py with code 1