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