From e15cbfc0db1b0e3c7c5e0c93a1118e38ef8cf5d9 Mon Sep 17 00:00:00 2001 From: Sergey Solodyagin Date: Wed, 28 Feb 2024 17:33:28 +0300 Subject: [PATCH] fix: test --- README.md | 13 +++++++-- go.mod | 4 +-- go.sum | 4 +-- translit.go | 42 +---------------------------- translit_test.go | 69 +++++++++++++++++++++++++++++++++--------------- 5 files changed, 64 insertions(+), 68 deletions(-) diff --git a/README.md b/README.md index 31107ee..06b1c80 100644 --- a/README.md +++ b/README.md @@ -2,9 +2,18 @@ [![GoDoc](https://godoc.org/github.com/andoma-go/translit?status.svg)](https://godoc.org/github.com/andoma-go/translit) -Хоть кода в этой библиотеке и не очень много, но время на нее все-таки было потрачено, т.к. раньше я просто не задумывался о некоторых аспектах работы с транслитерацией. +Данная библиотека обеспечивает простую транслитерацию. Для этого достаточно только описать +соответствующую таблицу подстановки символов, в которой буква проассоциирована с какой-либо +строкой. В частности, такая ассоциация для транслитерации русского языка уже определена. -В общем, как и большинство других аналогичных библиотек, она перебирает все символы в строке и заменяет их по предложенному ей словарю. Отличие только в том, что, с моей точки зрения, она более корректно отрабатывает случаи с чередованием заглавных букв. Например: +Текущая реализация подразумевает только одностороннюю транслитерацию: обратное преобразование +будет уже не так очевидно. + +Хоть кода в этой библиотеке и не очень много, но время на нее все-таки было потрачено, т.к. раньше я ([mdigger](https://github.com/mdigger)) просто не задумывался о некоторых аспектах работы с транслитерацией. + +В общем, как и большинство других аналогичных библиотек, она перебирает все символы в строке и заменяет их по предложенному ей словарю. Отличие только в том, что, с моей точки зрения ([mdigger](https://github.com/mdigger)), она более корректно отрабатывает случаи с чередованием заглавных букв. + +Например: "ЧАЩА" -> "CHASCHA" "ЧаЩа" -> "ChaScha" diff --git a/go.mod b/go.mod index 8f0847b..2251541 100644 --- a/go.mod +++ b/go.mod @@ -1,5 +1,5 @@ module github.com/andoma-go/translit -go 1.20 +go 1.21.5 -require golang.org/x/text v0.9.0 +require golang.org/x/text v0.14.0 diff --git a/go.sum b/go.sum index 20cf523..c9c7c64 100644 --- a/go.sum +++ b/go.sum @@ -1,2 +1,2 @@ -golang.org/x/text v0.9.0 h1:2sjJmO8cDvYveuX97RDLsxlyUxLl+GHoLxBiRdHllBE= -golang.org/x/text v0.9.0/go.mod h1:e1OnstbJyHTd6l/uOt8jFFHp6TRDWZR/bV3emEE/zU8= +golang.org/x/text v0.14.0 h1:ScX5w1eTa3QqT8oi6+ziP7dTV1S2+ALU0bI+0zXKWiQ= +golang.org/x/text v0.14.0/go.mod h1:18ZOQIKpY8NJVqYksKHtTdi31H5itFRjB5/qKTNYzSU= diff --git a/translit.go b/translit.go index c9f5c8c..0e87e88 100644 --- a/translit.go +++ b/translit.go @@ -1,37 +1,3 @@ -// Данная библиотека обеспечивает простую транслитерацию. Для этого достаточно только описать -// соответствующую таблицу подстановки символов, в которой буква проассоциирована с какой-либо -// строкой. В частности, такая ассоциация для транслитерации русского языка уже определена. -// -// Текущая реализация подразумевает только одностороннюю транслитерацию: обратное преобразование -// будет уже не так очевидно. -// -// Хоть кода в этой библиотеке и не очень много, но время на нее все-таки было потрачено, т.к. -// раньше я просто не задумывался о некоторых аспектах работы с транслитерацией. -// -// В общем, как и большинство других аналогичных библиотек, она перебирает все символы в строке -// и заменяет их по предложенному ей словарю. Отличие только в том, что, с моей точки зрения, она -// более корректно отрабатывает случаи с чередованием заглавных букв. Например: -// -// "ЧАЩА" -> "CHASCHA" -// "ЧаЩа" -> "ChaScha" -// "Чаща" -> "Chascha" -// "чаЩА" -> "chaSCHA" -// -// Для транслитерации русских букв в ней уже предусмотрен встроенный словарь. Для других языков -// вы можете задать свой. Все достаточно просто: -// -// import "github.com/andoma-go/translit" -// -// tests := []string{ -// "Проверочная СТРОКА для транслитерации", -// "ЧАЩА", -// "ЧаЩа", -// "Чаща", -// "чаЩА", -// } -// for _, text := range tests { -// fmt.Println(translit.Ru(text)) -// } package translit import ( @@ -57,9 +23,6 @@ type Map map[rune]string // "ЧаЩа" -> "ChaScha" // "Чаща" -> "Chascha" // "чаЩА" -> "chaSCHA" -// -// При желании, вы можете указать любую таблицу в качестве второго параметра при вызове функции, -// по которой и будет выполнено данное преобразование. func (m Map) Translate(text string) string { src := []rune(text) // преобразуем текст в набор символов @@ -77,7 +40,7 @@ func (m Map) Translate(text string) string { (i < len(src)-1 && unicode.IsUpper(src[i+1])) { str = strings.ToUpper(str) // преобразуем все буквы в заглавные } else { - str = toTitle.String(str) // преобразуем в заглавную только первый символ замены + str = cases.Title(language.Und).String(str) // преобразуем в заглавную только первый символ замены } fallthrough // выполняем подмену default: @@ -87,6 +50,3 @@ func (m Map) Translate(text string) string { return result.String() } - -// toTitle преобразует первую букву в заглавную. -var toTitle = cases.Title(language.Und) diff --git a/translit_test.go b/translit_test.go index 47597f4..e91398f 100644 --- a/translit_test.go +++ b/translit_test.go @@ -1,26 +1,53 @@ -package translit_test +package translit -import ( - "fmt" +import "testing" - "github.com/andoma-go/translit" -) - -func ExampleRuTranslit() { - tests := []string{ - "Проверочная СТРОКА для транслитерации", - "ЧАЩА", - "ЧаЩа", - "Чаща", - "чаЩА", +func TestTranslate(t *testing.T) { + type args struct { + text string } - for _, text := range tests { - fmt.Println(translit.Ru(text)) + tests := []struct { + name string + m Map + args args + want string + }{ + { + name: "ru test 1", + m: RuMap, + args: args{text: "Проверочная СТРОКА для транслитерации"}, + want: "Proverochnaja STROKA dlja transliteracii", + }, + { + name: "ru test 2", + m: RuMap, + args: args{text: "ЧАЩА"}, + want: "CHASCHA", + }, + { + name: "ru test 3", + m: RuMap, + args: args{text: "ЧаЩа"}, + want: "ChaScha", + }, + { + name: "ru test 4", + m: RuMap, + args: args{text: "Чаща"}, + want: "Chascha", + }, + { + name: "ru test 5", + m: RuMap, + args: args{text: "чаЩА"}, + want: "chaSCHA", + }, + } + for _, tt := range tests { + t.Run(tt.name, func(t *testing.T) { + if got := tt.m.Translate(tt.args.text); got != tt.want { + t.Errorf("Map.Translate() = %v, want %v", got, tt.want) + } + }) } - // Output: - // Proverochnaja STROKA dlja transliteracii - // CHASCHA - // ChaScha - // Chascha - // chaSCHA }