(command.CommandList
  children: [
    (command.AndOr
      ops: [Id.Op_DAmp]
      children: [
        (C {(Id.Lit_LBracket '[')} {(-z)} {(DQ ($ Id.VSub_DollarName '$TEST_SRCDIR'))} 
          {(Id.Lit_RBracket ']')}
        )
        (command.BraceGroup
          children: [
            (command.Sentence
              child: 
                (command.Simple
                  words: [{(echo)} {(DQ ('TEST_SRCDIR not set!'))}]
                  redirects: [
                    (redir.Redir
                      op: (Token id:Id.Redir_GreatAnd val:'>&' span_id:72)
                      fd: -1
                      arg_word: {(2)}
                    )
                  ]
                )
              terminator: (Token id:Id.Op_Semi val:';' span_id:74)
            )
            (command.Sentence
              child: 
                (command.ControlFlow
                  token: (Token id:Id.ControlFlow_Exit val:exit span_id:76)
                  arg_word: {(1)}
                )
              terminator: (Token id:Id.Op_Semi val:';' span_id:79)
            )
          ]
        )
      ]
    )
    (command.AndOr
      ops: [Id.Op_DPipe]
      children: [
        (C {(source)} {(DQ (${ Id.VSub_Name TEST_SRCDIR) (/io_bazel/src/test/shell/unittest.bash))})
        (command.BraceGroup
          children: [
            (command.Sentence
              child: 
                (command.Simple
                  words: [{(echo)} {(DQ ('Failed to source unittest.bash'))}]
                  redirects: [
                    (redir.Redir
                      op: (Token id:Id.Redir_GreatAnd val:'>&' span_id:108)
                      fd: -1
                      arg_word: {(2)}
                    )
                  ]
                )
              terminator: (Token id:Id.Op_Semi val:';' span_id:110)
            )
            (command.Sentence
              child: 
                (command.ControlFlow
                  token: (Token id:Id.ControlFlow_Exit val:exit span_id:112)
                  arg_word: {(1)}
                )
              terminator: (Token id:Id.Op_Semi val:';' span_id:115)
            )
          ]
        )
      ]
    )
    (command.ShFunction
      name: set_up
      body: 
        (command.BraceGroup
          children: [
            (C {(mkdir)} {(-p)} {($ Id.VSub_DollarName '$TEST_TMPDIR') (/workspace)})
            (C {(cd)} {($ Id.VSub_DollarName '$TEST_TMPDIR') (/workspace)})
            (C {(touch)} {($ Id.VSub_DollarName '$TEST_TMPDIR') (/workspace/WORKSPACE)})
          ]
        )
    )
    (command.ShFunction
      name: tear_down
      body: 
        (command.BraceGroup
          children: [
            (C {(rm)} {(-fr)} {($ Id.VSub_DollarName '$TEST_TMPDIR') (/workspace/) (Id.Lit_Star '*')})
          ]
        )
    )
  ]
)