rclone/vendor/golang.org/x/text/number/number_test.go
2018-01-16 13:20:59 +00:00

191 lines
4.3 KiB
Go
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

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