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