@@ -720,7 +720,12 @@ bar = 5
720720phi = 1.68
721721# Another comment.
722722baz = [1, 2, 3, true, false]
723- qux = {"key" = "value"}
723+
724+ [qux]
725+ key = "value"
726+
727+ [qux.nested]
728+ deep = "secret"
724729` )
725730 var stdout , stderr bytes.Buffer
726731 cmd .Stdout = & stdout
@@ -754,19 +759,22 @@ foo = "secret"
754759
755760 testCases := []struct {
756761 entry string
757- key string
762+ keys [] string
758763 expected string
759764 wantErr bool
760765 }{
761- {"toml" , "" , "hunter2" , false },
762- {"toml" , "foo" , "string" , false },
763- {"toml" , "bar" , "5" , false },
764- {"toml" , "phi" , "1.68" , false },
765- {"toml" , "baz" , "[1, 2, 3, true, false]" , false },
766- {"toml" , "qux" , "" , true }, // Tables cannot be retrieved.
767- {"toml" , "nonexistent" , "" , true },
768- {"toml-default" , "" , "secret" , false },
769- {"not-toml" , "foo" , "" , true }, // Cannot use "--key" on non-TOML entries.
766+ {"toml" , nil , "hunter2" , false },
767+ {"toml" , []string {"foo" }, "string" , false },
768+ {"toml" , []string {"bar" }, "5" , false },
769+ {"toml" , []string {"phi" }, "1.68" , false },
770+ {"toml" , []string {"baz" }, "[1, 2, 3, true, false]" , false },
771+ {"toml" , []string {"qux" }, "" , true }, // Tables cannot be retrieved.
772+ {"toml" , []string {"qux" , "key" }, "value" , false },
773+ {"toml" , []string {"qux" , "nested" , "deep" }, "secret" , false },
774+ {"toml" , []string {"qux" , "nonexistent" }, "" , true },
775+ {"toml" , []string {"nonexistent" }, "" , true },
776+ {"toml-default" , nil , "secret" , false },
777+ {"not-toml" , []string {"foo" }, "" , true }, // Cannot use "--key" on non-TOML entries.
770778 }
771779
772780 for _ , tc := range testCases {
@@ -779,32 +787,33 @@ foo = "secret"
779787
780788 buf .Reset ()
781789
782- var cmd * exec.Cmd
783- if tc .key == "" {
784- cmd = exec .Command (commandPago , "--dir" , dataDir , "--socket" , "" , "show" , tc .entry )
785- } else {
786- cmd = exec .Command (commandPago , "--dir" , dataDir , "--socket" , "" , "show" , "--key" , tc .key , tc .entry )
790+ args := []string {"--dir" , dataDir , "--socket" , "" , "show" }
791+ for _ , k := range tc .keys {
792+ args = append (args , "--key" , k )
787793 }
794+ args = append (args , tc .entry )
795+ cmd := exec .Command (commandPago , args ... )
796+
788797 cmd .Stdin = c .Tty ()
789798 cmd .Stdout = & buf
790799 cmd .Stderr = c .Tty ()
791800
792801 err = cmd .Start ()
793802 if err != nil {
794- return "" , fmt .Errorf ("failed to start command for entry %q key %q : %w" , tc .entry , tc .key , err )
803+ return "" , fmt .Errorf ("failed to start command for entry %q keys %v : %w" , tc .entry , tc .keys , err )
795804 }
796805
797806 _ , _ = c .ExpectString ("Enter password" )
798807 _ , _ = c .SendLine (password )
799808
800809 err = cmd .Wait ()
801810 if (err != nil ) != tc .wantErr {
802- return "" , fmt .Errorf ("command failed for entry %q key %q : %w" , tc .entry , tc .key , err )
811+ return "" , fmt .Errorf ("command failed for entry %q keys %v : %w" , tc .entry , tc .keys , err )
803812 }
804813
805814 output := strings .TrimSpace (buf .String ())
806815 if ! tc .wantErr && output != tc .expected {
807- return "" , fmt .Errorf ("for entry %q key %q , expected %q, got %q" , tc .entry , tc .key , tc .expected , output )
816+ return "" , fmt .Errorf ("for entry %q keys %v , expected %q, got %q" , tc .entry , tc .keys , tc .expected , output )
808817 }
809818 }
810819
@@ -851,14 +860,17 @@ qux = {"key" = "value"}
851860
852861 testCases := []struct {
853862 entry string
863+ args []string
854864 expected string
855- flag string
856865 wantErr bool
857866 }{
858- {"toml" , "bar\n baz\n foo\n password\n phi\n qux" , "-K" , false },
859- {"toml" , "bar\n baz\n foo\n password\n phi\n qux" , "--keys" , false },
860- {"not-toml" , "" , "-K" , true },
861- {"nonexistent" , "" , "--keys" , true },
867+ {"toml" , []string {"-K" }, "bar\n baz\n foo\n password\n phi\n qux" , false },
868+ {"toml" , []string {"--keys" }, "bar\n baz\n foo\n password\n phi\n qux" , false },
869+ {"toml" , []string {"-K" , "-k" , "qux" }, "key" , false },
870+ {"toml" , []string {"--keys" , "--key" , "qux" }, "key" , false },
871+ {"not-toml" , []string {"-K" }, "" , true },
872+ {"nonexistent" , []string {"--keys" }, "" , true },
873+ {"" , []string {"--keys" }, "" , true },
862874 }
863875
864876 for _ , tc := range testCases {
@@ -871,12 +883,13 @@ qux = {"key" = "value"}
871883
872884 buf .Reset ()
873885
874- var cmd * exec.Cmd
875- if tc .entry == "" {
876- cmd = exec .Command (commandPago , "--dir" , dataDir , "--socket" , "" , "show" , "--keys" )
877- } else {
878- cmd = exec .Command (commandPago , "--dir" , dataDir , "--socket" , "" , "show" , "--keys" , tc .entry )
886+ args := []string {"--dir" , dataDir , "--socket" , "" , "show" }
887+ args = append (args , tc .args ... )
888+ if tc .entry != "" {
889+ args = append (args , tc .entry )
879890 }
891+ cmd := exec .Command (commandPago , args ... )
892+
880893 cmd .Stdin = c .Tty ()
881894 cmd .Stdout = & buf
882895 cmd .Stderr = c .Tty ()
0 commit comments