(command.CommandList children: [ (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:test_description) op: assign_op.Equal rhs: { (SQ (Token id:Id.Lit_Chars val:'external credential helper tests\n' span_id:6) (Token id:Id.Lit_Chars val:'\n' span_id:7) (Token id: Id.Lit_Chars val: 'This is a tool for authors of external helper tools to sanity-check\n' span_id: 8 ) (Token id: Id.Lit_Chars val: 'their helpers. If you have written the "git-credential-foo" helper,\n' span_id: 9 ) (Token id:Id.Lit_Chars val:'you check it with:\n' span_id:10) (Token id:Id.Lit_Chars val:'\n' span_id:11) (Token id: Id.Lit_Chars val: ' make GIT_TEST_CREDENTIAL_HELPER=foo t0303-credential-external.sh\n' span_id: 12 ) (Token id:Id.Lit_Chars val:'\n' span_id:13) (Token id: Id.Lit_Chars val: 'This assumes that your helper is capable of both storing and\n' span_id: 14 ) (Token id: Id.Lit_Chars val: 'retrieving credentials (some helpers may be read-only, and they will\n' span_id: 15 ) (Token id:Id.Lit_Chars val:'fail these tests).\n' span_id:16) (Token id:Id.Lit_Chars val:'\n' span_id:17) (Token id: Id.Lit_Chars val: 'Please note that the individual tests do not verify all of the\n' span_id: 18 ) (Token id: Id.Lit_Chars val: 'preconditions themselves, but rather build on each other. A failing\n' span_id: 19 ) (Token id: Id.Lit_Chars val: 'test means that tests later in the sequence can return false "OK"\n' span_id: 20 ) (Token id:Id.Lit_Chars val:'results.\n' span_id:21) (Token id:Id.Lit_Chars val:'\n' span_id:22) (Token id: Id.Lit_Chars val: 'If your helper supports time-based expiration with a configurable\n' span_id: 23 ) (Token id:Id.Lit_Chars val:'timeout, you can test that feature with:\n' span_id:24) (Token id:Id.Lit_Chars val:'\n' span_id:25) (Token id:Id.Lit_Chars val:' make GIT_TEST_CREDENTIAL_HELPER=foo \\\n' span_id:26) (Token id: Id.Lit_Chars val: ' GIT_TEST_CREDENTIAL_HELPER_TIMEOUT="foo --timeout=1" \\\n' span_id: 27 ) (Token id:Id.Lit_Chars val:' t0303-credential-external.sh\n' span_id:28) (Token id:Id.Lit_Chars val:'\n' span_id:29) (Token id: Id.Lit_Chars val: 'If your helper requires additional setup before the tests are started,\n' span_id: 30 ) (Token id: Id.Lit_Chars val: 'you can set GIT_TEST_CREDENTIAL_HELPER_SETUP to a sequence of shell\n' span_id: 31 ) (Token id:Id.Lit_Chars val:'commands.\n' span_id:32) ) } spids: [4] ) ] ) (C {(.)} {(./test-lib.sh)}) (C {(.)} {(DQ ($ Id.VSub_DollarName '$TEST_DIRECTORY')) (/lib-credential.sh)}) (command.If arms: [ (if_arm cond: [ (command.Sentence child: (C {(test)} {(-z)} {(DQ ($ Id.VSub_DollarName '$GIT_TEST_CREDENTIAL_HELPER'))}) terminator: (Token id:Id.Op_Semi val:';' span_id:57) ) ] action: [ (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:skip_all) op: assign_op.Equal rhs: {(DQ ('used to test external credential helpers'))} spids: [62] ) ] ) (C {(test_done)}) ] spids: [48 59] ) ] ) (command.AndOr ops: [Id.Op_DPipe] children: [ (C {(test)} {(-z)} {(DQ ($ Id.VSub_DollarName '$GIT_TEST_CREDENTIAL_HELPER_SETUP'))}) (C {(eval)} {(DQ ($ Id.VSub_DollarName '$GIT_TEST_CREDENTIAL_HELPER_SETUP'))}) ] ) (C {(helper_test_clean)} {(DQ ($ Id.VSub_DollarName '$GIT_TEST_CREDENTIAL_HELPER'))}) (C {(helper_test)} {(DQ ($ Id.VSub_DollarName '$GIT_TEST_CREDENTIAL_HELPER'))}) (command.If arms: [ (if_arm cond: [ (command.Sentence child: (C {(test)} {(-z)} {(DQ ($ Id.VSub_DollarName '$GIT_TEST_CREDENTIAL_HELPER_TIMEOUT'))}) terminator: (Token id:Id.Op_Semi val:';' span_id:120) ) ] action: [ (C {(say)} {(DQ ('# skipping timeout tests (GIT_TEST_CREDENTIAL_HELPER_TIMEOUT not set)'))}) ] spids: [111 122] ) ] else_action: [ (C {(helper_test_timeout)} {(DQ ($ Id.VSub_DollarName '$GIT_TEST_CREDENTIAL_HELPER_TIMEOUT'))}) ] ) (C {(helper_test_clean)} {(DQ ($ Id.VSub_DollarName '$GIT_TEST_CREDENTIAL_HELPER'))}) (C {(test_done)}) ] )