github.com/seh/gb@v0.4.4-0.20160724065125-065d2b2b1ba1/action_test.go (about) 1 package gb 2 3 import ( 4 "reflect" 5 "sort" 6 "testing" 7 ) 8 9 func TestBuildAction(t *testing.T) { 10 var tests = []struct { 11 pkg string 12 action *Action 13 err error 14 }{{ 15 pkg: "a", 16 action: &Action{ 17 Name: "build: a", 18 Deps: []*Action{&Action{Name: "compile: a"}}, 19 }, 20 }, { 21 pkg: "b", 22 action: &Action{ 23 Name: "build: b", 24 Deps: []*Action{ 25 &Action{ 26 Name: "link: b", 27 Deps: []*Action{ 28 &Action{ 29 Name: "compile: b", 30 Deps: []*Action{ 31 &Action{ 32 Name: "compile: a", 33 }}, 34 }, 35 }}, 36 }, 37 }, 38 }, { 39 pkg: "c", 40 action: &Action{ 41 Name: "build: c", 42 Deps: []*Action{ 43 &Action{ 44 Name: "compile: c", 45 Deps: []*Action{ 46 &Action{ 47 Name: "compile: a", 48 }, &Action{ 49 Name: "compile: d.v1", 50 }}, 51 }}, 52 }, 53 }} 54 for _, tt := range tests { 55 ctx := testContext(t) 56 defer ctx.Destroy() 57 pkg, err := ctx.ResolvePackage(tt.pkg) 58 if !reflect.DeepEqual(err, tt.err) { 59 t.Errorf("ctx.ResolvePackage(%v): want %v, got %v", tt.pkg, tt.err, err) 60 continue 61 } 62 if err != nil { 63 continue 64 } 65 got, err := BuildPackages(pkg) 66 if !reflect.DeepEqual(err, tt.err) { 67 t.Errorf("BuildAction(%v): want %v, got %v", tt.pkg, tt.err, err) 68 continue 69 } 70 deleteTasks(got) 71 72 if !reflect.DeepEqual(tt.action, got) { 73 t.Errorf("BuildAction(%v): want %#+v, got %#+v", tt.pkg, tt.action, got) 74 } 75 76 // double underpants 77 sameAction(t, got, tt.action) 78 } 79 } 80 81 func sameAction(t *testing.T, want, got *Action) { 82 if want.Name != got.Name { 83 t.Errorf("sameAction: names do not match, want: %v, got %v", want.Name, got.Name) 84 return 85 } 86 if len(want.Deps) != len(got.Deps) { 87 t.Errorf("sameAction(%v, %v): deps: len(want): %v, len(got): %v", want.Name, got.Name, len(want.Deps), len(got.Deps)) 88 return 89 } 90 w, g := make(map[string]*Action), make(map[string]*Action) 91 for _, a := range want.Deps { 92 w[a.Name] = a 93 } 94 for _, a := range got.Deps { 95 g[a.Name] = a 96 } 97 var wk []string 98 for k := range w { 99 wk = append(wk, k) 100 } 101 sort.Strings(wk) 102 for _, a := range wk { 103 g, ok := g[a] 104 if !ok { 105 t.Errorf("sameAction(%v, %v): deps: want %v, got nil", want.Name, got.Name, a) 106 continue 107 } 108 sameAction(t, w[a], g) 109 } 110 } 111 112 func deleteTasks(a *Action) { 113 for _, d := range a.Deps { 114 deleteTasks(d) 115 } 116 a.Run = nil 117 }