| 
									
										
										
										
											2018-04-10 23:05:46 -07:00
										 |  |  | package bootcommand | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | import ( | 
					
						
							| 
									
										
										
										
											2018-04-13 14:41:17 -07:00
										 |  |  | 	"fmt" | 
					
						
							| 
									
										
										
										
											2018-04-10 23:05:46 -07:00
										 |  |  | 	"log" | 
					
						
							|  |  |  | 	"strings" | 
					
						
							|  |  |  | 	"testing" | 
					
						
							| 
									
										
										
										
											2018-04-13 14:41:17 -07:00
										 |  |  | 
 | 
					
						
							|  |  |  | 	"github.com/stretchr/testify/assert" | 
					
						
							| 
									
										
										
										
											2018-04-10 23:05:46 -07:00
										 |  |  | ) | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | func toIfaceSlice(v interface{}) []interface{} { | 
					
						
							|  |  |  | 	if v == nil { | 
					
						
							|  |  |  | 		return nil | 
					
						
							|  |  |  | 	} | 
					
						
							|  |  |  | 	return v.([]interface{}) | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-04-13 14:41:17 -07:00
										 |  |  | func Test_parse(t *testing.T) { | 
					
						
							| 
									
										
										
										
											2018-04-10 23:05:46 -07:00
										 |  |  | 	in := "<wait><wait20><wait3s><wait4m2ns>" | 
					
						
							|  |  |  | 	in += "foo/bar > one 界" | 
					
						
							| 
									
										
										
										
											2018-04-13 14:41:17 -07:00
										 |  |  | 	in += "<fon> b<fOff>" | 
					
						
							| 
									
										
										
										
											2018-04-12 11:34:21 -07:00
										 |  |  | 	in += "<foo><f3><f12><spacebar><leftalt><rightshift><rightsuper>" | 
					
						
							| 
									
										
										
										
											2018-04-13 14:41:17 -07:00
										 |  |  | 	expected := []string{ | 
					
						
							|  |  |  | 		"Wait<1s>", | 
					
						
							|  |  |  | 		"Wait<20s>", | 
					
						
							|  |  |  | 		"Wait<3s>", | 
					
						
							|  |  |  | 		"Wait<4m0.000000002s>", | 
					
						
							|  |  |  | 		"LIT-Press(f)", | 
					
						
							|  |  |  | 		"LIT-Press(o)", | 
					
						
							|  |  |  | 		"LIT-Press(o)", | 
					
						
							|  |  |  | 		"LIT-Press(/)", | 
					
						
							|  |  |  | 		"LIT-Press(b)", | 
					
						
							|  |  |  | 		"LIT-Press(a)", | 
					
						
							|  |  |  | 		"LIT-Press(r)", | 
					
						
							|  |  |  | 		"LIT-Press( )", | 
					
						
							|  |  |  | 		"LIT-Press(>)", | 
					
						
							|  |  |  | 		"LIT-Press( )", | 
					
						
							|  |  |  | 		"LIT-Press(o)", | 
					
						
							|  |  |  | 		"LIT-Press(n)", | 
					
						
							|  |  |  | 		"LIT-Press(e)", | 
					
						
							|  |  |  | 		"LIT-Press( )", | 
					
						
							|  |  |  | 		"LIT-Press(界)", | 
					
						
							|  |  |  | 		"LIT-On(f)", | 
					
						
							|  |  |  | 		"LIT-Press( )", | 
					
						
							|  |  |  | 		"LIT-Press(b)", | 
					
						
							|  |  |  | 		"LIT-Off(f)", | 
					
						
							|  |  |  | 		"LIT-Press(<)", | 
					
						
							|  |  |  | 		"LIT-Press(f)", | 
					
						
							|  |  |  | 		"LIT-Press(o)", | 
					
						
							|  |  |  | 		"LIT-Press(o)", | 
					
						
							|  |  |  | 		"LIT-Press(>)", | 
					
						
							|  |  |  | 		"Spec-Press(f3)", | 
					
						
							|  |  |  | 		"Spec-Press(f12)", | 
					
						
							|  |  |  | 		"Spec-Press(spacebar)", | 
					
						
							|  |  |  | 		"Spec-Press(leftalt)", | 
					
						
							|  |  |  | 		"Spec-Press(rightshift)", | 
					
						
							|  |  |  | 		"Spec-Press(rightsuper)", | 
					
						
							|  |  |  | 	} | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-04-10 23:05:46 -07:00
										 |  |  | 	got, err := ParseReader("", strings.NewReader(in)) | 
					
						
							|  |  |  | 	if err != nil { | 
					
						
							|  |  |  | 		log.Fatal(err) | 
					
						
							|  |  |  | 	} | 
					
						
							|  |  |  | 	gL := toIfaceSlice(got) | 
					
						
							| 
									
										
										
										
											2018-04-13 14:41:17 -07:00
										 |  |  | 	for i, g := range gL { | 
					
						
							|  |  |  | 		assert.Equal(t, expected[i], fmt.Sprintf("%s", g)) | 
					
						
							| 
									
										
										
										
											2018-04-10 23:05:46 -07:00
										 |  |  | 		log.Printf("%s\n", g) | 
					
						
							|  |  |  | 	} | 
					
						
							| 
									
										
										
										
											2018-04-13 14:41:17 -07:00
										 |  |  | } | 
					
						
							| 
									
										
										
										
											2018-04-10 23:05:46 -07:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-04-13 14:41:17 -07:00
										 |  |  | func Test_special(t *testing.T) { | 
					
						
							|  |  |  | 	var specials = []struct { | 
					
						
							|  |  |  | 		in  string | 
					
						
							|  |  |  | 		out string | 
					
						
							|  |  |  | 	}{ | 
					
						
							|  |  |  | 		{ | 
					
						
							|  |  |  | 			"<rightShift><rightshift><RIGHTSHIFT>", | 
					
						
							|  |  |  | 			"Spec-Press(rightshift)", | 
					
						
							|  |  |  | 		}, | 
					
						
							|  |  |  | 		{ | 
					
						
							|  |  |  | 			"<delon><delON><deLoN><DELON>", | 
					
						
							|  |  |  | 			"Spec-On(del)", | 
					
						
							|  |  |  | 		}, | 
					
						
							|  |  |  | 		{ | 
					
						
							|  |  |  | 			"<enteroff><enterOFF><eNtErOfF><ENTEROFF>", | 
					
						
							|  |  |  | 			"Spec-Off(enter)", | 
					
						
							|  |  |  | 		}, | 
					
						
							|  |  |  | 	} | 
					
						
							|  |  |  | 	for _, tt := range specials { | 
					
						
							|  |  |  | 		got, err := ParseReader("", strings.NewReader(tt.in)) | 
					
						
							|  |  |  | 		if err != nil { | 
					
						
							|  |  |  | 			log.Fatal(err) | 
					
						
							|  |  |  | 		} | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 		gL := toIfaceSlice(got) | 
					
						
							|  |  |  | 		for _, g := range gL { | 
					
						
							|  |  |  | 			assert.Equal(t, tt.out, g.(*specialExpression).String()) | 
					
						
							|  |  |  | 		} | 
					
						
							|  |  |  | 	} | 
					
						
							| 
									
										
										
										
											2018-04-10 23:05:46 -07:00
										 |  |  | } |