.... ---- 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:...0x7f4a3c9da230)] ) ) ) ) ---- 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:...0x7f4a3c9da950)] ) ) ---- 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:...0x7f4a3c9da950) parts:[(Token id:Lit_Chars length:3 col:5 line:...0x7f4a3c9da950)] right:(Token id:Right_DoubleQuote length:1 col:8 line:...0x7f4a3c9da950) ) ] ) ) ---- 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:...0x7f4a3c9da650)] ) ) ---- 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:...0x7f4a3c9da410)] ) ) ---- 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:..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 = None ahead2 = None /// *** LookAhead 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 /// *** Next 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 /// *** Next 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 /// .bool_id Id.Eof_Real .. ---------------------------------------------------------------------- Ran 9 tests in 0.034s OK "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:...0x7f4a3c9da650)] ) right:(CompoundWord parts:[(Token id:Lit_Chars length:3 col:16 line:...0x7f4a3c9da650)] ) ) ) ---- 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:...0x7f4a3c9da650)] ) ) ) ) ---- 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:...0x7f4a3c9da830)] ) ) ) right:(bool_expr.WordTest w:(CompoundWord parts:[(Token id:Lit_Chars length:3 col:16 line:...0x7f4a3c9da830)] ) ) ) ) ---- 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:...0x7f4a3c9dadd0)] ) ) ) ---- CASE -f foo ---- 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:...0x7f4a3c9dab90)] ) ) ---- 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:...0x7f4a3c9daef0)] ) )