1
2
3
4
5 package currency
6
7 import (
8 "testing"
9 "time"
10
11 "golang.org/x/text/language"
12 )
13
14 func TestQuery(t *testing.T) {
15 r := func(region string) language.Region {
16 return language.MustParseRegion(region)
17 }
18 t1800, _ := time.Parse("2006-01-02", "1800-01-01")
19 type result struct {
20 region language.Region
21 unit Unit
22 isTender bool
23 from, to string
24 }
25 testCases := []struct {
26 name string
27 opts []QueryOption
28 results []result
29 }{{
30 name: "XA",
31 opts: []QueryOption{Region(r("XA"))},
32 results: []result{},
33 }, {
34 name: "AC",
35 opts: []QueryOption{Region(r("AC"))},
36 results: []result{
37 {r("AC"), MustParseISO("SHP"), true, "1976-01-01", ""},
38 },
39 }, {
40 name: "US",
41 opts: []QueryOption{Region(r("US"))},
42 results: []result{
43 {r("US"), MustParseISO("USD"), true, "1792-01-01", ""},
44 },
45 }, {
46 name: "US-hist",
47 opts: []QueryOption{Region(r("US")), Historical},
48 results: []result{
49 {r("US"), MustParseISO("USD"), true, "1792-01-01", ""},
50 },
51 }, {
52 name: "US-non-tender",
53 opts: []QueryOption{Region(r("US")), NonTender},
54 results: []result{
55 {r("US"), MustParseISO("USD"), true, "1792-01-01", ""},
56 {r("US"), MustParseISO("USN"), false, "", ""},
57 },
58 }, {
59 name: "US-historical+non-tender",
60 opts: []QueryOption{Region(r("US")), Historical, NonTender},
61 results: []result{
62 {r("US"), MustParseISO("USD"), true, "1792-01-01", ""},
63 {r("US"), MustParseISO("USN"), false, "", ""},
64 {r("US"), MustParseISO("USS"), false, "", "2014-03-01"},
65 },
66 }, {
67 name: "1800",
68 opts: []QueryOption{Date(t1800)},
69 results: []result{
70 {r("CH"), MustParseISO("CHF"), true, "1799-03-17", ""},
71 {r("GB"), MustParseISO("GBP"), true, "1694-07-27", ""},
72 {r("GI"), MustParseISO("GIP"), true, "1713-01-01", ""},
73
74
75 {r("IE"), MustParseISO("GBP"), true, "1800-01-01", "1922-01-01"},
76 {r("PR"), MustParseISO("ESP"), true, "1800-01-01", "1898-12-10"},
77 {r("US"), MustParseISO("USD"), true, "1792-01-01", ""},
78 },
79 }}
80 for _, tc := range testCases {
81 n := 0
82 for it := Query(tc.opts...); it.Next(); n++ {
83 if n < len(tc.results) {
84 got := result{
85 it.Region(),
86 it.Unit(),
87 it.IsTender(),
88 getTime(it.From()),
89 getTime(it.To()),
90 }
91 if got != tc.results[n] {
92 t.Errorf("%s:%d: got %v; want %v", tc.name, n, got, tc.results[n])
93 }
94 }
95 }
96 if n != len(tc.results) {
97 t.Errorf("%s: unexpected number of results: got %d; want %d", tc.name, n, len(tc.results))
98 }
99 }
100 }
101
102 func getTime(t time.Time, ok bool) string {
103 if !ok {
104 return ""
105 }
106 return t.Format("2006-01-02")
107 }
108
View as plain text