input_test.go (3086B)
1 package vm 2 3 import ( 4 "context" 5 "testing" 6 7 "git.defalsify.org/vise.git/state" 8 "git.defalsify.org/vise.git/cache" 9 ) 10 11 func TestPhoneInput(t *testing.T) { 12 v, err := ValidInput([]byte("+12345")) 13 if err != nil { 14 t.Fatal(err) 15 } 16 if v != -1 { 17 t.Fatalf("expected -1, got %d", v) 18 } 19 } 20 21 func TestMenuInputs(t *testing.T) { 22 var err error 23 _, err = ValidInput([]byte("0")) 24 if err != nil { 25 t.Fatal(err) 26 } 27 28 _, err = ValidInput([]byte("99")) 29 if err != nil { 30 t.Fatal(err) 31 } 32 33 _, err = ValidInput([]byte("foo")) 34 if err != nil { 35 t.Fatal(err) 36 } 37 38 _, err = ValidInput([]byte("foo Bar")) 39 if err != nil { 40 t.Fatal(err) 41 } 42 } 43 44 func TestFalseInput(t *testing.T) { 45 _, err := ValidInput([]byte{0x0a}) 46 if err == nil { 47 t.Fatal("expected error") 48 } 49 } 50 51 func TestTargetInput(t *testing.T) { 52 var err error 53 st := state.NewState(1) 54 _, err = CheckTarget([]byte(""), st) 55 if err == nil { 56 t.Fatal("expected error") 57 } 58 _, err = CheckTarget([]byte("_"), st) 59 if err == nil { 60 t.Fatal("expected error") 61 } 62 st.Down("foo") 63 v, err := CheckTarget([]byte("_"), st) 64 if err != nil { 65 t.Fatal(err) 66 } 67 if !v { 68 t.Fatal("expected true") 69 } 70 v, err = CheckTarget([]byte("<"), st) 71 if err != nil { 72 t.Fatal(err) 73 } 74 if v { 75 t.Fatal("expected false") 76 } 77 v, err = CheckTarget([]byte(">"), st) 78 if err != nil { 79 t.Fatal(err) 80 } 81 if !v { 82 t.Fatal("expected true") 83 } 84 v, err = CheckTarget([]byte("%"), st) 85 if err == nil { 86 t.Fatal("expected error") 87 } 88 v, err = CheckTarget([]byte("foo"), st) 89 if err != nil { 90 t.Fatal(err) 91 } 92 if !v { 93 t.Fatal("expected true") 94 } 95 } 96 97 func TestApplyTarget(t *testing.T) { 98 var err error 99 ctx := context.Background() 100 st := state.NewState(0) 101 st.Down("root") 102 st.Down("one") 103 st.Down("two") 104 ca := cache.NewCache() 105 rs := newTestResource(st) 106 rs.Lock() 107 b := NewLine(nil, INCMP, []string{"^", "0"}, nil, nil) 108 vm := NewVm(st, rs, ca, nil) 109 110 st.SetInput([]byte("0")) 111 b, err = vm.Run(ctx, b) 112 if err != nil { 113 t.Fatal(err) 114 } 115 116 st.Restart() 117 st.Down("foo") 118 b = NewLine(nil, INCMP, []string{"_", "0"}, nil, nil) 119 vm = NewVm(st, rs, ca, nil) 120 121 st.SetInput([]byte("0")) 122 b, err = vm.Run(ctx, b) 123 if err != nil { 124 t.Fatal(err) 125 } 126 127 st.Restart() 128 b = NewLine(nil, INCMP, []string{".", "0"}, nil, nil) 129 vm = NewVm(st, rs, ca, nil) 130 131 st.SetInput([]byte("0")) 132 b, err = vm.Run(ctx, b) 133 if err != nil { 134 t.Fatal(err) 135 } 136 137 st.Restart() 138 b = NewLine(nil, INCMP, []string{">", "0"}, nil, nil) 139 vm = NewVm(st, rs, ca, nil) 140 141 st.SetInput([]byte("0")) 142 b, err = vm.Run(ctx, b) 143 if err != nil { 144 t.Fatal(err) 145 } 146 147 st.Restart() 148 b = NewLine(nil, INCMP, []string{"<", "0"}, nil, nil) 149 vm = NewVm(st, rs, ca, nil) 150 151 st.SetInput([]byte("0")) 152 b, err = vm.Run(ctx, b) 153 if err != nil { 154 t.Fatal(err) 155 } 156 } 157 158 func TestVmCustomInputValid(t *testing.T) { 159 var err error 160 s := []byte{0x07, 0x6a, 0x6f, 0x6f} 161 _, err = ValidInput(s) 162 if err == nil { 163 t.Fatal("expected error") 164 } 165 166 err = RegisterInputValidator(42, "^\x07[a-z]+") 167 if err != nil { 168 t.Fatal(err) 169 } 170 171 v, err := ValidInput(s) 172 if err != nil { 173 t.Fatal(err) 174 } 175 if v != 42 { 176 t.Fatalf("expected 42, got %d", v) 177 } 178 }