1// Copyright 2016 The Go Authors. All rights reserved. 2// Use of this source code is governed by a BSD-style 3// license that can be found in the LICENSE file. 4 5package currency 6 7import ( 8 "testing" 9 "time" 10 11 "golang.org/x/text/language" 12) 13 14func 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 // The date for IE and PR seem wrong, so these may be updated at 74 // some point causing the tests to fail. 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 102func getTime(t time.Time, ok bool) string { 103 if !ok { 104 return "" 105 } 106 return t.Format("2006-01-02") 107} 108