github.com/dahs81/otto@v0.2.1-0.20160126165905-6400716cf085/helper/packer/ui_test.go (about) 1 package packer 2 3 import ( 4 "reflect" 5 "testing" 6 ) 7 8 func TestPackerUi(t *testing.T) { 9 cases := map[string]struct { 10 Types []string 11 Messages []string 12 Outputs []*Output 13 }{ 14 "basic": { 15 []string{"ui"}, 16 []string{"1376289459,,ui,say,foo bar"}, 17 []*Output{ 18 &Output{ 19 Timestamp: "1376289459", 20 Target: "", 21 Type: "ui", 22 Data: []string{ 23 "say", 24 "foo bar", 25 }, 26 }, 27 }, 28 }, 29 30 "multiple": { 31 []string{"ui"}, 32 []string{ 33 "1376289459,,ui,say,foo bar", 34 "\n", 35 "1376289459,,ui,say,baz", 36 }, 37 []*Output{ 38 &Output{ 39 Timestamp: "1376289459", 40 Target: "", 41 Type: "ui", 42 Data: []string{ 43 "say", 44 "foo bar", 45 }, 46 }, 47 &Output{ 48 Timestamp: "1376289459", 49 Target: "", 50 Type: "ui", 51 Data: []string{ 52 "say", 53 "baz", 54 }, 55 }, 56 }, 57 }, 58 59 "multiple in one": { 60 []string{"ui"}, 61 []string{ 62 "1376289459,,ui,say,foo bar\n1376289459,,ui,say,baz\n1376289459,,ui,say,qux", 63 }, 64 []*Output{ 65 &Output{ 66 Timestamp: "1376289459", 67 Target: "", 68 Type: "ui", 69 Data: []string{ 70 "say", 71 "foo bar", 72 }, 73 }, 74 &Output{ 75 Timestamp: "1376289459", 76 Target: "", 77 Type: "ui", 78 Data: []string{ 79 "say", 80 "baz", 81 }, 82 }, 83 &Output{ 84 Timestamp: "1376289459", 85 Target: "", 86 Type: "ui", 87 Data: []string{ 88 "say", 89 "qux", 90 }, 91 }, 92 }, 93 }, 94 95 "trailing newline": { 96 []string{"ui"}, 97 []string{ 98 "1376289459,,ui,say,foo bar", 99 "\n", 100 "1376289459,,ui,say,baz\n", 101 }, 102 []*Output{ 103 &Output{ 104 Timestamp: "1376289459", 105 Target: "", 106 Type: "ui", 107 Data: []string{ 108 "say", 109 "foo bar", 110 }, 111 }, 112 &Output{ 113 Timestamp: "1376289459", 114 Target: "", 115 Type: "ui", 116 Data: []string{ 117 "say", 118 "baz", 119 }, 120 }, 121 }, 122 }, 123 124 "newlines in data": { 125 []string{"ui"}, 126 []string{"1376289459,,ui,say,foo\\nbar"}, 127 []*Output{ 128 &Output{ 129 Timestamp: "1376289459", 130 Target: "", 131 Type: "ui", 132 Data: []string{ 133 "say", 134 "foo\nbar", 135 }, 136 }, 137 }, 138 }, 139 140 "carriage return in data": { 141 []string{"ui"}, 142 []string{"1376289459,,ui,say,foo\\rbar"}, 143 []*Output{ 144 &Output{ 145 Timestamp: "1376289459", 146 Target: "", 147 Type: "ui", 148 Data: []string{ 149 "say", 150 "foo\rbar", 151 }, 152 }, 153 }, 154 }, 155 156 "comma in data": { 157 []string{"ui"}, 158 []string{"1376289459,,ui,say,foo%!(PACKER_COMMA)bar"}, 159 []*Output{ 160 &Output{ 161 Timestamp: "1376289459", 162 Target: "", 163 Type: "ui", 164 Data: []string{ 165 "say", 166 "foo,bar", 167 }, 168 }, 169 }, 170 }, 171 172 "unregistered type": { 173 []string{"ui"}, 174 []string{"1376289459,,not-ui,say,foo bar"}, 175 []*Output{}, 176 }, 177 } 178 179 for name, tc := range cases { 180 actual := make([]*Output, 0, len(tc.Outputs)) 181 recordCallback := func(o *Output) { 182 actual = append(actual, o) 183 } 184 185 callbacks := make(map[string]OutputCallback) 186 for _, t := range tc.Types { 187 callbacks[t] = recordCallback 188 } 189 190 ui := &packerUi{Callbacks: callbacks} 191 for _, msg := range tc.Messages { 192 ui.Raw(msg) 193 } 194 ui.Finish() 195 196 if !reflect.DeepEqual(actual, tc.Outputs) { 197 t.Fatalf("%s\n\n%#v\n\n%#v", name, actual, tc.Outputs) 198 } 199 } 200 }