github.com/turbot/steampipe@v1.7.0-rc.0.0.20240517123944-7cef272d4458/pkg/steampipeconfig/parse/dependency_test.go (about) 1 package parse 2 3 import ( 4 "reflect" 5 "testing" 6 7 "github.com/turbot/go-kit/helpers" 8 ) 9 10 type dependencyTreeTest struct { 11 input [][]string 12 expected []string 13 } 14 15 var testCasesDependencyTree = map[string]dependencyTreeTest{ 16 "no overlap": { 17 input: [][]string{{"a", "b", "c"}, {"d", "e", "f"}}, 18 expected: []string{"a", "b", "c", "d", "e", "f"}, 19 }, 20 "overlap": { 21 input: [][]string{{"a", "b", "c"}, {"b", "c"}}, 22 expected: []string{"a", "b", "c"}, 23 }, 24 "multiple overlaps": { 25 input: [][]string{{"a", "b", "c"}, {"b", "c"}, {"d", "e", "f", "g", "h", "i"}, {"g", "h", "i"}, {"h", "i"}}, 26 expected: []string{"a", "b", "c", "d", "e", "f", "g", "h", "i"}, 27 }, 28 } 29 30 func TestDependencyTree(t *testing.T) { 31 32 for name, test := range testCasesDependencyTree { 33 34 res := combineDependencyOrders(test.input) 35 if !reflect.DeepEqual(res, test.expected) { 36 t.Errorf("Test %s FAILED. Expected %v, got %v", name, test.expected, res) 37 } 38 } 39 } 40 41 func combineDependencyOrders(deps [][]string) []string { 42 43 // we assume every dep is unique 44 // for each dep, if first element exists in any other dep, then it cannot be the longest 45 // first dedupe 46 var longestDeps []string 47 for i, d1 := range deps { 48 longest := true 49 for j, d2 := range deps { 50 if i == j { 51 continue 52 } 53 if helpers.StringSliceContains(d2, d1[0]) { 54 longest = false 55 continue 56 } 57 } 58 if longest { 59 longestDeps = append(longestDeps, d1...) 60 } 61 } 62 63 return longestDeps 64 }