forked from Dwarfartisan/gisp
-
Notifications
You must be signed in to change notification settings - Fork 0
/
parser_test.go
68 lines (63 loc) · 1.62 KB
/
parser_test.go
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
package gisp
import (
"reflect"
"testing"
tm "time"
)
func TestParseString(t *testing.T) {
g := NewGisp(map[string]Toolbox{})
gisp := *g
data := `"I'm a string"`
str, err := gisp.Parse(data)
if err != nil {
t.Fatalf("except string but error: %v", err)
}
if str.(string) != `I'm a string` {
t.Fatalf("except got \"I'm a string\" but \"%v\"", str)
}
}
func TestParseFloat(t *testing.T) {
g := NewGisp(map[string]Toolbox{})
gisp := *g
data := "3.14"
ret, err := gisp.Parse(data)
if err != nil {
t.Fatalf("except Float(3.14) but error: %v", err)
}
if ret.(Float) != Float(3.14) {
t.Fatalf("except got Float(3.14) but %v", ret)
}
}
func TestParseExt(t *testing.T) {
g := NewGispWith(
map[string]Toolbox{"axiom": Axiom, "props": Propositions},
map[string]Toolbox{"time": Time})
gisp := *g
ret, err := gisp.Parse("(time.now)")
if err != nil {
t.Fatalf("except got time.Now() but error: %v", err)
}
if now, ok := ret.(tm.Time); ok {
t.Logf("got now time is %v", now)
} else {
t.Fatalf("except got now time but %v", now)
}
}
func TestParseCallToolkitFunction(t *testing.T) {
g := NewGispWith(
map[string]Toolbox{"axiom": Axiom, "props": Propositions},
map[string]Toolbox{"time": Time})
gisp := *g
ret, err := gisp.Parse(`(time.parseDuration "24h")`)
if err != nil {
t.Fatalf("except got time.Duration 24 hours but error: %v", err)
}
dur, err := tm.ParseDuration("24h")
if err != nil {
t.Fatalf("except got time.Duration 24 hours but error: %v", err)
}
if !reflect.DeepEqual(dur, ret) {
t.Fatalf("except got time.Duration 24 hours but got: %v", ret)
}
t.Logf("parse duration \"24h\" got %v\n", ret)
}