package ru_RU import ( "testing" "time" "github.com/gohugoio/locales" "github.com/gohugoio/locales/currency" ) func TestLocale(t *testing.T) { trans := New() expected := "ru_RU" if trans.Locale() != expected { t.Errorf("Expected '%s' Got '%s'", expected, trans.Locale()) } } func TestPluralsRange(t *testing.T) { trans := New() tests := []struct { expected locales.PluralRule }{ { expected: locales.PluralRuleOther, }, } rules := trans.PluralsRange() expected := 4 if len(rules) != expected { t.Errorf("Expected '%d' Got '%d'", expected, len(rules)) } for _, tt := range tests { r := locales.PluralRuleUnknown for i := 0; i < len(rules); i++ { if rules[i] == tt.expected { r = rules[i] break } } if r == locales.PluralRuleUnknown { t.Errorf("Expected '%s' Got '%s'", tt.expected, r) } } } func TestPluralsOrdinal(t *testing.T) { trans := New() tests := []struct { expected locales.PluralRule }{ { expected: locales.PluralRuleOther, }, } rules := trans.PluralsOrdinal() expected := 1 if len(rules) != expected { t.Errorf("Expected '%d' Got '%d'", expected, len(rules)) } for _, tt := range tests { r := locales.PluralRuleUnknown for i := 0; i < len(rules); i++ { if rules[i] == tt.expected { r = rules[i] break } } if r == locales.PluralRuleUnknown { t.Errorf("Expected '%s' Got '%s'", tt.expected, r) } } } func TestPluralsCardinal(t *testing.T) { trans := New() tests := []struct { expected locales.PluralRule }{ { expected: locales.PluralRuleOne, }, { expected: locales.PluralRuleFew, }, { expected: locales.PluralRuleMany, }, { expected: locales.PluralRuleOther, }, } rules := trans.PluralsCardinal() expected := 4 if len(rules) != expected { t.Errorf("Expected '%d' Got '%d'", expected, len(rules)) } for _, tt := range tests { r := locales.PluralRuleUnknown for i := 0; i < len(rules); i++ { if rules[i] == tt.expected { r = rules[i] break } } if r == locales.PluralRuleUnknown { t.Errorf("Expected '%s' Got '%s'", tt.expected, r) } } } func TestRangePlurals(t *testing.T) { trans := New() tests := []struct { num1 float64 v1 uint64 num2 float64 v2 uint64 expected locales.PluralRule }{ { num1: 1, v1: 1, num2: 2, v2: 2, expected: locales.PluralRuleOther, }, { num1: 1, v1: 0, num2: 2, v2: 0, expected: locales.PluralRuleFew, }, { num1: 1, v1: 0, num2: 21, v2: 0, expected: locales.PluralRuleOne, }, { num1: 1, v1: 0, num2: 5, v2: 0, expected: locales.PluralRuleMany, }, { num1: 1, v1: 0, num2: 10, v2: 0, expected: locales.PluralRuleMany, }, { num1: 1, v1: 0, num2: 10.0, v2: 1, expected: locales.PluralRuleOther, }, { num1: 2, v1: 0, num2: 21, v2: 0, expected: locales.PluralRuleOne, }, { num1: 2, v1: 0, num2: 22, v2: 0, expected: locales.PluralRuleFew, }, { num1: 2, v1: 0, num2: 5, v2: 0, expected: locales.PluralRuleMany, }, { num1: 2, v1: 0, num2: 10, v2: 1, expected: locales.PluralRuleOther, }, { num1: 0, v1: 0, num2: 1, v2: 0, expected: locales.PluralRuleOne, }, { num1: 0, v1: 0, num2: 2, v2: 0, expected: locales.PluralRuleFew, }, { num1: 0, v1: 0, num2: 5, v2: 0, expected: locales.PluralRuleMany, }, { num1: 0, v1: 0, num2: 10, v2: 1, expected: locales.PluralRuleOther, }, { num1: 0.0, v1: 1, num2: 1, v2: 0, expected: locales.PluralRuleOne, }, { num1: 0.0, v1: 1, num2: 2, v2: 0, expected: locales.PluralRuleFew, }, { num1: 0.0, v1: 1, num2: 5, v2: 0, expected: locales.PluralRuleMany, }, { num1: 0.0, v1: 1, num2: 10.0, v2: 1, expected: locales.PluralRuleOther, }, } for _, tt := range tests { rule := trans.RangePluralRule(tt.num1, tt.v1, tt.num2, tt.v2) if rule != tt.expected { t.Errorf("Expected '%s' Got '%s'", tt.expected, rule) } } } func TestOrdinalPlurals(t *testing.T) { trans := New() tests := []struct { num float64 v uint64 expected locales.PluralRule }{ { num: 1, v: 0, expected: locales.PluralRuleOther, }, { num: 2, v: 0, expected: locales.PluralRuleOther, }, { num: 3, v: 0, expected: locales.PluralRuleOther, }, { num: 4, v: 0, expected: locales.PluralRuleOther, }, } for _, tt := range tests { rule := trans.OrdinalPluralRule(tt.num, tt.v) if rule != tt.expected { t.Errorf("Expected '%s' Got '%s'", tt.expected, rule) } } } func TestCardinalPlurals(t *testing.T) { trans := New() tests := []struct { num float64 v uint64 expected locales.PluralRule }{ { num: 1, v: 0, expected: locales.PluralRuleOne, }, { num: 21, v: 0, expected: locales.PluralRuleOne, }, { num: 31, v: 0, expected: locales.PluralRuleOne, }, { num: 2, v: 0, expected: locales.PluralRuleFew, }, { num: 3, v: 0, expected: locales.PluralRuleFew, }, { num: 22, v: 0, expected: locales.PluralRuleFew, }, { num: 23, v: 0, expected: locales.PluralRuleFew, }, { num: 0, v: 0, expected: locales.PluralRuleMany, }, { num: 5, v: 0, expected: locales.PluralRuleMany, }, { num: 11, v: 0, expected: locales.PluralRuleMany, }, { num: 100, v: 0, expected: locales.PluralRuleMany, }, } for _, tt := range tests { rule := trans.CardinalPluralRule(tt.num, tt.v) if rule != tt.expected { t.Errorf("Expected '%s' Got '%s'", tt.expected, rule) } } } func TestDaysAbbreviated(t *testing.T) { trans := New() days := trans.WeekdaysAbbreviated() for i, day := range days { s := trans.WeekdayAbbreviated(time.Weekday(i)) if s != day { t.Errorf("Expected '%s' Got '%s'", day, s) } } tests := []struct { idx int expected string }{ { idx: 0, expected: "вс", }, { idx: 1, expected: "пн", }, { idx: 2, expected: "вт", }, { idx: 3, expected: "ср", }, { idx: 4, expected: "чт", }, { idx: 5, expected: "пт", }, { idx: 6, expected: "сб", }, } for _, tt := range tests { s := trans.WeekdayAbbreviated(time.Weekday(tt.idx)) if s != tt.expected { t.Errorf("Expected '%s' Got '%s'", tt.expected, s) } } } func TestDaysNarrow(t *testing.T) { trans := New() days := trans.WeekdaysNarrow() for i, day := range days { s := trans.WeekdayNarrow(time.Weekday(i)) if s != day { t.Errorf("Expected '%s' Got '%s'", string(day), s) } } tests := []struct { idx int expected string }{ { idx: 0, expected: "вс", }, { idx: 1, expected: "пн", }, { idx: 2, expected: "вт", }, { idx: 3, expected: "ср", }, { idx: 4, expected: "чт", }, { idx: 5, expected: "пт", }, { idx: 6, expected: "сб", }, } for _, tt := range tests { s := trans.WeekdayNarrow(time.Weekday(tt.idx)) if s != tt.expected { t.Errorf("Expected '%s' Got '%s'", tt.expected, s) } } } func TestDaysShort(t *testing.T) { trans := New() days := trans.WeekdaysShort() for i, day := range days { s := trans.WeekdayShort(time.Weekday(i)) if s != day { t.Errorf("Expected '%s' Got '%s'", day, s) } } tests := []struct { idx int expected string }{ { idx: 0, expected: "вс", }, { idx: 1, expected: "пн", }, { idx: 2, expected: "вт", }, { idx: 3, expected: "ср", }, { idx: 4, expected: "чт", }, { idx: 5, expected: "пт", }, { idx: 6, expected: "сб", }, } for _, tt := range tests { s := trans.WeekdayShort(time.Weekday(tt.idx)) if s != tt.expected { t.Errorf("Expected '%s' Got '%s'", tt.expected, s) } } } func TestDaysWide(t *testing.T) { trans := New() days := trans.WeekdaysWide() for i, day := range days { s := trans.WeekdayWide(time.Weekday(i)) if s != day { t.Errorf("Expected '%s' Got '%s'", day, s) } } tests := []struct { idx int expected string }{ { idx: 0, expected: "воскресенье", }, { idx: 1, expected: "понедельник", }, { idx: 2, expected: "вторник", }, { idx: 3, expected: "среда", }, { idx: 4, expected: "четверг", }, { idx: 5, expected: "пятница", }, { idx: 6, expected: "суббота", }, } for _, tt := range tests { s := trans.WeekdayWide(time.Weekday(tt.idx)) if s != tt.expected { t.Errorf("Expected '%s' Got '%s'", tt.expected, s) } } } func TestMonthsAbbreviated(t *testing.T) { trans := New() months := trans.MonthsAbbreviated() for i, month := range months { s := trans.MonthAbbreviated(time.Month(i + 1)) if s != month { t.Errorf("Expected '%s' Got '%s'", month, s) } } tests := []struct { idx int expected string }{ { idx: 1, expected: "янв.", }, { idx: 2, expected: "февр.", }, { idx: 3, expected: "мар.", }, { idx: 4, expected: "апр.", }, { idx: 5, expected: "мая", }, { idx: 6, expected: "июн.", }, { idx: 7, expected: "июл.", }, { idx: 8, expected: "авг.", }, { idx: 9, expected: "сент.", }, { idx: 10, expected: "окт.", }, { idx: 11, expected: "нояб.", }, { idx: 12, expected: "дек.", }, } for _, tt := range tests { s := trans.MonthAbbreviated(time.Month(tt.idx)) if s != tt.expected { t.Errorf("Expected '%s' Got '%s'", tt.expected, s) } } } func TestMonthsNarrow(t *testing.T) { trans := New() months := trans.MonthsNarrow() for i, month := range months { s := trans.MonthNarrow(time.Month(i + 1)) if s != month { t.Errorf("Expected '%s' Got '%s'", month, s) } } tests := []struct { idx int expected string }{ { idx: 1, expected: "Я", }, { idx: 2, expected: "Ф", }, { idx: 3, expected: "М", }, { idx: 4, expected: "А", }, { idx: 5, expected: "М", }, { idx: 6, expected: "И", }, { idx: 7, expected: "И", }, { idx: 8, expected: "А", }, { idx: 9, expected: "С", }, { idx: 10, expected: "О", }, { idx: 11, expected: "Н", }, { idx: 12, expected: "Д", }, } for _, tt := range tests { s := trans.MonthNarrow(time.Month(tt.idx)) if s != tt.expected { t.Errorf("Expected '%s' Got '%s'", tt.expected, s) } } } func TestMonthsWide(t *testing.T) { trans := New() months := trans.MonthsWide() for i, month := range months { s := trans.MonthWide(time.Month(i + 1)) if s != month { t.Errorf("Expected '%s' Got '%s'", month, s) } } tests := []struct { idx int expected string }{ { idx: 1, expected: "января", }, { idx: 2, expected: "февраля", }, { idx: 3, expected: "марта", }, { idx: 4, expected: "апреля", }, { idx: 5, expected: "мая", }, { idx: 6, expected: "июня", }, { idx: 7, expected: "июля", }, { idx: 8, expected: "августа", }, { idx: 9, expected: "сентября", }, { idx: 10, expected: "октября", }, { idx: 11, expected: "ноября", }, { idx: 12, expected: "декабря", }, } for _, tt := range tests { s := string(trans.MonthWide(time.Month(tt.idx))) if s != tt.expected { t.Errorf("Expected '%s' Got '%s'", tt.expected, s) } } } func TestFmtTimeFull(t *testing.T) { loc, err := time.LoadLocation("America/Toronto") if err != nil { t.Errorf("Expected '' Got '%s'", err) } fixed := time.FixedZone("OTHER", -4) tests := []struct { t time.Time expected string }{ { t: time.Date(2016, 02, 03, 9, 5, 1, 0, loc), expected: "09:05:01 Восточная Америка, стандартное время", }, { t: time.Date(2016, 02, 03, 20, 5, 1, 0, fixed), expected: "20:05:01 OTHER", }, } trans := New() for _, tt := range tests { s := trans.FmtTimeFull(tt.t) if s != tt.expected { t.Errorf("Expected '%s' Got '%s'", tt.expected, s) } } } func TestFmtTimeLong(t *testing.T) { loc, err := time.LoadLocation("America/Toronto") if err != nil { t.Errorf("Expected '' Got '%s'", err) } tests := []struct { t time.Time expected string }{ { t: time.Date(2016, 02, 03, 9, 5, 1, 0, loc), expected: "09:05:01 EST", }, { t: time.Date(2016, 02, 03, 20, 5, 1, 0, loc), expected: "20:05:01 EST", }, } trans := New() for _, tt := range tests { s := trans.FmtTimeLong(tt.t) if s != tt.expected { t.Errorf("Expected '%s' Got '%s'", tt.expected, s) } } } func TestFmtTimeMedium(t *testing.T) { tests := []struct { t time.Time expected string }{ { t: time.Date(2016, 02, 03, 9, 5, 1, 0, time.UTC), expected: "09:05:01", }, { t: time.Date(2016, 02, 03, 20, 5, 1, 0, time.UTC), expected: "20:05:01", }, } trans := New() for _, tt := range tests { s := trans.FmtTimeMedium(tt.t) if s != tt.expected { t.Errorf("Expected '%s' Got '%s'", tt.expected, s) } } } func TestFmtTimeShort(t *testing.T) { tests := []struct { t time.Time expected string }{ { t: time.Date(2016, 02, 03, 9, 5, 1, 0, time.UTC), expected: "09:05", }, { t: time.Date(2016, 02, 03, 20, 5, 1, 0, time.UTC), expected: "20:05", }, } trans := New() for _, tt := range tests { s := trans.FmtTimeShort(tt.t) if s != tt.expected { t.Errorf("Expected '%s' Got '%s'", tt.expected, s) } } } func TestFmtDateFull(t *testing.T) { tests := []struct { t time.Time expected string }{ { t: time.Date(2016, 02, 03, 9, 0, 1, 0, time.UTC), expected: "среда, 3 февраля 2016 г.", }, } trans := New() for _, tt := range tests { s := trans.FmtDateFull(tt.t) if s != tt.expected { t.Errorf("Expected '%s' Got '%s'", tt.expected, s) } } } func TestFmtDateLong(t *testing.T) { tests := []struct { t time.Time expected string }{ { t: time.Date(2016, 02, 03, 9, 0, 1, 0, time.UTC), expected: "3 февраля 2016 г.", }, } trans := New() for _, tt := range tests { s := trans.FmtDateLong(tt.t) if s != tt.expected { t.Errorf("Expected '%s' Got '%s'", tt.expected, s) } } } func TestFmtDateMedium(t *testing.T) { tests := []struct { t time.Time expected string }{ { t: time.Date(2016, 02, 03, 9, 0, 1, 0, time.UTC), expected: "3 февр. 2016 г.", }, } trans := New() for _, tt := range tests { s := trans.FmtDateMedium(tt.t) if s != tt.expected { t.Errorf("Expected '%s' Got '%s'", tt.expected, s) } } } func TestFmtDateShort(t *testing.T) { tests := []struct { t time.Time expected string }{ { t: time.Date(2016, 02, 03, 9, 0, 1, 0, time.UTC), expected: "03.02.2016", // date format changed from v29 dd.MM.yy to v30 dd.MM.y so adjusted test for new CLDR data }, { t: time.Date(-500, 02, 03, 9, 0, 1, 0, time.UTC), expected: "03.02.500", }, } trans := New() for _, tt := range tests { s := trans.FmtDateShort(tt.t) if s != tt.expected { t.Errorf("Expected '%s' Got '%s'", tt.expected, s) } } } func TestFmtNumber(t *testing.T) { tests := []struct { num float64 v uint64 expected string }{ { num: 1123456.5643, v: 2, expected: "1 123 456,56", }, { num: 1123456.5643, v: 1, expected: "1 123 456,6", }, { num: 221123456.5643, v: 3, expected: "221 123 456,564", }, { num: -221123456.5643, v: 3, expected: "-221 123 456,564", }, { num: -221123456.5643, v: 3, expected: "-221 123 456,564", }, { num: 0, v: 2, expected: "0,00", }, { num: -0, v: 2, expected: "0,00", }, { num: -0, v: 2, expected: "0,00", }, } trans := New() for _, tt := range tests { s := trans.FmtNumber(tt.num, tt.v) if s != tt.expected { t.Errorf("Expected '%s' Got '%s'", tt.expected, s) } } } func TestFmtCurrency(t *testing.T) { tests := []struct { num float64 v uint64 currency currency.Type expected string }{ { num: 1123456.5643, v: 2, currency: currency.USD, expected: "1 123 456,56 USD", }, { num: 1123456.5643, v: 1, currency: currency.USD, expected: "1 123 456,60 USD", }, { num: 221123456.5643, v: 3, currency: currency.USD, expected: "221 123 456,564 USD", }, { num: -221123456.5643, v: 3, currency: currency.USD, expected: "-221 123 456,564 USD", }, { num: -221123456.5643, v: 3, currency: currency.CAD, expected: "-221 123 456,564 CAD", }, { num: 0, v: 2, currency: currency.USD, expected: "0,00 USD", }, { num: -0, v: 2, currency: currency.USD, expected: "0,00 USD", }, { num: -0, v: 2, currency: currency.CAD, expected: "0,00 CAD", }, { num: 1.23, v: 0, currency: currency.USD, expected: "1,00 USD", }, } trans := New() for _, tt := range tests { s := trans.FmtCurrency(tt.num, tt.v, tt.currency) if s != tt.expected { t.Errorf("Expected '%s' Got '%s'", tt.expected, s) } } } func TestFmtAccounting(t *testing.T) { tests := []struct { num float64 v uint64 currency currency.Type expected string }{ { num: 1123456.5643, v: 2, currency: currency.USD, expected: "1 123 456,56 USD", }, { num: 1123456.5643, v: 1, currency: currency.USD, expected: "1 123 456,60 USD", }, { num: 221123456.5643, v: 3, currency: currency.USD, expected: "221 123 456,564 USD", }, { num: -221123456.5643, v: 3, currency: currency.USD, expected: "-221 123 456,564 USD", }, { num: -221123456.5643, v: 3, currency: currency.CAD, expected: "-221 123 456,564 CAD", }, { num: -0, v: 2, currency: currency.USD, expected: "0,00 USD", }, { num: -0, v: 2, currency: currency.CAD, expected: "0,00 CAD", }, { num: 1.23, v: 0, currency: currency.USD, expected: "1,00 USD", }, } trans := New() for _, tt := range tests { s := trans.FmtAccounting(tt.num, tt.v, tt.currency) if s != tt.expected { t.Errorf("Expected '%s' Got '%s'", tt.expected, s) } } } func TestFmtPercent(t *testing.T) { tests := []struct { num float64 v uint64 expected string }{ { num: 15, v: 0, expected: "15%", }, { num: 15, v: 2, expected: "15,00%", }, { num: 434.45, v: 0, expected: "434%", }, { num: 34.4, v: 2, expected: "34,40%", }, { num: -34, v: 0, expected: "-34%", }, } trans := New() for _, tt := range tests { s := trans.FmtPercent(tt.num, tt.v) if s != tt.expected { t.Errorf("Expected '%s' Got '%s'", tt.expected, s) } } }