(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:'credential-store tests' span_id:6))} spids: [4] ) ] ) (C {(.)} {(./test-lib.sh)}) (C {(.)} {(DQ ($ Id.VSub_DollarName '$TEST_DIRECTORY')) (/lib-credential.sh)}) (C {(helper_test)} {(store)}) (C {(test_expect_success)} { (SQ (Token id: Id.Lit_Chars val: 'when xdg file does not exist, xdg file not created' span_id: 29 ) ) } { (SQ (Token id:Id.Lit_Chars val:'\n' span_id:33) (Token id: Id.Lit_Chars val: '\ttest_path_is_missing "$HOME/.config/git/credentials" &&\n' span_id: 34 ) (Token id:Id.Lit_Chars val:'\ttest -s "$HOME/.git-credentials"\n' span_id:35) ) } ) (C {(test_expect_success)} {(SQ (Token id:Id.Lit_Chars val:'setup xdg file' span_id:42))} { (SQ (Token id:Id.Lit_Chars val:'\n' span_id:46) (Token id:Id.Lit_Chars val:'\trm -f "$HOME/.git-credentials" &&\n' span_id:47) (Token id:Id.Lit_Chars val:'\tmkdir -p "$HOME/.config/git" &&\n' span_id:48) (Token id:Id.Lit_Chars val:'\t>"$HOME/.config/git/credentials"\n' span_id:49) ) } ) (C {(helper_test)} {(store)}) (C {(test_expect_success)} {(SQ (Token id:Id.Lit_Chars val:'when xdg file exists, home file not created' span_id:61))} { (SQ (Token id:Id.Lit_Chars val:'\n' span_id:65) (Token id: Id.Lit_Chars val: '\ttest -s "$HOME/.config/git/credentials" &&\n' span_id: 66 ) (Token id:Id.Lit_Chars val:'\ttest_path_is_missing "$HOME/.git-credentials"\n' span_id:67) ) } ) (C {(test_expect_success)} {(SQ (Token id:Id.Lit_Chars val:'setup custom xdg file' span_id:74))} { (SQ (Token id:Id.Lit_Chars val:'\n' span_id:78) (Token id:Id.Lit_Chars val:'\trm -f "$HOME/.git-credentials" &&\n' span_id:79) (Token id:Id.Lit_Chars val:'\trm -f "$HOME/.config/git/credentials" &&\n' span_id:80) (Token id:Id.Lit_Chars val:'\tmkdir -p "$HOME/xdg/git" &&\n' span_id:81) (Token id:Id.Lit_Chars val:'\t>"$HOME/xdg/git/credentials"\n' span_id:82) ) } ) (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:XDG_CONFIG_HOME) op: assign_op.Equal rhs: {(DQ ($ Id.VSub_DollarName '$HOME') (/xdg))} spids: [86] ) ] ) (C {(export)} {(XDG_CONFIG_HOME)}) (C {(helper_test)} {(store)}) (C {(unset)} {(XDG_CONFIG_HOME)}) (C {(test_expect_success)} { (SQ (Token id: Id.Lit_Chars val: 'if custom xdg file exists, home and xdg files not created' span_id: 108 ) ) } { (SQ (Token id:Id.Lit_Chars val:'\n' span_id:112) (Token id: Id.Lit_Chars val: '\ttest_when_finished "rm -f $HOME/xdg/git/credentials" &&\n' span_id: 113 ) (Token id:Id.Lit_Chars val:'\ttest -s "$HOME/xdg/git/credentials" &&\n' span_id:114) (Token id: Id.Lit_Chars val: '\ttest_path_is_missing "$HOME/.git-credentials" &&\n' span_id: 115 ) (Token id:Id.Lit_Chars val:'\ttest_path_is_missing "$HOME/.config/git/credentials"\n' span_id:116) ) } ) (C {(test_expect_success)} { (SQ (Token id: Id.Lit_Chars val: 'get: use home file if both home and xdg files have matches' span_id: 123 ) ) } { (SQ (Token id:Id.Lit_Chars val:'\n' span_id:127) (Token id: Id.Lit_Chars val: '\techo "https://home-user:home-pass@example.com" >"$HOME/.git-credentials" &&\n' span_id: 128 ) (Token id:Id.Lit_Chars val:'\tmkdir -p "$HOME/.config/git" &&\n' span_id:129) (Token id: Id.Lit_Chars val: '\techo "https://xdg-user:xdg-pass@example.com" >"$HOME/.config/git/credentials" &&\n' span_id: 130 ) (Token id:Id.Lit_Chars val:'\tcheck fill store <<-\\EOF\n' span_id:131) (Token id:Id.Lit_Chars val:'\tprotocol=https\n' span_id:132) (Token id:Id.Lit_Chars val:'\thost=example.com\n' span_id:133) (Token id:Id.Lit_Chars val:'\t--\n' span_id:134) (Token id:Id.Lit_Chars val:'\tprotocol=https\n' span_id:135) (Token id:Id.Lit_Chars val:'\thost=example.com\n' span_id:136) (Token id:Id.Lit_Chars val:'\tusername=home-user\n' span_id:137) (Token id:Id.Lit_Chars val:'\tpassword=home-pass\n' span_id:138) (Token id:Id.Lit_Chars val:'\t--\n' span_id:139) (Token id:Id.Lit_Chars val:'\tEOF\n' span_id:140) ) } ) (C {(test_expect_success)} {(SQ (Token id:Id.Lit_Chars val:'get: use xdg file if home file has no matches' span_id:147))} { (SQ (Token id:Id.Lit_Chars val:'\n' span_id:151) (Token id:Id.Lit_Chars val:'\t>"$HOME/.git-credentials" &&\n' span_id:152) (Token id:Id.Lit_Chars val:'\tmkdir -p "$HOME/.config/git" &&\n' span_id:153) (Token id: Id.Lit_Chars val: '\techo "https://xdg-user:xdg-pass@example.com" >"$HOME/.config/git/credentials" &&\n' span_id: 154 ) (Token id:Id.Lit_Chars val:'\tcheck fill store <<-\\EOF\n' span_id:155) (Token id:Id.Lit_Chars val:'\tprotocol=https\n' span_id:156) (Token id:Id.Lit_Chars val:'\thost=example.com\n' span_id:157) (Token id:Id.Lit_Chars val:'\t--\n' span_id:158) (Token id:Id.Lit_Chars val:'\tprotocol=https\n' span_id:159) (Token id:Id.Lit_Chars val:'\thost=example.com\n' span_id:160) (Token id:Id.Lit_Chars val:'\tusername=xdg-user\n' span_id:161) (Token id:Id.Lit_Chars val:'\tpassword=xdg-pass\n' span_id:162) (Token id:Id.Lit_Chars val:'\t--\n' span_id:163) (Token id:Id.Lit_Chars val:'\tEOF\n' span_id:164) ) } ) (C {(test_expect_success)} {(POSIXPERM) (Id.Lit_Comma ',') (SANITY)} {(SQ (Token id:Id.Lit_Chars val:'get: use xdg file if home file is unreadable' span_id:175))} { (SQ (Token id:Id.Lit_Chars val:'\n' span_id:179) (Token id: Id.Lit_Chars val: '\techo "https://home-user:home-pass@example.com" >"$HOME/.git-credentials" &&\n' span_id: 180 ) (Token id:Id.Lit_Chars val:'\tchmod -r "$HOME/.git-credentials" &&\n' span_id:181) (Token id:Id.Lit_Chars val:'\tmkdir -p "$HOME/.config/git" &&\n' span_id:182) (Token id: Id.Lit_Chars val: '\techo "https://xdg-user:xdg-pass@example.com" >"$HOME/.config/git/credentials" &&\n' span_id: 183 ) (Token id:Id.Lit_Chars val:'\tcheck fill store <<-\\EOF\n' span_id:184) (Token id:Id.Lit_Chars val:'\tprotocol=https\n' span_id:185) (Token id:Id.Lit_Chars val:'\thost=example.com\n' span_id:186) (Token id:Id.Lit_Chars val:'\t--\n' span_id:187) (Token id:Id.Lit_Chars val:'\tprotocol=https\n' span_id:188) (Token id:Id.Lit_Chars val:'\thost=example.com\n' span_id:189) (Token id:Id.Lit_Chars val:'\tusername=xdg-user\n' span_id:190) (Token id:Id.Lit_Chars val:'\tpassword=xdg-pass\n' span_id:191) (Token id:Id.Lit_Chars val:'\t--\n' span_id:192) (Token id:Id.Lit_Chars val:'\tEOF\n' span_id:193) ) } ) (C {(test_expect_success)} { (SQ (Token id: Id.Lit_Chars val: 'store: if both xdg and home files exist, only store in home file' span_id: 200 ) ) } { (SQ (Token id:Id.Lit_Chars val:'\n' span_id:204) (Token id:Id.Lit_Chars val:'\t>"$HOME/.git-credentials" &&\n' span_id:205) (Token id:Id.Lit_Chars val:'\tmkdir -p "$HOME/.config/git" &&\n' span_id:206) (Token id:Id.Lit_Chars val:'\t>"$HOME/.config/git/credentials" &&\n' span_id:207) (Token id:Id.Lit_Chars val:'\tcheck approve store <<-\\EOF &&\n' span_id:208) (Token id:Id.Lit_Chars val:'\tprotocol=https\n' span_id:209) (Token id:Id.Lit_Chars val:'\thost=example.com\n' span_id:210) (Token id:Id.Lit_Chars val:'\tusername=store-user\n' span_id:211) (Token id:Id.Lit_Chars val:'\tpassword=store-pass\n' span_id:212) (Token id:Id.Lit_Chars val:'\tEOF\n' span_id:213) (Token id: Id.Lit_Chars val: '\techo "https://store-user:store-pass@example.com" >expected &&\n' span_id: 214 ) (Token id:Id.Lit_Chars val:'\ttest_cmp expected "$HOME/.git-credentials" &&\n' span_id:215) (Token id: Id.Lit_Chars val: '\ttest_must_be_empty "$HOME/.config/git/credentials"\n' span_id: 216 ) ) } ) (C {(test_expect_success)} { (SQ (Token id: Id.Lit_Chars val: 'erase: erase matching credentials from both xdg and home files' span_id: 224 ) ) } { (SQ (Token id:Id.Lit_Chars val:'\n' span_id:228) (Token id: Id.Lit_Chars val: '\techo "https://home-user:home-pass@example.com" >"$HOME/.git-credentials" &&\n' span_id: 229 ) (Token id:Id.Lit_Chars val:'\tmkdir -p "$HOME/.config/git" &&\n' span_id:230) (Token id: Id.Lit_Chars val: '\techo "https://xdg-user:xdg-pass@example.com" >"$HOME/.config/git/credentials" &&\n' span_id: 231 ) (Token id:Id.Lit_Chars val:'\tcheck reject store <<-\\EOF &&\n' span_id:232) (Token id:Id.Lit_Chars val:'\tprotocol=https\n' span_id:233) (Token id:Id.Lit_Chars val:'\thost=example.com\n' span_id:234) (Token id:Id.Lit_Chars val:'\tEOF\n' span_id:235) (Token id:Id.Lit_Chars val:'\ttest_must_be_empty "$HOME/.git-credentials" &&\n' span_id:236) (Token id: Id.Lit_Chars val: '\ttest_must_be_empty "$HOME/.config/git/credentials"\n' span_id: 237 ) ) } ) (C {(test_done)}) ] )