108 lines
2.8 KiB
Go
108 lines
2.8 KiB
Go
|
// Copyright 2016 The Go Authors. All rights reserved.
|
||
|
// Use of this source code is governed by a BSD-style
|
||
|
// license that can be found in the LICENSE file.
|
||
|
|
||
|
package currency
|
||
|
|
||
|
import (
|
||
|
"testing"
|
||
|
"time"
|
||
|
|
||
|
"golang.org/x/text/language"
|
||
|
)
|
||
|
|
||
|
func TestQuery(t *testing.T) {
|
||
|
r := func(region string) language.Region {
|
||
|
return language.MustParseRegion(region)
|
||
|
}
|
||
|
t1800, _ := time.Parse("2006-01-02", "1800-01-01")
|
||
|
type result struct {
|
||
|
region language.Region
|
||
|
unit Unit
|
||
|
isTender bool
|
||
|
from, to string
|
||
|
}
|
||
|
testCases := []struct {
|
||
|
name string
|
||
|
opts []QueryOption
|
||
|
results []result
|
||
|
}{{
|
||
|
name: "XA",
|
||
|
opts: []QueryOption{Region(r("XA"))},
|
||
|
results: []result{},
|
||
|
}, {
|
||
|
name: "AC",
|
||
|
opts: []QueryOption{Region(r("AC"))},
|
||
|
results: []result{
|
||
|
{r("AC"), MustParseISO("SHP"), true, "1976-01-01", ""},
|
||
|
},
|
||
|
}, {
|
||
|
name: "US",
|
||
|
opts: []QueryOption{Region(r("US"))},
|
||
|
results: []result{
|
||
|
{r("US"), MustParseISO("USD"), true, "1792-01-01", ""},
|
||
|
},
|
||
|
}, {
|
||
|
name: "US-hist",
|
||
|
opts: []QueryOption{Region(r("US")), Historical},
|
||
|
results: []result{
|
||
|
{r("US"), MustParseISO("USD"), true, "1792-01-01", ""},
|
||
|
},
|
||
|
}, {
|
||
|
name: "US-non-tender",
|
||
|
opts: []QueryOption{Region(r("US")), NonTender},
|
||
|
results: []result{
|
||
|
{r("US"), MustParseISO("USD"), true, "1792-01-01", ""},
|
||
|
{r("US"), MustParseISO("USN"), false, "", ""},
|
||
|
},
|
||
|
}, {
|
||
|
name: "US-historical+non-tender",
|
||
|
opts: []QueryOption{Region(r("US")), Historical, NonTender},
|
||
|
results: []result{
|
||
|
{r("US"), MustParseISO("USD"), true, "1792-01-01", ""},
|
||
|
{r("US"), MustParseISO("USN"), false, "", ""},
|
||
|
{r("US"), MustParseISO("USS"), false, "", "2014-03-01"},
|
||
|
},
|
||
|
}, {
|
||
|
name: "1800",
|
||
|
opts: []QueryOption{Date(t1800)},
|
||
|
results: []result{
|
||
|
{r("CH"), MustParseISO("CHF"), true, "1799-03-17", ""},
|
||
|
{r("GB"), MustParseISO("GBP"), true, "1694-07-27", ""},
|
||
|
{r("GI"), MustParseISO("GIP"), true, "1713-01-01", ""},
|
||
|
// The date for IE and PR seem wrong, so these may be updated at
|
||
|
// some point causing the tests to fail.
|
||
|
{r("IE"), MustParseISO("GBP"), true, "1800-01-01", "1922-01-01"},
|
||
|
{r("PR"), MustParseISO("ESP"), true, "1800-01-01", "1898-12-10"},
|
||
|
{r("US"), MustParseISO("USD"), true, "1792-01-01", ""},
|
||
|
},
|
||
|
}}
|
||
|
for _, tc := range testCases {
|
||
|
n := 0
|
||
|
for it := Query(tc.opts...); it.Next(); n++ {
|
||
|
if n < len(tc.results) {
|
||
|
got := result{
|
||
|
it.Region(),
|
||
|
it.Unit(),
|
||
|
it.IsTender(),
|
||
|
getTime(it.From()),
|
||
|
getTime(it.To()),
|
||
|
}
|
||
|
if got != tc.results[n] {
|
||
|
t.Errorf("%s:%d: got %v; want %v", tc.name, n, got, tc.results[n])
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
if n != len(tc.results) {
|
||
|
t.Errorf("%s: unexpected number of results: got %d; want %d", tc.name, n, len(tc.results))
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
|
||
|
func getTime(t time.Time, ok bool) string {
|
||
|
if !ok {
|
||
|
return ""
|
||
|
}
|
||
|
return t.Format("2006-01-02")
|
||
|
}
|