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  }