2
0

fix: test

This commit is contained in:
2024-02-28 17:33:28 +03:00
parent 80821f751a
commit e15cbfc0db
5 changed files with 64 additions and 68 deletions
+11 -2
View File
@@ -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"
+2 -2
View File
@@ -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
+2 -2
View File
@@ -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=
+1 -41
View File
@@ -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)
+48 -21
View File
@@ -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
}