1 package ansiterm
2
3 import (
4 "fmt"
5 "testing"
6 )
7
8 func getStateNames() []string {
9 parser, _ := createTestParser("Ground")
10
11 stateNames := []string{}
12 for _, state := range parser.stateMap {
13 stateNames = append(stateNames, state.Name())
14 }
15
16 return stateNames
17 }
18
19 func stateTransitionHelper(t *testing.T, start string, end string, bytes []byte) {
20 for _, b := range bytes {
21 bytes := []byte{byte(b)}
22 parser, _ := createTestParser(start)
23 parser.Parse(bytes)
24 validateState(t, parser.currState, end)
25 }
26 }
27
28 func anyToXHelper(t *testing.T, bytes []byte, expectedState string) {
29 for _, s := range getStateNames() {
30 stateTransitionHelper(t, s, expectedState, bytes)
31 }
32 }
33
34 func funcCallParamHelper(t *testing.T, bytes []byte, start string, expected string, expectedCalls []string) {
35 parser, evtHandler := createTestParser(start)
36 parser.Parse(bytes)
37 validateState(t, parser.currState, expected)
38 validateFuncCalls(t, evtHandler.FunctionCalls, expectedCalls)
39 }
40
41 func parseParamsHelper(t *testing.T, bytes []byte, expectedParams []string) {
42 params, err := parseParams(bytes)
43
44 if err != nil {
45 t.Errorf("Parameter parse error: %v", err)
46 return
47 }
48
49 if len(params) != len(expectedParams) {
50 t.Errorf("Parsed parameters: %v", params)
51 t.Errorf("Expected parameters: %v", expectedParams)
52 t.Errorf("Parameter length failure: %d != %d", len(params), len(expectedParams))
53 return
54 }
55
56 for i, v := range expectedParams {
57 if v != params[i] {
58 t.Errorf("Parsed parameters: %v", params)
59 t.Errorf("Expected parameters: %v", expectedParams)
60 t.Errorf("Parameter parse failure: %s != %s at position %d", v, params[i], i)
61 }
62 }
63 }
64
65 func cursorSingleParamHelper(t *testing.T, command byte, funcName string) {
66 funcCallParamHelper(t, []byte{command}, "CsiEntry", "Ground", []string{fmt.Sprintf("%s([1])", funcName)})
67 funcCallParamHelper(t, []byte{'0', command}, "CsiEntry", "Ground", []string{fmt.Sprintf("%s([1])", funcName)})
68 funcCallParamHelper(t, []byte{'2', command}, "CsiEntry", "Ground", []string{fmt.Sprintf("%s([2])", funcName)})
69 funcCallParamHelper(t, []byte{'2', '3', command}, "CsiEntry", "Ground", []string{fmt.Sprintf("%s([23])", funcName)})
70 funcCallParamHelper(t, []byte{'2', ';', '3', command}, "CsiEntry", "Ground", []string{fmt.Sprintf("%s([2])", funcName)})
71 funcCallParamHelper(t, []byte{'2', ';', '3', ';', '4', command}, "CsiEntry", "Ground", []string{fmt.Sprintf("%s([2])", funcName)})
72 }
73
74 func cursorTwoParamHelper(t *testing.T, command byte, funcName string) {
75 funcCallParamHelper(t, []byte{command}, "CsiEntry", "Ground", []string{fmt.Sprintf("%s([1 1])", funcName)})
76 funcCallParamHelper(t, []byte{'0', command}, "CsiEntry", "Ground", []string{fmt.Sprintf("%s([1 1])", funcName)})
77 funcCallParamHelper(t, []byte{'2', command}, "CsiEntry", "Ground", []string{fmt.Sprintf("%s([2 1])", funcName)})
78 funcCallParamHelper(t, []byte{'2', '3', command}, "CsiEntry", "Ground", []string{fmt.Sprintf("%s([23 1])", funcName)})
79 funcCallParamHelper(t, []byte{'2', ';', '3', command}, "CsiEntry", "Ground", []string{fmt.Sprintf("%s([2 3])", funcName)})
80 funcCallParamHelper(t, []byte{'2', ';', '3', ';', '4', command}, "CsiEntry", "Ground", []string{fmt.Sprintf("%s([2 3])", funcName)})
81 }
82
83 func eraseHelper(t *testing.T, command byte, funcName string) {
84 funcCallParamHelper(t, []byte{command}, "CsiEntry", "Ground", []string{fmt.Sprintf("%s([0])", funcName)})
85 funcCallParamHelper(t, []byte{'0', command}, "CsiEntry", "Ground", []string{fmt.Sprintf("%s([0])", funcName)})
86 funcCallParamHelper(t, []byte{'1', command}, "CsiEntry", "Ground", []string{fmt.Sprintf("%s([1])", funcName)})
87 funcCallParamHelper(t, []byte{'2', command}, "CsiEntry", "Ground", []string{fmt.Sprintf("%s([2])", funcName)})
88 funcCallParamHelper(t, []byte{'3', command}, "CsiEntry", "Ground", []string{fmt.Sprintf("%s([3])", funcName)})
89 funcCallParamHelper(t, []byte{'4', command}, "CsiEntry", "Ground", []string{fmt.Sprintf("%s([0])", funcName)})
90 funcCallParamHelper(t, []byte{'1', ';', '2', command}, "CsiEntry", "Ground", []string{fmt.Sprintf("%s([1])", funcName)})
91 }
92
93 func scrollHelper(t *testing.T, command byte, funcName string) {
94 funcCallParamHelper(t, []byte{command}, "CsiEntry", "Ground", []string{fmt.Sprintf("%s([1])", funcName)})
95 funcCallParamHelper(t, []byte{'0', command}, "CsiEntry", "Ground", []string{fmt.Sprintf("%s([1])", funcName)})
96 funcCallParamHelper(t, []byte{'1', command}, "CsiEntry", "Ground", []string{fmt.Sprintf("%s([1])", funcName)})
97 funcCallParamHelper(t, []byte{'5', command}, "CsiEntry", "Ground", []string{fmt.Sprintf("%s([5])", funcName)})
98 funcCallParamHelper(t, []byte{'4', ';', '6', command}, "CsiEntry", "Ground", []string{fmt.Sprintf("%s([4])", funcName)})
99 }
100
101 func clearOnStateChangeHelper(t *testing.T, start string, end string, bytes []byte) {
102 p, _ := createTestParser(start)
103 fillContext(p.context)
104 p.Parse(bytes)
105 validateState(t, p.currState, end)
106 validateEmptyContext(t, p.context)
107 }
108
109 func c0Helper(t *testing.T, bytes []byte, expectedState string, expectedCalls []string) {
110 parser, evtHandler := createTestParser("Ground")
111 parser.Parse(bytes)
112 validateState(t, parser.currState, expectedState)
113 validateFuncCalls(t, evtHandler.FunctionCalls, expectedCalls)
114 }
115
View as plain text