...(bool_expr.LogicalOr
  left: 
    (bool_expr.WordTest
      w: 
        (CompoundWord
          parts: [
            (Token
              id: Id.Lit_Chars
              length: 3
              col: 0
              line: 
                (SourceLine
                  line_num: 1
                  content: "foo || ! bar ]]"
                  src: (source.MainFile path:"<bool_parse_test.py>")
                )
            )
          ]
        )
    )
  right: 
    (bool_expr.LogicalNot
      child: 
        (bool_expr.WordTest
          w: (CompoundWord parts:[(Token id:Id.Lit_Chars length:3 col:9 line:...0x7f9bce811100)])
        )
    )
)
(bool_expr.Binary
  op_id: Id.BoolBinary_GlobDEqual
  left: 
    (CompoundWord
      parts: [
        (Token
          id: Id.Lit_Chars
          length: 1
          col: 0
          line: 
            (SourceLine
              line_num: 1
              content: "a == b ]]"
              src: (source.MainFile path:"<bool_parse_test.py>")
            )
        )
      ]
    )
  right: (CompoundWord parts:[(Token id:Id.Lit_Chars length:1 col:5 line:...0x7f9bce811158)])
)
(bool_expr.WordTest
  w: 
    (CompoundWord
      parts: [
        (Token
          id: Id.Lit_Chars
          length: 3
          col: 0
          line: 
            (SourceLine
              line_num: 1
              content: "foo ]]"
              src: (source.MainFile path:"<bool_parse_test.py>")
            )
        )
      ]
    )
)
(bool_expr.WordTest
  w: 
    (CompoundWord
      parts: [
        (SimpleVarSub
          tok: 
            (Token
              id: Id.VSub_DollarName
              length: 4
              col: 0
              line: 
                (SourceLine
                  line_num: 1
                  content: "$foo\"bar\" ]]"
                  src: (source.MainFile path:"<bool_parse_test.py>")
                )
            )
        )
        (DoubleQuoted
          left: (Token id:Id.Left_DoubleQuote length:1 col:4 line:...0x7f9bce8111b0)
          parts: [(Token id:Id.Lit_Chars length:3 col:5 line:...0x7f9bce8111b0)]
          right: (Token id:Id.Right_DoubleQuote length:1 col:8 line:...0x7f9bce8111b0)
        )
      ]
    )
)
-------------
(bool_expr.Unary
  op_id: Id.BoolUnary_z
  child: 
    (CompoundWord
      parts: [
        (Token
          id: Id.Lit_Chars
          length: 3
          col: 3
          line: 
            (SourceLine
              line_num: 1
              content: "-z foo ]]"
              src: (source.MainFile path:"<bool_parse_test.py>")
            )
        )
      ]
    )
)
(bool_expr.Binary
  op_id: Id.BoolBinary_GlobDEqual
  left: 
    (CompoundWord
      parts: [
        (Token
          id: Id.Lit_Chars
          length: 3
          col: 0
          line: 
            (SourceLine
              line_num: 1
              content: "foo == bar ]]"
              src: (source.MainFile path:"<bool_parse_test.py>")
            )
        )
      ]
    )
  right: (CompoundWord parts:[(Token id:Id.Lit_Chars length:3 col:7 line:...0x7f9bce8111b0)])
)
(bool_expr.Binary
  op_id: Id.BoolBinary_GlobDEqual
  left: 
    (CompoundWord
      parts: [
        (Token
          id: Id.Lit_Chars
          length: 3
          col: 2
          line: 
            (SourceLine
              line_num: 1
              content: "( foo == bar ) ]]"
              src: (source.MainFile path:"<bool_parse_test.py>")
            )
        )
      ]
    )
  right: (CompoundWord parts:[(Token id:Id.Lit_Chars length:3 col:9 line:...0x7f9bce8111b0)])
)
(bool_expr.WordTest
  w: 
    (CompoundWord
      parts: [
        (Token
          id: Id.Lit_Chars
          length: 3
          col: 0
          line: 
            (SourceLine
              line_num: 1
              content: "foo ]]"
              src: (source.MainFile path:"<bool_parse_test.py>")
            )
        )
      ]
    )
)
(bool_expr.LogicalNot
  child: 
    (bool_expr.WordTest
      w: 
        (CompoundWord
          parts: [
            (Token
              id: Id.Lit_Chars
              length: 3
              col: 2
            ...
----------------------------------------------------------------------
Ran 6 tests in 0.015s

OK
  line: 
                (SourceLine
                  line_num: 1
                  content: "! foo ]]"
                  src: (source.MainFile path:"<bool_parse_test.py>")
                )
            )
          ]
        )
    )
)
(bool_expr.LogicalAnd
  left: 
    (bool_expr.WordTest
      w: 
        (CompoundWord
          parts: [
            (Token
              id: Id.Lit_Chars
              length: 3
              col: 0
              line: 
                (SourceLine
                  line_num: 1
                  content: "zoo && ( foo == bar ) ]]"
                  src: (source.MainFile path:"<bool_parse_test.py>")
                )
            )
          ]
        )
    )
  right: 
    (bool_expr.Binary
      op_id: Id.BoolBinary_GlobDEqual
      left: (CompoundWord parts:[(Token id:Id.Lit_Chars length:3 col:9 line:...0x7f9bce811158)])
      right: (CompoundWord parts:[(Token id:Id.Lit_Chars length:3 col:16 line:...0x7f9bce811158)])
    )
)
(bool_expr.LogicalAnd
  left: 
    (bool_expr.WordTest
      w: 
        (CompoundWord
          parts: [
            (Token
              id: Id.Lit_Chars
              length: 3
              col: 0
              line: 
                (SourceLine
                  line_num: 1
                  content: "foo && ! bar ]]"
                  src: (source.MainFile path:"<bool_parse_test.py>")
                )
            )
          ]
        )
    )
  right: 
    (bool_expr.LogicalNot
      child: 
        (bool_expr.WordTest
          w: (CompoundWord parts:[(Token id:Id.Lit_Chars length:3 col:9 line:...0x7f9bce811158)])
        )
    )
)
(bool_expr.LogicalAnd
  left: 
    (bool_expr.WordTest
      w: 
        (CompoundWord
          parts: [
            (Token
              id: Id.Lit_Chars
              length: 3
              col: 0
              line: 
                (SourceLine
                  line_num: 1
                  content: "foo && ! bar && baz ]]"
                  src: (source.MainFile path:"<bool_parse_test.py>")
                )
            )
          ]
        )
    )
  right: 
    (bool_expr.LogicalAnd
      left: 
        (bool_expr.LogicalNot
          child: 
            (bool_expr.WordTest
              w: (CompoundWord parts:[(Token id:Id.Lit_Chars length:3 col:9 line:...0x7f9bce811100)])
            )
        )
      right: 
        (bool_expr.WordTest
          w: (CompoundWord parts:[(Token id:Id.Lit_Chars length:3 col:16 line:...0x7f9bce811100)])
        )
    )
)
(bool_expr.LogicalAnd
  left: 
    (bool_expr.Unary
      op_id: Id.BoolUnary_z
      child: 
        (CompoundWord
          parts: [
            (Token
              id: Id.Lit_Chars
              length: 3
              col: 3
              line: 
                (SourceLine
                  line_num: 1
                  content: "-z foo && -z bar ]]"
                  src: (source.MainFile path:"<bool_parse_test.py>")
                )
            )
          ]
        )
    )
  right: 
    (bool_expr.Unary
      op_id: Id.BoolUnary_z
      child: (CompoundWord parts:[(Token id:Id.Lit_Chars length:3 col:13 line:...0x7f9bce811260)])
    )
)