(command.CommandList
  children: [
    (C {<Id.Lit_Other ':'>} 
      {
        (braced_var_sub
          token: <Id.VSub_Name DIR>
          suffix_op: 
            (suffix_op.Unary
              op_id: Id.VTest_ColonEquals
              arg_word: 
                {
                  (command_sub
                    left_token: <Id.Left_DollarParen '$('>
                    command_list: 
                      (command.CommandList
                        children: [
                          (command.AndOr
                            ops: [Id.Op_DAmp]
                            children: [
                              (C {<cd>} 
                                {
                                  (DQ 
                                    (command_sub
                                      left_token: <Id.Left_DollarParen '$('>
                                      command_list: 
                                        (command.CommandList
                                          children: [
                                            (C {<dirname>} 
                                              {
                                                (DQ 
                                                  (braced_var_sub
                                                    token: <Id.VSub_Name BASH_SOURCE>
                                                    bracket_op: 
                                                      (bracket_op.ArrayIndex
                                                        expr: 
                                                          (arith_expr.ArithWord
                                                            w: {<Id.Lit_Digits 0>}
                                                          )
                                                      )
                                                  )
                                                )
                                              }
                                            )
                                          ]
                                        )
                                    )
                                  )
                                }
                              )
                              (C {<pwd>})
                            ]
                          )
                        ]
                      )
                  )
                }
            )
        )
      }
    )
    (command.AndOr
      ops: [Id.Op_DPipe]
      children: [
        (C {<source>} {(${ Id.VSub_Name DIR) </testenv.sh>})
        (command.BraceGroup
          children: [
            (command.Sentence
              child: 
                (command.Simple
                  words: [{<echo>} {(DQ <'testenv.sh not found!'>)}]
                  redirects: [(redir.Redir op:<Id.Redir_GreatAnd '>&'> fd:-1 arg_word:{<2>})]
                )
              terminator: <Id.Op_Semi _>
            )
            (command.Sentence
              child: (command.ControlFlow token:<Id.ControlFlow_Exit exit> arg_word:{<1>})
              terminator: <Id.Op_Semi _>
            )
          ]
        )
      ]
    )
    (C {<Id.Lit_Other ':'>} 
      {
        (braced_var_sub
          token: <Id.VSub_Name COMMAND_ALIASES>
          suffix_op: (suffix_op.Unary op_id:Id.VTest_ColonEquals arg_word:{<bazel>})
        )
      }
    )
    (C {<Id.Lit_Other ':'>} 
      {
        (braced_var_sub
          token: <Id.VSub_Name COMPLETION>
          suffix_op: 
            (suffix_op.Unary
              op_id: Id.VTest_ColonEquals
              arg_word: 
                {(DQ ($ Id.VSub_DollarName '$TEST_SRCDIR') </io_bazel/scripts/bazel-complete.bash>)}
            )
        )
      }
    )
    (C {<Id.Lit_Other ':'>} 
      {
        (braced_var_sub
          token: <Id.VSub_Name PACKAGE_PATH_PREFIX>
          suffix_op: (suffix_op.Unary op_id:Id.VTest_ColonEquals arg_word:{})
        )
      }
    )
    (command.ShFunction
      name: array_join
      body: 
        (command.BraceGroup
          children: [
            (C {<local>} {<Id.Lit_VarLike 'joiner='> (DQ ($ Id.VSub_Number '$1'))})
            (C {<shift>})
            (C {<echo>} {<-n>} {(DQ ($ Id.VSub_Number '$1'))})
            (C {<shift>})
            (command.ForEach
              iter_name: i
              iter_words: [{(DQ ($ Id.VSub_At '$@'))}]
              do_arg_iter: F
              body: 
                (command.DoGroup
                  children: [(C {<echo>} {<-n>} {(DQ (${ Id.VSub_Name joiner) (${ Id.VSub_Name i))})]
                )
            )
          ]
        )
    )
    (command.ShFunction
      name: expand
      body: 
        (command.BraceGroup
          children: [
            (C {<local>} {<Id.Lit_VarLike 'input='> (DQ ($ Id.VSub_Number '$1'))} 
              {<Id.Lit_VarLike 'flags='> (DQ ($ Id.VSub_Number '$2'))} {<Id.Lit_VarLike 'stderr_file='> (DQ ($ Id.VSub_Number '$3'))}
            )
            (command.Pipeline
              children: [
                (command.BraceGroup
                  children: [
                    (C {<echo>} {(DQ ($ Id.VSub_DollarName '$flags'))})
                    (C {<echo>} {(DQ <'source '> ($ Id.VSub_DollarName '$COMPLETION'))})
                    (command.ForEach
                      iter_name: i
                      iter_words: [
                        {
                          (braced_var_sub
                            token: <Id.VSub_Name COMMAND_ALIASES>
                            bracket_op: (bracket_op.WholeArray op_id:Id.Lit_At)
                          )
                        }
                      ]
                      do_arg_iter: F
                      body: 
                        (command.DoGroup
                          children: [
                            (C {<echo>} 
                              {
                                (DQ <'alias '> ($ Id.VSub_DollarName '$i') <'='> 
                                  (word_part.EscapedLiteral
                                    token: <Id.Lit_EscapedChar '\\"'>
                                  ) <'echo '> ($ Id.VSub_DollarName '$i') <"'"> (word_part.EscapedLiteral token:<Id.Lit_EscapedChar '\\"'>)
                                )
                              }
                            )
                          ]
                        )
                    )
                    (C {<echo>} {<-en>} {(DQ ($ Id.VSub_DollarName '$input') <"'">)})
                  ]
                )
                (command.Simple
                  words: [{<bash>} {<--norc>} {<-i>}]
                  redirects: [
                    (redir.Redir
                      op: <Id.Redir_Great '2>'>
                      fd: 2
                      arg_word: {(DQ ($ Id.VSub_DollarName '$stderr_file'))}
                    )
                  ]
                )
                (C {<sed>} {<-e>} 
                  {(SQ <'s/^\\('>) 
                    (DQ 
                      (command_sub
                        left_token: <Id.Left_DollarParen '$('>
                        command_list: 
                          (command.CommandList
                            children: [
                              (C {<array_join>} {(DQ <Id.Lit_Other '\\'> <'|'>)} 
                                {
                                  (braced_var_sub
                                    token: <Id.VSub_Name COMMAND_ALIASES>
                                    bracket_op: (bracket_op.WholeArray op_id:Id.Lit_At)
                                  )
                                }
                              )
                            ]
                          )
                      )
                    ) (SQ <'\\)  /\\1 /'>)
                  }
                )
              ]
              negated: F
            )
          ]
        )
    )
    (command.ShFunction
      name: assert_expansion
      body: 
        (command.BraceGroup
          children: [
            (C {<local>} {<Id.Lit_VarLike 'prefix='> ($ Id.VSub_Number '$1')} 
              {<Id.Lit_VarLike 'expected='> ($ Id.VSub_Number '$2')} 
              {<Id.Lit_VarLike 'flags='> 
                (braced_var_sub
                  token: <Id.VSub_Number 3>
                  suffix_op: (suffix_op.Unary op_id:Id.VTest_ColonHyphen arg_word:{})
                )
              }
            )
            (command.ForEach
              iter_name: i
              iter_words: [
                {
                  (braced_var_sub
                    token: <Id.VSub_Name COMMAND_ALIASES>
                    bracket_op: (bracket_op.WholeArray op_id:Id.Lit_At)
                  )
                }
              ]
              do_arg_iter: F
              body: 
                (command.DoGroup
                  children: [
                    (C {<local>} 
                      {<Id.Lit_VarLike 'nprefix='> 
                        (DQ ($ Id.VSub_DollarName '$i') <' '> ($ Id.VSub_DollarName '$prefix'))
                      }
                    )
                    (C {<local>} 
                      {<Id.Lit_VarLike 'nexpected='> 
                        (DQ ($ Id.VSub_DollarName '$i') <' '> ($ Id.VSub_DollarName '$expected'))
                      }
                    )
                    (C {<assert_equals>} {(DQ ($ Id.VSub_DollarName '$nexpected'))} 
                      {
                        (DQ 
                          (command_sub
                            left_token: <Id.Left_DollarParen '$('>
                            command_list: 
                              (command.CommandList
                                children: [
                                  (C {<expand>} 
                                    {(DQ ($ Id.VSub_DollarName '$nprefix') <Id.Lit_Other '\\'> <t>)} {(DQ ($ Id.VSub_DollarName '$flags'))} {(DQ </dev/null>)}
                                  )
                                ]
                              )
                          )
                        )
                      }
                    )
                  ]
                )
            )
          ]
        )
    )
    (command.ShFunction
      name: assert_expansion_error_not_contains
      body: 
        (command.BraceGroup
          children: [
            (C {<local>} {<Id.Lit_VarLike 'prefix='> ($ Id.VSub_Number '$1')} 
              {<Id.Lit_VarLike 'not_expected='> ($ Id.VSub_Number '$2')} 
              {<Id.Lit_VarLike 'flags='> 
                (braced_var_sub
                  token: <Id.VSub_Number 3>
                  suffix_op: (suffix_op.Unary op_id:Id.VTest_ColonHyphen arg_word:{})
                )
              }
            )
            (C {<local>} 
              {<Id.Lit_VarLike 'temp_file='> 
                (DQ 
                  (command_sub
                    left_token: <Id.Left_DollarParen '$('>
                    command_list: 
                      (command.CommandList
                        children: [
                          (C {<mktemp>} {(DQ (${ Id.VSub_Name TEST_TMPDIR) </tmp.stderr.XXXXXX>)})
                        ]
                      )
                  )
                )
              }
            )
            (command.ForEach
              iter_name: i
              iter_words: [
                {
                  (braced_var_sub
                    token: <Id.VSub_Name COMMAND_ALIASES>
                    bracket_op: (bracket_op.WholeArray op_id:Id.Lit_At)
                  )
                }
              ]
              do_arg_iter: F
              body: 
                (command.DoGroup
                  children: [
                    (C {<local>} {<Id.Lit_VarLike 'nprefix='> (DQ ($ Id.VSub_DollarName '$i') <' '>)})
                    (command.Simple
                      words: [
                        {<expand>}
                        {(DQ ($ Id.VSub_DollarName '$nprefix') <Id.Lit_Other '\\'> <t>)}
                        {(DQ ($ Id.VSub_DollarName '$flags'))}
                        {(DQ ($ Id.VSub_DollarName '$temp_file'))}
                      ]
                      redirects: [(redir.Redir op:<Id.Redir_Great '>'> fd:-1 arg_word:{</dev/null>})]
                    )
                    (C {<assert_not_contains>} {(DQ ($ Id.VSub_DollarName '$not_expected'))} 
                      {(DQ ($ Id.VSub_DollarName '$temp_file'))}
                    )
                  ]
                )
            )
          ]
        )
    )
    (command.ShFunction
      name: make_empty_packages
      body: 
        (command.BraceGroup
          children: [
            (C {<touch>} {<video/streamer2/testing/BUILD>})
            (C {<touch>} 
              {
                (braced_var_sub
                  token: <Id.VSub_Name PACKAGE_PATH_PREFIX>
                  suffix_op: (suffix_op.Unary op_id:Id.VTest_ColonHyphen arg_word:{})
                ) <video/streamer2/stuff/BUILD>
              }
            )
            (C {<touch>} {<video/streamer2/names/BUILD>})
          ]
        )
    )
    (command.ShFunction
      name: make_packages
      body: 
        (command.BraceGroup
          children: [
            (command.AndOr
              ops: [Id.Op_DPipe]
              children: [
                (C {<mkdir>} {<-p>} {<video/streamer2/testing>})
                (C {<fail>} {(DQ <'mkdir failed'>)})
              ]
            )
            (command.Simple
              words: [{<cat>}]
              redirects: [
                (redir.Redir
                  op: <Id.Redir_Great '>'>
                  fd: -1
                  arg_word: {<video/streamer2/BUILD>}
                )
                (redir.HereDoc
                  op: <Id.Redir_DLess '<<'>
                  fd: -1
                  here_begin: {<EOF>}
                  here_end_span_id: 739
                  stdin_parts: [
                    <"cc_library(name='task_lib', ...)\n">
                    <"cc_library(name='token_bucket', ...)\n">
                    <"cc_library(name='with_special+_,=-.@~chars', ...)\n">
                    <"#cc_library(name='comment_build_target_1old', ...)\n">
                    <"#cc_library(name='comment_build_target_2old', ...)\n">
                    <"cc_library(name='comment_build_target_2new', ...)\n">
                    <"#cc_test(name='token_bucket_t_1old', ...)\n">
                    <"#cc_test(name='token_bucket_t_2old', ...)\n">
                    <"cc_test(name='token_bucket_test', ...)\n">
                    <"cc_binary(name='token_bucket_binary', ...)\n">
                    <"java_binary ( name = 'JavaBinary', ...)\n">
                    <'java_binary (\n'>
                    <"  name = 'AnotherJavaBinary'\n">
                    <'  ...\n'>
                    <')\n'>
                    <"cc_binary(other='thing', name='pybin', ...)\n">
                    <"genrule(name='checks/thingy', ...)\n">
                    <"#cc_binary(name='comment_run_target_1old', ...)\n">
                    <"#cc_binary(name='comment_run_target_2old', ...)\n">
                    <"cc_binary(name='comment_run_target_2new', ...)\n">
                  ]
                )
              ]
            )
            (command.AndOr
              ops: [Id.Op_DPipe]
              children: [
                (C {<mkdir>} {<-p>} 
                  {
                    (braced_var_sub
                      token: <Id.VSub_Name PACKAGE_PATH_PREFIX>
                      suffix_op: (suffix_op.Unary op_id:Id.VTest_ColonHyphen arg_word:{})
                    ) <video/streamer2/stuff>
                  }
                )
                (C {<fail>} {(DQ <'mkdir failed'>)})
              ]
            )
            (command.Simple
              words: [{<cat>}]
              redirects: [
                (redir.Redir
                  op: <Id.Redir_Great '>'>
                  fd: -1
                  arg_word: 
                    {
                      (braced_var_sub
                        token: <Id.VSub_Name PACKAGE_PATH_PREFIX>
                        suffix_op: (suffix_op.Unary op_id:Id.VTest_ColonHyphen arg_word:{})
                      ) <video/streamer2/stuff/BUILD>
                    }
                )
                (redir.HereDoc
                  op: <Id.Redir_DLess '<<'>
                  fd: -1
                  here_begin: {<EOF>}
                  here_end_span_id: 775
                  stdin_parts: [<"cc_library(name='stuff', ...)\n">]
                )
              ]
            )
            (command.AndOr
              ops: [Id.Op_DPipe]
              children: [
                (C {<mkdir>} {<-p>} {<video/streamer2/names>})
                (C {<fail>} {(DQ <'mkdir failed'>)})
              ]
            )
            (command.Simple
              words: [{<cat>}]
              redirects: [
                (redir.Redir
                  op: <Id.Redir_Great '>'>
                  fd: -1
                  arg_word: {<video/streamer2/names/BUILD>}
                )
                (redir.HereDoc
                  op: <Id.Redir_DLess '<<'>
                  fd: -1
                  here_begin: {<EOF>}
                  here_end_span_id: 806
                  stdin_parts: [<'genrule(\n'> <"  name = 'foo',\n"> <"  cmd = ('name=foo'),\n"> <')\n'>]
                )
              ]
            )
            (command.AndOr
              ops: [Id.Op_DPipe]
              children: [(C {<mkdir>} {<-p>} {<dash>}) (C {<fail>} {(DQ <'mkdir failed'>)})]
            )
            (command.Simple
              words: [{<cat>}]
              redirects: [
                (redir.Redir op:<Id.Redir_Great '>'> fd:-1 arg_word:{<dash/BUILD>})
                (redir.HereDoc
                  op: <Id.Redir_DLess '<<'>
                  fd: -1
                  here_begin: {<EOF>}
                  here_end_span_id: 840
                  stdin_parts: [
                    <'cc_library(\n'>
                    <'    name = '>
                    <Id.Right_DoubleQuote '"'>
                    <mia-bid-multiplier-mixer-module>
                    <Id.Right_DoubleQuote '"'>
                    <',\n'>
                    <')\n'>
                  ]
                )
              ]
            )
            (C {<mkdir>} {<-p>} {<video/notapackage>})
          ]
        )
    )
    (C {<source>} {(${ Id.VSub_Name COMPLETION)})
    (command.ShFunction
      name: assert_expansion_function
      body: 
        (command.BraceGroup
          children: [
            (C {<local>} {<Id.Lit_VarLike 'ws='> (${ Id.VSub_Name PWD)})
            (C {<local>} {<Id.Lit_VarLike 'function='> (DQ ($ Id.VSub_Number '$1'))} 
              {<Id.Lit_VarLike 'displacement='> (DQ ($ Id.VSub_Number '$2'))} {<Id.Lit_VarLike 'type='> (DQ ($ Id.VSub_Number '$3'))} 
              {<Id.Lit_VarLike 'expected='> (DQ ($ Id.VSub_Number '$4'))} {<Id.Lit_VarLike 'current='> (DQ ($ Id.VSub_Number '$5'))}
            )
            (C {<disable_errexit>})
            (C {<local>} 
              {<Id.Lit_VarLike 'actual_result='> 
                (command_sub
                  left_token: <Id.Left_DollarParen '$('>
                  command_list: 
                    (command.CommandList
                      children: [
                        (C {<eval>} 
                          {
                            (DQ <_bazel__> (${ Id.VSub_Name function) <' '> 
                              (word_part.EscapedLiteral
                                token: <Id.Lit_EscapedChar '\\"'>
                              ) (${ Id.VSub_Name ws) (word_part.EscapedLiteral token:<Id.Lit_EscapedChar '\\"'>) <' '> 
                              (word_part.EscapedLiteral
                                token: <Id.Lit_EscapedChar '\\"'>
                              ) (${ Id.VSub_Name displacement) (word_part.EscapedLiteral token:<Id.Lit_EscapedChar '\\"'>) <' '> 
                              (word_part.EscapedLiteral
                                token: <Id.Lit_EscapedChar '\\"'>
                              ) (${ Id.VSub_Name current) (word_part.EscapedLiteral token:<Id.Lit_EscapedChar '\\"'>) <' '> 
                              (word_part.EscapedLiteral
                                token: <Id.Lit_EscapedChar '\\"'>
                              ) (${ Id.VSub_Name type) (word_part.EscapedLiteral token:<Id.Lit_EscapedChar '\\"'>)
                            )
                          }
                        )
                      ]
                    )
                )
              }
            )
            (C {<enable_errexit>})
            (C {<assert_equals>} 
              {
                (DQ 
                  (command_sub
                    left_token: <Id.Left_DollarParen '$('>
                    command_list: 
                      (command.CommandList
                        children: [(C {<echo>} {<-ne>} {(DQ (${ Id.VSub_Name expected))})]
                      )
                  )
                )
              } {(DQ (${ Id.VSub_Name actual_result))}
            )
          ]
        )
    )
    (command.ShFunction
      name: test_expand_rules_in_package
      body: 
        (command.BraceGroup
          children: [
            (C {<make_packages>})
            (C {<assert_expansion_function>} {(DQ <expand_rules_in_package>)} {(DQ )} {<label>} 
              {(DQ <'stuff '>)} {(DQ <'//video/streamer2/stuff:'>)}
            )
            (C {<assert_expansion_function>} {(DQ <expand_rules_in_package>)} {(DQ )} {<label>} 
              {(SQ <'task_lib '>)} {(SQ <'video/streamer2:ta'>)}
            )
            (C {<assert_expansion_function>} {(DQ <expand_rules_in_package>)} {(DQ )} {<label>} 
              {(SQ <'with_special+_,=-.@~chars '>)} {(SQ <'video/streamer2:with_s'>)}
            )
            (C {<assert_expansion_function>} {(DQ <expand_rules_in_package>)} {(DQ <video/>)} {<label>} 
              {(SQ <'task_lib '>)} {(SQ <'streamer2:ta'>)}
            )
            (C {<assert_expansion_function>} {(DQ <expand_rules_in_package>)} {(DQ <video/>)} {<label>} {(SQ )} 
              {(SQ <'video/streamer2:ta'>)}
            )
            (C {<assert_expansion_function>} {(DQ <expand_rules_in_package>)} {(DQ <video/>)} {<label>} 
              {(SQ <'with_special+_,=-.@~chars '>)} {(SQ <'streamer2:with_s'>)}
            )
            (C {<assert_expansion_function>} {(DQ <expand_rules_in_package>)} {(DQ )} {<label>} 
              {(SQ <'token_bucket_test \\ntoken_bucket_binary '>)} {(SQ <'video/streamer2:token_bucket_'>)}
            )
            (C {<assert_expansion_function>} {(DQ <expand_rules_in_package>)} {(DQ )} {<label>} 
              {(SQ <'stuff '>)} {(SQ <'video/streamer2/stuff:s'>)}
            )
            (C {<assert_expansion_function>} {(DQ <expand_rules_in_package>)} {(DQ )} {<label>} {(SQ )} 
              {(SQ <'video/streamer2:comment_build_target_1o'>)}
            )
            (C {<assert_expansion_function>} {(DQ <expand_rules_in_package>)} {(DQ )} {<label>} 
              {(SQ <'comment_build_target_2new '>)} {(SQ <'video/streamer2:comment_build_target_2'>)}
            )
            (C {<assert_expansion_function>} {(DQ <expand_rules_in_package>)} {(DQ )} {<label-test>} 
              {(SQ <'token_bucket_test '>)} {(SQ <'video/streamer2:to'>)}
            )
            (C {<assert_expansion_function>} {(DQ <expand_rules_in_package>)} {(DQ )} {<label-test>} {(SQ )} 
              {(SQ <'video/streamer2:token_bucket_t_1o'>)}
            )
            (C {<assert_expansion_function>} {(DQ <expand_rules_in_package>)} {(DQ )} {<label-test>} 
              {(SQ <'token_bucket_test '>)} {(SQ <'video/streamer2:token_bucket_t'>)}
            )
            (C {<assert_expansion_function>} {(DQ <expand_rules_in_package>)} {(DQ )} {<label-test>} 
              {(SQ <'token_bucket_test '>)} {(SQ <'video/streamer2:'>)}
            )
            (C {<assert_expansion_function>} {(DQ <expand_rules_in_package>)} {(DQ )} {<label-test>} 
              {(SQ <'all '>)} {(SQ <'video/streamer2:a'>)}
            )
            (C {<assert_expansion_function>} {(DQ <expand_rules_in_package>)} {(DQ )} {<label-bin>} 
              {(SQ <'token_bucket_binary '>)} {(SQ <'video/streamer2:to'>)}
            )
            (command.Simple
              words: [
                {<assert_expansion_function>}
                {(DQ <expand_rules_in_package>)}
                {(DQ )}
                {<label-bin>}
                {(SQ <'token_bucket_test \\ntoken_bucket_binary '>)}
                {(SQ <'video/streamer2:to'>)}
              ]
              more_env: [
                (env_pair
                  name: BAZEL_COMPLETION_ALLOW_TESTS_FOR_RUN
                  val: {<true>}
                  spids: [1400]
                )
              ]
            )
            (command.Simple
              words: [
                {<assert_expansion_function>}
                {(DQ <expand_rules_in_package>)}
                {(DQ )}
                {<label-bin>}
                {(SQ <'token_bucket_test '>)}
                {(SQ <'video/streamer2:token_bucket_t'>)}
              ]
              more_env: [(env_pair name:BAZEL_COMPLETION_ALLOW_TESTS_FOR_RUN val:{<1>} spids:[1436])]
            )
            (command.Simple
              words: [
                {<assert_expansion_function>}
                {(DQ <expand_rules_in_package>)}
                {(DQ )}
                {<label-bin>}
                {(SQ <'token_bucket_binary '>)}
                {(SQ <'video/streamer2:to'>)}
              ]
              more_env: [
                (env_pair
                  name: BAZEL_COMPLETION_ALLOW_TESTS_FOR_RUN
                  val: {<false>}
                  spids: [1472]
                )
              ]
            )
            (C {<assert_expansion_function>} {(DQ <expand_rules_in_package>)} {(DQ )} {<label-bin>} {(SQ )} 
              {(SQ <'video/streamer2:comment_run_target_1o'>)}
            )
            (C {<assert_expansion_function>} {(DQ <expand_rules_in_package>)} {(DQ )} {<label-bin>} 
              {(SQ <'comment_run_target_2new '>)} {(SQ <'video/streamer2:comment_run_target_2'>)}
            )
            (C {<assert_expansion_function>} {(DQ <expand_rules_in_package>)} {(DQ )} {<label-bin>} 
              {(SQ <'JavaBinary '>)} {(SQ <'video/streamer2:J'>)}
            )
            (C {<assert_expansion_function>} {(DQ <expand_rules_in_package>)} {(DQ )} {<label-bin>} 
              {(SQ <'pybin '>)} {(SQ <'video/streamer2:py'>)}
            )
            (C {<assert_expansion_function>} {(DQ <expand_rules_in_package>)} {(DQ )} {<label-bin>} 
              {(SQ <'AnotherJavaBinary '>)} {(SQ <'video/streamer2:A'>)}
            )
            (C {<assert_expansion_function>} {(DQ <expand_rules_in_package>)} {(DQ )} {<label>} 
              {(SQ <'foo '>)} {(SQ <'video/streamer2/names:'>)}
            )
          ]
        )
    )
    (command.ShFunction
      name: test_expand_package_name
      body: 
        (command.BraceGroup
          children: [
            (C {<make_packages>})
            (C {<assert_expansion_function>} {(DQ <expand_package_name>)} {(DQ )} {(DQ )} 
              {(DQ <//video/streamer2/stuff/> <Id.Lit_Other '\\'> <'n//video/streamer2/stuff:'>)} {(DQ <//video/streamer2/stu>)}
            )
            (C {<assert_expansion_function>} {(DQ <expand_package_name>)} {(DQ )} {(DQ )} 
              {(DQ <//video/notapackage/>)} {(DQ <//video/nota>)}
            )
            (C {<assert_expansion_function>} {(DQ <expand_package_name>)} {(DQ )} {(DQ )} 
              {(DQ <video/streamer2/stuff/> <Id.Lit_Other '\\'> <'nvideo/streamer2/stuff:'>)} {(DQ <video/streamer2/stu>)}
            )
            (C {<assert_expansion_function>} {(DQ <expand_package_name>)} {(DQ )} {(DQ )} 
              {(DQ <video/notapackage/>)} {(DQ <video/nota>)}
            )
            (C {<assert_expansion_function>} {(DQ <expand_package_name>)} {(DQ <video/>)} {(DQ )} {(DQ )} 
              {(DQ <video/streamer2/stu>)}
            )
            (C {<assert_expansion_function>} {(DQ <expand_package_name>)} {(DQ <video/>)} {(DQ )} {(DQ )} 
              {(DQ <video/nota>)}
            )
            (C {<assert_expansion_function>} {(DQ <expand_package_name>)} {(DQ <video/>)} {(DQ )} 
              {(DQ <streamer2/stuff/> <Id.Lit_Other '\\'> <'nstreamer2/stuff:'>)} {(DQ <streamer2/stu>)}
            )
            (C {<assert_expansion_function>} {(DQ <expand_package_name>)} {(DQ <video/>)} {(DQ )} 
              {(DQ <notapackage/>)} {(DQ <nota>)}
            )
            (C {<assert_expansion_function>} {(DQ <expand_package_name>)} {(DQ )} {(DQ <label-package>)} 
              {(DQ <//video/streamer2/stuff/> <Id.Lit_Other '\\'> <'n//video/streamer2/stuff '>)} {(DQ <//video/streamer2/stu>)}
            )
            (C {<assert_expansion_function>} {(DQ <expand_package_name>)} {(DQ )} {(DQ <label-package>)} 
              {(DQ <//video/notapackage/>)} {(DQ <//video/nota>)}
            )
          ]
        )
    )
    (command.ShFunction
      name: test_expand_target_pattern
      body: 
        (command.BraceGroup
          children: [
            (C {<make_packages>})
            (C {<assert_expansion_function>} {(DQ <expand_target_pattern>)} {(DQ )} {<label>} 
              {(DQ <'stuff '>)} {(DQ <'//video/streamer2/stuff:'>)}
            )
            (C {<assert_expansion_function>} {(DQ <expand_target_pattern>)} {(DQ )} {<label>} 
              {(DQ <//video/streamer2/stuff/> <Id.Lit_Other '\\'> <'n//video/streamer2/stuff:'>)} {(DQ <//video/streamer2/stu>)}
            )
            (C {<assert_expansion_function>} {(DQ <expand_target_pattern>)} {(DQ )} {<label>} 
              {(DQ <'stuff '>)} {(DQ <'video/streamer2/stuff:'>)}
            )
            (C {<assert_expansion_function>} {(DQ <expand_target_pattern>)} {(DQ )} {<label>} 
              {(DQ <video/streamer2/stuff/> <Id.Lit_Other '\\'> <'nvideo/streamer2/stuff:'>)} {(DQ <video/streamer2/stu>)}
            )
            (C {<assert_expansion_function>} {(DQ <expand_target_pattern>)} {(DQ <video/>)} {<label>} 
              {(DQ <'stuff '>)} {(DQ <'streamer2/stuff:'>)}
            )
            (C {<assert_expansion_function>} {(DQ <expand_target_pattern>)} {(DQ <video/>)} {<label>} 
              {(DQ <streamer2/stuff/> <Id.Lit_Other '\\'> <'nstreamer2/stuff:'>)} {(DQ <streamer2/stu>)}
            )
            (C {<assert_expansion_function>} {(DQ <expand_target_pattern>)} {(DQ <video/>)} {<label>} 
              {(DQ <'stuff '>)} {(DQ <'//video/streamer2/stuff:'>)}
            )
            (C {<assert_expansion_function>} {(DQ <expand_target_pattern>)} {(DQ <video/>)} {<label>} 
              {(DQ <//video/streamer2/stuff/> <Id.Lit_Other '\\'> <'n//video/streamer2/stuff:'>)} {(DQ <//video/streamer2/stu>)}
            )
            (C {<assert_expansion_function>} {(DQ <expand_target_pattern>)} {(DQ <video/>)} {<label>} {(DQ )} 
              {(DQ <'video/streamer2/stuff:'>)}
            )
            (C {<assert_expansion_function>} {(DQ <expand_target_pattern>)} {(DQ <video/>)} {<label>} {(DQ )} 
              {(DQ <video/streamer2/stu>)}
            )
          ]
        )
    )
    (command.ShFunction
      name: test_complete_pattern
      body: 
        (command.BraceGroup
          children: [
            (C {<make_packages>})
            (C {<assert_expansion_function>} {(DQ <complete_pattern>)} {(DQ )} {<label>} {(DQ <'stuff '>)} 
              {(DQ <'//video/streamer2/stuff:'>)}
            )
            (C {<assert_expansion_function>} {(DQ <complete_pattern>)} {(DQ )} {<label>} 
              {(DQ <//video/streamer2/stuff/> <Id.Lit_Other '\\'> <'n//video/streamer2/stuff:'>)} {(DQ <//video/streamer2/stu>)}
            )
            (C {<assert_expansion_function>} {(DQ <complete_pattern>)} {(DQ )} {<label-package>} 
              {(DQ <//video/streamer2/stuff/> <Id.Lit_Other '\\'> <'n//video/streamer2/stuff '>)} {(DQ <//video/streamer2/stu>)}
            )
            (C {<assert_expansion_function>} {(DQ <complete_pattern>)} {(DQ )} {<command>} 
              {(DQ <'clean '>)} {(DQ <clea>)}
            )
            (C {<assert_expansion_function>} {(DQ <complete_pattern>)} {(DQ )} {<info-key>} 
              {(DQ <'install_base '>)} {(DQ <install_b>)}
            )
            (C {<assert_expansion_function>} {(DQ <complete_pattern>)} {(DQ )} {(SQ <'{clean,add}'>)} 
              {(DQ <'clean '>)} {(DQ <clea>)}
            )
            (C {<assert_expansion_function>} {(DQ <complete_pattern>)} {(DQ )} 
              {(SQ <'command|{abc,def}'>)} {(DQ <'abc '>)} {(DQ <ab>)}
            )
            (C {<assert_expansion_function>} {(DQ <complete_pattern>)} {(DQ )} 
              {(SQ <'command|{abc,def}'>)} {(DQ <'clean '>)} {(DQ <clea>)}
            )
            (C {<assert_expansion_function>} {(DQ <complete_pattern>)} {(DQ )} {<label>} {(DQ <'stuff '>)} 
              {(DQ <'//video/streamer2/stuff:'>)}
            )
            (C {<assert_expansion_function>} {(DQ <complete_pattern>)} {(DQ )} {<label>} 
              {(SQ <'task_lib '>)} {(SQ <'video/streamer2:ta'>)}
            )
            (C {<assert_expansion_function>} {(DQ <complete_pattern>)} {(DQ )} {<label>} 
              {(SQ <'with_special+_,=-.@~chars '>)} {(SQ <'video/streamer2:with_s'>)}
            )
            (C {<assert_expansion_function>} {(DQ <complete_pattern>)} {(DQ <video/>)} {<label>} 
              {(DQ <'stuff '>)} {(DQ <'//video/streamer2/stuff:'>)}
            )
            (C {<assert_expansion_function>} {(DQ <complete_pattern>)} {(DQ <video/>)} {<label>} 
              {(SQ <'task_lib '>)} {(SQ <'streamer2:ta'>)}
            )
            (C {<assert_expansion_function>} {(DQ <complete_pattern>)} {(DQ <video/>)} {<label>} {(SQ )} 
              {(SQ <'video/streamer2:ta'>)}
            )
            (C {<assert_expansion_function>} {(DQ <complete_pattern>)} {(DQ <video/>)} {<label>} 
              {(SQ <'with_special+_,=-.@~chars '>)} {(SQ <'streamer2:with_s'>)}
            )
          ]
        )
    )
    (command.ShFunction
      name: test_basic_subcommand_expansion
      body: 
        (command.BraceGroup
          children: [
            (C {<assert_expansion>} {(SQ <bui>)} {(SQ <'build '>)})
            (C {<assert_expansion>} {(SQ <hel>)} {(SQ <'help '>)})
            (C {<assert_expansion>} {(SQ <shut>)} {(SQ <'shutdown '>)})
          ]
        )
    )
    (command.ShFunction
      name: test_common_options
      body: 
        (command.BraceGroup
          children: [
            (C {<assert_expansion>} {(SQ <--h>)} {(SQ <--host_jvm_>)})
            (C {<assert_expansion>} {(SQ <--host_jvm_a>)} {(SQ <'--host_jvm_args='>)})
          ]
        )
    )
    (command.ShFunction
      name: test_build_options
      body: 
        (command.BraceGroup
          children: [
            (C {<assert_expansion>} {(SQ <'build --keep_g'>)} {(SQ <'build --keep_going '>)})
            (C {<assert_expansion>} {(SQ <'build --expe'>)} {(SQ <'build --experimental_'>)})
            (C {<assert_expansion>} {(SQ <'help --cros'>)} {(SQ <'help --cros'>)})
            (C {<assert_expansion>} {(SQ <'build --test_stra'>)} {(SQ <'build --test_strategy='>)})
          ]
        )
    )
    (command.ShFunction
      name: test_query_options
      body: 
        (command.BraceGroup
          children: [
            (C {<assert_expansion>} {(SQ <'query --out'>)} {(SQ <'query --output='>)})
            (C {<make_packages>})
            (C {<assert_expansion>} {(SQ <'query video/streamer2:ta'>)} 
              {(SQ <'query video/streamer2:task_lib '>)}
            )
            (C {<assert_expansion>} {(SQ <'query //video/streamer2:ta'>)} 
              {(SQ <'query //video/streamer2:task_lib '>)}
            )
          ]
        )
    )
    (command.ShFunction
      name: test_run_options
      body: 
        (command.BraceGroup
          children: [
            (C {<assert_expansion>} {(SQ <'run --keep_g'>)} {(SQ <'run --keep_going '>)})
            (C {<assert_expansion>} {(SQ <'run --expe'>)} {(SQ <'run --experimental_'>)})
          ]
        )
    )
    (command.ShFunction
      name: test_tristate_option
      body: 
        (command.BraceGroup
          children: [
            (C {<assert_expansion>} {(SQ <'build --nocache_test_result'>)} 
              {(SQ <'build --nocache_test_results '>)}
            )
          ]
        )
    )
    (command.ShFunction
      name: make_dirs
      body: 
        (command.BraceGroup
          children: [
            (command.AndOr
              ops: [Id.Op_DPipe]
              children: [
                (C {<mkdir>} {<-p>} {<video/streamer2/testing>})
                (C {<fail>} {(DQ <'mkdir failed'>)})
              ]
            )
            (command.AndOr
              ops: [Id.Op_DPipe]
              children: [
                (C {<mkdir>} {<-p>} 
                  {
                    (braced_var_sub
                      token: <Id.VSub_Name PACKAGE_PATH_PREFIX>
                      suffix_op: (suffix_op.Unary op_id:Id.VTest_ColonHyphen arg_word:{})
                    ) <video/streamer2/stuff>
                  }
                )
                (C {<fail>} {(DQ <'mkdir failed'>)})
              ]
            )
            (command.AndOr
              ops: [Id.Op_DPipe]
              children: [
                (C {<mkdir>} {<-p>} {<video/streamer2/names>})
                (C {<fail>} {(DQ <'mkdir failed'>)})
              ]
            )
          ]
        )
    )
    (command.ShFunction
      name: test_directory_expansion
      body: 
        (command.BraceGroup
          children: [
            (C {<make_dirs>})
            (C {<assert_expansion>} {(SQ <'build vide'>)} {(SQ <'build video/'>)})
            (C {<assert_expansion>} {(SQ <'build video/'>)} {(SQ <'build video/streamer2/'>)})
            (C {<assert_expansion>} {(SQ <'build video/streamer2/t'>)} 
              {(SQ <'build video/streamer2/testing/'>)}
            )
            (C {<assert_expansion>} {(SQ <'build video/streamer2/s'>)} 
              {(SQ <'build video/streamer2/stuff/'>)}
            )
            (C {<make_empty_packages>})
            (C {<assert_expansion>} {(SQ <'build video/streamer2/t'>)} 
              {(SQ <'build video/streamer2/testing'>)}
            )
            (C {<assert_expansion>} {(SQ <'build video/streamer2/s'>)} 
              {(SQ <'build video/streamer2/stuff'>)}
            )
            (C {<assert_expansion>} {(SQ <'build //vide'>)} {(SQ <'build //video/'>)})
            (C {<assert_expansion>} {(SQ <'build //video/'>)} {(SQ <'build //video/streamer2/'>)})
            (C {<assert_expansion>} {(SQ <'build //video/streamer2/t'>)} 
              {(SQ <'build //video/streamer2/testing'>)}
            )
            (C {<assert_expansion>} {(SQ <'build //video/streamer2/s'>)} 
              {(SQ <'build //video/streamer2/stuff'>)}
            )
          ]
        )
    )
    (command.ShFunction
      name: test_directory_expansion_in_subdir
      body: 
        (command.BraceGroup
          children: [
            (C {<make_dirs>})
            (command.AndOr
              ops: [Id.Op_DPipe]
              children: [
                (command.Simple
                  words: [{<cd>} {<video>}]
                  redirects: [(redir.Redir op:<Id.Redir_Great '2>'> fd:2 arg_word:{</dev/null>})]
                )
                (command.ControlFlow token:<Id.ControlFlow_Exit exit>)
              ]
            )
            (C {<assert_expansion>} {(SQ <'build vide'>)} {(SQ <'build vide'>)})
            (C {<assert_expansion>} {(SQ <'build video/'>)} {(SQ <'build video/'>)})
            (C {<assert_expansion>} {(SQ <'build video/streamer2/t'>)} {(SQ <'build video/streamer2/t'>)})
            (C {<assert_expansion>} {(SQ <'build video/streamer2/s'>)} {(SQ <'build video/streamer2/s'>)})
            (C {<assert_expansion>} {(SQ <'build //vide'>)} {(SQ <'build //video/'>)})
            (C {<assert_expansion>} {(SQ <'build //video/'>)} {(SQ <'build //video/streamer2/'>)})
            (C {<assert_expansion>} {(SQ <'build //video/streamer2/t'>)} 
              {(SQ <'build //video/streamer2/testing/'>)}
            )
            (C {<assert_expansion>} {(SQ <'build //video/streamer2/s'>)} 
              {(SQ <'build //video/streamer2/stuff/'>)}
            )
            (C {<assert_expansion>} {(SQ <'build streamer2/t'>)} {(SQ <'build streamer2/testing/'>)})
            (C {<assert_expansion>} {(SQ <'build streamer2/s'>)} {(SQ <'build streamer2/stuff/'>)})
          ]
        )
    )
    (command.ShFunction
      name: test_target_expansion
      body: 
        (command.BraceGroup
          children: [
            (C {<make_packages>})
            (C {<assert_expansion>} {(SQ <'build video/streamer2:ta'>)} 
              {(SQ <'build video/streamer2:task_lib '>)}
            )
            (C {<assert_expansion>} {(SQ <'build video/streamer2:with_s'>)} 
              {(SQ <'build video/streamer2:with_special+_,=-.@~chars '>)}
            )
            (C {<assert_expansion>} {(SQ <'build video/streamer2:to'>)} 
              {(SQ <'build video/streamer2:token_bucket'>)}
            )
            (C {<assert_expansion>} {(SQ <'build video/streamer2/s'>)} 
              {(SQ <'build video/streamer2/stuff'>)}
            )
            (C {<assert_expansion>} {(SQ <'build video/streamer2/stuff:s'>)} 
              {(SQ <'build video/streamer2/stuff:stuff '>)}
            )
            (C {<assert_expansion>} {(SQ <'build video/streamer2:comment_build_target_1o'>)} 
              {(SQ <'build video/streamer2:comment_build_target_1o'>)}
            )
            (C {<assert_expansion>} {(SQ <'build video/streamer2:comment_build_target_2'>)} 
              {(SQ <'build video/streamer2:comment_build_target_2new '>)}
            )
            (C {<assert_expansion>} {(SQ <'test video/streamer2:to'>)} 
              {(SQ <'test video/streamer2:token_bucket_test '>)}
            )
            (C {<assert_expansion>} {(SQ <'test video/streamer2:token_bucket_t_1o'>)} 
              {(SQ <'test video/streamer2:token_bucket_t_1o'>)}
            )
            (C {<assert_expansion>} {(SQ <'test video/streamer2:token_bucket_t'>)} 
              {(SQ <'test video/streamer2:token_bucket_test '>)}
            )
            (C {<assert_expansion_error_not_contains>} {(SQ <'test video/streamer2:match'>)} 
              {(SQ <'syntax error'>)}
            )
            (C {<assert_expansion>} {(SQ <'test video/streamer2:'>)} 
              {(SQ <'test video/streamer2:token_bucket_test '>)}
            )
            (C {<assert_expansion>} {(SQ <'build video/streamer2:a'>)} 
              {(SQ <'build video/streamer2:all '>)}
            )
            (C {<assert_expansion>} {(SQ <'run video/streamer2:to'>)} 
              {(SQ <'run video/streamer2:token_bucket_binary '>)}
            )
            (C {<assert_expansion>} {(SQ <'run video/streamer2:to'>)} 
              {(SQ <'run video/streamer2:token_bucket_'>)} {(SQ <'BAZEL_COMPLETION_ALLOW_TESTS_FOR_RUN=true'>)}
            )
            (C {<assert_expansion>} {(SQ <'run video/streamer2:token_bucket_t'>)} 
              {(SQ <'run video/streamer2:token_bucket_test '>)} {(SQ <'BAZEL_COMPLETION_ALLOW_TESTS_FOR_RUN=1'>)}
            )
            (C {<assert_expansion>} {(SQ <'run video/streamer2:to'>)} 
              {(SQ <'run video/streamer2:token_bucket_binary '>)} {(SQ <'BAZEL_COMPLETION_ALLOW_TESTS_FOR_RUN=false'>)}
            )
            (C {<assert_expansion>} {(SQ <'run video/streamer2:to'>)} 
              {(SQ <'run video/streamer2:token_bucket_binary '>)} {(SQ <'BAZEL_COMPLETION_ALLOW_TESTS_FOR_RUN=0'>)}
            )
            (C {<assert_expansion>} {(SQ <'run video/streamer2:to'>)} 
              {(SQ <'run video/streamer2:token_bucket_binary '>)} {(SQ <'BAZEL_COMPLETION_ALLOW_TESTS_FOR_RUN=junk'>)}
            )
            (C {<assert_expansion>} {(SQ <'run video/streamer2:to'>)} 
              {(SQ <'run video/streamer2:token_bucket_binary '>)} {(SQ <'BAZEL_COMPLETION_ALLOW_TESTS_FOR_RUN='>)}
            )
            (C {<assert_expansion>} {(SQ <'run video/streamer2:comment_run_target_1o'>)} 
              {(SQ <'run video/streamer2:comment_run_target_1o'>)}
            )
            (C {<assert_expansion>} {(SQ <'run video/streamer2:comment_run_target_2'>)} 
              {(SQ <'run video/streamer2:comment_run_target_2new '>)}
            )
            (C {<assert_expansion>} {(SQ <'run video/streamer2:J'>)} 
              {(SQ <'run video/streamer2:JavaBinary '>)}
            )
            (C {<assert_expansion>} {(SQ <'run video/streamer2:py'>)} 
              {(SQ <'run video/streamer2:pybin '>)}
            )
            (C {<assert_expansion>} {(SQ <'run video/streamer2:A'>)} 
              {(SQ <'run video/streamer2:AnotherJavaBinary '>)}
            )
            (C {<assert_expansion>} {(SQ <'build video/streamer2/names:'>)} 
              {(SQ <'build video/streamer2/names:foo '>)}
            )
            (command.Simple
              words: [
                {<assert_expansion>}
                {(SQ <'build dash:m'>)}
                {(SQ <'build dash:mia-bid-multiplier-mixer-module '>)}
              ]
              more_env: [(env_pair name:LC_ALL val:{<en_US.UTF-8>} spids:[3814])]
            )
          ]
        )
    )
    (command.ShFunction
      name: test_target_expansion_in_subdir
      body: 
        (command.BraceGroup
          children: [
            (C {<make_packages>})
            (command.Simple
              words: [{<cd>} {<video>}]
              redirects: [(redir.Redir op:<Id.Redir_Great '2>'> fd:2 arg_word:{</dev/null>})]
            )
            (C {<assert_expansion>} {(SQ <'build streamer2:ta'>)} {(SQ <'build streamer2:task_lib '>)})
            (C {<assert_expansion>} {(SQ <'build streamer2:to'>)} {(SQ <'build streamer2:token_bucket'>)})
            (C {<assert_expansion>} {(SQ <'build streamer2/s'>)} {(SQ <'build streamer2/stuff'>)})
            (C {<assert_expansion>} {(SQ <'build streamer2/stuff:s'>)} 
              {(SQ <'build streamer2/stuff:stuff '>)}
            )
            (C {<assert_expansion>} {(SQ <'build video/streamer2:ta'>)} 
              {(SQ <'build video/streamer2:ta'>)}
            )
            (C {<assert_expansion>} {(SQ <'build //video/streamer2:ta'>)} 
              {(SQ <'build //video/streamer2:task_lib '>)}
            )
          ]
        )
    )
    (command.ShFunction
      name: test_target_expansion_in_package
      body: 
        (command.BraceGroup
          children: [
            (C {<make_packages>})
            (command.Simple
              words: [{<cd>} {<video/streamer2>}]
              redirects: [(redir.Redir op:<Id.Redir_Great '2>'> fd:2 arg_word:{</dev/null>})]
            )
            (C {<assert_expansion>} {(SQ <'build :ta'>)} {(SQ <'build :task_lib '>)})
            (C {<assert_expansion>} {(SQ <'build :to'>)} {(SQ <'build :token_bucket'>)})
            (C {<assert_expansion>} {(SQ <'build :checks/th'>)} {(SQ <'build :checks/thingy '>)})
            (C {<assert_expansion>} {(SQ <'build s'>)} {(SQ <'build stuff'>)})
            (C {<assert_expansion>} {(SQ <'build :s'>)} {(SQ <'build :s'>)})
          ]
        )
    )
    (command.ShFunction
      name: test_help
      body: 
        (command.BraceGroup
          children: [
            (C {<assert_expansion>} {(SQ <'help qu'>)} {(SQ <'help query '>)})
            (C {<assert_expansion>} {(SQ <'help bui'>)} {(SQ <'help build '>)})
            (C {<assert_expansion>} {(SQ <'help shut'>)} {(SQ <'help shutdown '>)})
            (C {<assert_expansion>} {(SQ <'help start'>)} {(SQ <'help startup_options '>)})
          ]
        )
    )
    (command.ShFunction
      name: test_info
      body: 
        (command.BraceGroup
          children: [
            (C {<assert_expansion>} {(SQ <'info commi'>)} {(SQ <'info committed-heap-size '>)})
            (C {<assert_expansion>} {(SQ <'info i'>)} {(SQ <'info install_base '>)})
            (C {<assert_expansion>} {(SQ <'info --show_m'>)} {(SQ <'info --show_make_env '>)})
          ]
        )
    )
    (C {<run_suite>} {(DQ <"Tests of bash completion of 'blaze' command.">)})
  ]
)