123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190 |
- // Copyright 2017 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 number
- import (
- "strings"
- "testing"
- "golang.org/x/text/language"
- "golang.org/x/text/message"
- )
- func TestFormatter(t *testing.T) {
- overrides := map[string]string{
- "en": "*e#######0",
- "nl": "*n#######0",
- }
- testCases := []struct {
- desc string
- tag string
- f Formatter
- want string
- }{{
- desc: "decimal",
- f: Decimal(3),
- want: "3",
- }, {
- desc: "decimal fraction",
- f: Decimal(0.123),
- want: "0.123",
- }, {
- desc: "separators",
- f: Decimal(1234.567),
- want: "1,234.567",
- }, {
- desc: "no separators",
- f: Decimal(1234.567, NoSeparator()),
- want: "1234.567",
- }, {
- desc: "max integer",
- f: Decimal(1973, MaxIntegerDigits(2)),
- want: "73",
- }, {
- desc: "max integer overflow",
- f: Decimal(1973, MaxIntegerDigits(1000)),
- want: "1,973",
- }, {
- desc: "min integer",
- f: Decimal(12, MinIntegerDigits(5)),
- want: "00,012",
- }, {
- desc: "max fraction zero",
- f: Decimal(0.12345, MaxFractionDigits(0)),
- want: "0",
- }, {
- desc: "max fraction 2",
- f: Decimal(0.12, MaxFractionDigits(2)),
- want: "0.12",
- }, {
- desc: "min fraction 2",
- f: Decimal(0.12, MaxFractionDigits(2)),
- want: "0.12",
- }, {
- desc: "max fraction overflow",
- f: Decimal(0.125, MaxFractionDigits(1e6)),
- want: "0.125",
- }, {
- desc: "min integer overflow",
- f: Decimal(0, MinIntegerDigits(1e6)),
- want: strings.Repeat("000,", 255/3-1) + "000",
- }, {
- desc: "min fraction overflow",
- f: Decimal(0, MinFractionDigits(1e6)),
- want: "0." + strings.Repeat("0", 255), // TODO: fraction separators
- }, {
- desc: "format width",
- f: Decimal(123, FormatWidth(10)),
- want: " 123",
- }, {
- desc: "format width pad option before",
- f: Decimal(123, Pad('*'), FormatWidth(10)),
- want: "*******123",
- }, {
- desc: "format width pad option after",
- f: Decimal(123, FormatWidth(10), Pad('*')),
- want: "*******123",
- }, {
- desc: "format width illegal",
- f: Decimal(123, FormatWidth(-1)),
- want: "123",
- }, {
- desc: "increment",
- f: Decimal(10.33, IncrementString("0.5")),
- want: "10.5",
- }, {
- desc: "increment",
- f: Decimal(10, IncrementString("ppp")),
- want: "10",
- }, {
- desc: "increment and scale",
- f: Decimal(10.33, IncrementString("0.5"), Scale(2)),
- want: "10.50",
- }, {
- desc: "pattern overrides en",
- tag: "en",
- f: Decimal(101, PatternOverrides(overrides)),
- want: "eeeee101",
- }, {
- desc: "pattern overrides nl",
- tag: "nl",
- f: Decimal(101, PatternOverrides(overrides)),
- want: "nnnnn101",
- }, {
- desc: "pattern overrides de",
- tag: "de",
- f: Decimal(101, PatternOverrides(overrides)),
- want: "101",
- }, {
- desc: "language selection",
- tag: "bn",
- f: Decimal(123456.78, Scale(2)),
- want: "১,২৩,৪৫৬.৭৮",
- }, {
- desc: "scale",
- f: Decimal(1234.567, Scale(2)),
- want: "1,234.57",
- }, {
- desc: "scientific",
- f: Scientific(3.00),
- want: "3\u202f×\u202f10⁰",
- }, {
- desc: "scientific",
- f: Scientific(1234),
- want: "1.234\u202f×\u202f10³",
- }, {
- desc: "scientific",
- f: Scientific(1234, Scale(2)),
- want: "1.23\u202f×\u202f10³",
- }, {
- desc: "engineering",
- f: Engineering(12345),
- want: "12.345\u202f×\u202f10³",
- }, {
- desc: "engineering scale",
- f: Engineering(12345, Scale(2)),
- want: "12.34\u202f×\u202f10³",
- }, {
- desc: "engineering precision(4)",
- f: Engineering(12345, Precision(4)),
- want: "12.34\u202f×\u202f10³",
- }, {
- desc: "engineering precision(2)",
- f: Engineering(1234.5, Precision(2)),
- want: "1.2\u202f×\u202f10³",
- }, {
- desc: "percent",
- f: Percent(0.12),
- want: "12%",
- }, {
- desc: "permille",
- f: PerMille(0.123),
- want: "123‰",
- }, {
- desc: "percent rounding",
- f: PerMille(0.12345),
- want: "123‰",
- }, {
- desc: "percent fraction",
- f: PerMille(0.12345, Scale(2)),
- want: "123.45‰",
- }, {
- desc: "percent fraction",
- f: PerMille(0.12344, Scale(1)),
- want: "123.4‰",
- }}
- for _, tc := range testCases {
- t.Run(tc.desc, func(t *testing.T) {
- tag := language.Und
- if tc.tag != "" {
- tag = language.MustParse(tc.tag)
- }
- got := message.NewPrinter(tag).Sprint(tc.f)
- if got != tc.want {
- t.Errorf("got %q; want %q", got, tc.want)
- }
- })
- }
- }
|