(command.CommandList
  children: [
    (C {(.)} 
      {
        (command_sub
          left_token: (Token id:Id.Left_DollarParen val:'$(' span_id:9)
          command_list: 
            (command.CommandList
              children: [(C {(dirname)} {($ Id.VSub_DollarName '$BATS_TEST_DIRNAME')})]
            )
        ) (/lib/utils.sh)
      }
    )
    (command.ShFunction
      name: setup_asdf_dir
      body: 
        (command.BraceGroup
          children: [
            (command.ShAssignment
              pairs: [
                (assign_pair
                  lhs: (sh_lhs_expr.Name name:BASE_DIR)
                  op: assign_op.Equal
                  rhs: 
                    {
                      (command_sub
                        left_token: (Token id:Id.Left_DollarParen val:'$(' span_id:25)
                        command_list: 
                          (command.CommandList
                            children: [(C {(mktemp)} {(-dt)} {(asdf.XXXX)})]
                          )
                      )
                    }
                  spids: [24]
                )
              ]
            )
            (command.ShAssignment
              pairs: [
                (assign_pair
                  lhs: (sh_lhs_expr.Name name:HOME)
                  op: assign_op.Equal
                  rhs: {($ Id.VSub_DollarName '$BASE_DIR') (/home)}
                  spids: [34]
                )
              ]
            )
            (command.ShAssignment
              pairs: [
                (assign_pair
                  lhs: (sh_lhs_expr.Name name:ASDF_DIR)
                  op: assign_op.Equal
                  rhs: {($ Id.VSub_DollarName '$HOME') (/.asdf)}
                  spids: [39]
                )
              ]
            )
            (C {(mkdir)} {(-p)} {(DQ ($ Id.VSub_DollarName '$ASDF_DIR') (/plugins))})
            (C {(mkdir)} {(-p)} {(DQ ($ Id.VSub_DollarName '$ASDF_DIR') (/installs))})
            (C {(mkdir)} {(-p)} {(DQ ($ Id.VSub_DollarName '$ASDF_DIR') (/shims))})
            (C {(mkdir)} {(-p)} {(DQ ($ Id.VSub_DollarName '$ASDF_DIR') (/tmp))})
            (command.ShAssignment
              pairs: [
                (assign_pair
                  lhs: (sh_lhs_expr.Name name:PATH)
                  op: assign_op.Equal
                  rhs: 
                    {($ Id.VSub_DollarName '$ASDF_DIR') (/shims) (Id.Lit_Other ':') 
                      ($ Id.VSub_DollarName '$PATH')
                    }
                  spids: [84]
                )
              ]
            )
          ]
        )
    )
    (command.ShFunction
      name: install_mock_plugin
      body: 
        (command.BraceGroup
          children: [
            (C {(local)} {(Id.Lit_VarLike 'plugin_name=') ($ Id.VSub_Number '$1')})
            (C {(cp)} {(-r)} {(DQ ($ Id.VSub_DollarName '$BATS_TEST_DIRNAME') (/fixtures/dummy_plugin))} 
              {
                (DQ ($ Id.VSub_DollarName '$ASDF_DIR') (/plugins/) 
                  ($ Id.VSub_DollarName '$plugin_name')
                )
              }
            )
          ]
        )
    )
    (command.ShFunction
      name: install_mock_plugin_version
      body: 
        (command.BraceGroup
          children: [
            (C {(local)} {(Id.Lit_VarLike 'plugin_name=') ($ Id.VSub_Number '$1')})
            (C {(local)} {(Id.Lit_VarLike 'plugin_version=') ($ Id.VSub_Number '$2')})
            (C {(mkdir)} {(-p)} 
              {
                (DQ ($ Id.VSub_DollarName '$ASDF_DIR') (/installs/) 
                  ($ Id.VSub_DollarName '$plugin_name') (/) ($ Id.VSub_DollarName '$plugin_version')
                )
              }
            )
          ]
        )
    )
    (command.ShFunction
      name: install_dummy_plugin
      body: (command.BraceGroup children:[(C {(install_mock_plugin)} {(DQ (dummy))})])
    )
    (command.ShFunction
      name: install_dummy_version
      body: 
        (command.BraceGroup
          children: [(C {(install_mock_plugin_version)} {(DQ (dummy))} {(DQ ($ Id.VSub_Number '$1'))})]
        )
    )
    (command.ShFunction
      name: clean_asdf_dir
      body: 
        (command.BraceGroup
          children: [
            (C {(rm)} {(-rf)} {(DQ ($ Id.VSub_DollarName '$BASE_DIR'))})
            (C {(unset)} {(ASDF_DIR)})
          ]
        )
    )
    (command.ShFunction
      name: setup_repo
      body: 
        (command.BraceGroup
          children: [
            (C {(cp)} {(-r)} 
              {(DQ ($ Id.VSub_DollarName '$BATS_TEST_DIRNAME') (/fixtures/dummy_plugins_repo))} {(DQ ($ Id.VSub_DollarName '$ASDF_DIR') (/repository))}
            )
            (C {(touch)} 
              {
                (DQ 
                  (command_sub
                    left_token: (Token id:Id.Left_DollarParen val:'$(' span_id:242)
                    command_list: (command.CommandList children:[(C {(asdf_dir)})])
                  ) (/tmp/repo-updated)
                )
              }
            )
          ]
        )
    )
  ]
)