| // 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") | |
| } |