|  | package cfg | 
|  |  | 
|  | import ( | 
|  | "sort" | 
|  | "strings" | 
|  | "testing" | 
|  | ) | 
|  |  | 
|  | func TestSortLocks(t *testing.T) { | 
|  | c, err := ConfigFromYaml([]byte(yml)) | 
|  | if err != nil { | 
|  | t.Error("ConfigFromYaml failed to parse yaml for TestSortDependencies") | 
|  | } | 
|  |  | 
|  | ls := make(Locks, len(c.Imports)) | 
|  | for i := 0; i < len(c.Imports); i++ { | 
|  | ls[i] = &Lock{ | 
|  | Name:    c.Imports[i].Name, | 
|  | Version: c.Imports[i].Reference, | 
|  | } | 
|  | } | 
|  |  | 
|  | if ls[2].Name != "github.com/Masterminds/structable" { | 
|  | t.Error("Initial dependencies are out of order prior to sort") | 
|  | } | 
|  |  | 
|  | sort.Sort(ls) | 
|  |  | 
|  | if ls[0].Name != "github.com/kylelemons/go-gypsy" || | 
|  | ls[1].Name != "github.com/Masterminds/convert" || | 
|  | ls[2].Name != "github.com/Masterminds/cookoo" || | 
|  | ls[3].Name != "github.com/Masterminds/structable" { | 
|  | t.Error("Sorting of dependencies failed") | 
|  | } | 
|  | } | 
|  |  | 
|  | const inputSubpkgYaml = ` | 
|  | imports: | 
|  | - name: github.com/gogo/protobuf | 
|  | version: 82d16f734d6d871204a3feb1a73cb220cc92574c | 
|  | subpackages: | 
|  | - plugin/equal | 
|  | - sortkeys | 
|  | - plugin/face | 
|  | - plugin/gostring | 
|  | - vanity | 
|  | - plugin/grpc | 
|  | - plugin/marshalto | 
|  | - plugin/populate | 
|  | - plugin/oneofcheck | 
|  | - plugin/size | 
|  | - plugin/stringer | 
|  | - plugin/defaultcheck | 
|  | - plugin/embedcheck | 
|  | - plugin/description | 
|  | - plugin/enumstringer | 
|  | - gogoproto | 
|  | - plugin/testgen | 
|  | - plugin/union | 
|  | - plugin/unmarshal | 
|  | - protoc-gen-gogo/generator | 
|  | - protoc-gen-gogo/plugin | 
|  | - vanity/command | 
|  | - protoc-gen-gogo/descriptor | 
|  | - proto | 
|  | ` | 
|  | const expectSubpkgYaml = ` | 
|  | imports: | 
|  | - name: github.com/gogo/protobuf | 
|  | version: 82d16f734d6d871204a3feb1a73cb220cc92574c | 
|  | subpackages: | 
|  | - gogoproto | 
|  | - plugin/defaultcheck | 
|  | - plugin/description | 
|  | - plugin/embedcheck | 
|  | - plugin/enumstringer | 
|  | - plugin/equal | 
|  | - plugin/face | 
|  | - plugin/gostring | 
|  | - plugin/grpc | 
|  | - plugin/marshalto | 
|  | - plugin/oneofcheck | 
|  | - plugin/populate | 
|  | - plugin/size | 
|  | - plugin/stringer | 
|  | - plugin/testgen | 
|  | - plugin/union | 
|  | - plugin/unmarshal | 
|  | - proto | 
|  | - protoc-gen-gogo/descriptor | 
|  | - protoc-gen-gogo/generator | 
|  | - protoc-gen-gogo/plugin | 
|  | - sortkeys | 
|  | - vanity | 
|  | - vanity/command | 
|  | ` | 
|  |  | 
|  | func TestSortSubpackages(t *testing.T) { | 
|  | lf, err := LockfileFromYaml([]byte(inputSubpkgYaml)) | 
|  | if err != nil { | 
|  | t.Fatal(err) | 
|  | } | 
|  |  | 
|  | out, err := lf.Marshal() | 
|  | if err != nil { | 
|  | t.Fatal(err) | 
|  | } | 
|  |  | 
|  | if !strings.Contains(string(out), expectSubpkgYaml) { | 
|  | t.Errorf("Expected %q\nto contain\n%q") | 
|  | } | 
|  | } |