Skip to content
This repository has been archived by the owner on Dec 8, 2022. It is now read-only.

Support for Emoticons #155

Merged
merged 4 commits into from Feb 7, 2022
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Jump to
Jump to file
Failed to load files.
Diff view
Diff view
2 changes: 2 additions & 0 deletions example_with_tags_lang_test.go
Expand Up @@ -15,6 +15,7 @@ func Example_withTagsLang() {
StringRUS string `faker:"lang=rus"`
StringJPN string `faker:"lang=jpn"`
StringKOR string `faker:"lang=kor"`
StringEMJ string `faker:"lang=emj"`
Copy link
Owner

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Hey @geshtng thanks for the PR.

I'm curious, is there any ISO code for this language?
I tried to find one, but couldn't find one. 🤔

Copy link
Contributor Author

@geshtng geshtng Jan 27, 2022

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Actually there is none for EMJ (reference: ref-1, ref-2)
I want to make new tag like emot, but it's a bit useless (I think that "I just want a random emote, not a specific emote").
That's why I'm still using lang tag.

Edit: EMJ stand for emoji

}

a := SomeStruct{}
Expand All @@ -29,6 +30,7 @@ func Example_withTagsLang() {
StringRUS:ваЩфз
StringJPN:びゃほぱヒてふ
StringKOR:텻밚쨋큊몉
StringEMJ:🐅😄🕢🍪🐡
}
*/
}
6 changes: 5 additions & 1 deletion faker.go
Expand Up @@ -66,6 +66,8 @@ var (
LangJPN = langRuneBoundary{12353, 12534, []rune{12436, 12437, 12438, 12439, 12440, 12441, 12442, 12443, 12444, 12445, 12446, 12447, 12448}}
// LangKOR is for korean Hangul language
LangKOR = langRuneBoundary{44032, 55203, nil}
// EmotEMJ is for emoticons
EmotEMJ = langRuneBoundary{126976, 129535, nil}
)

// Supported tags
Expand Down Expand Up @@ -330,7 +332,7 @@ func SetRandomStringLength(size int) error {
return nil
}

// SetStringLang sets language of random string generation (LangENG, LangCHI, LangRUS, LangJPN, LangKOR)
// SetStringLang sets language of random string generation (LangENG, LangCHI, LangRUS, LangJPN, LangKOR, EmotEMJ)
func SetStringLang(l langRuneBoundary) {
lang = l
}
Expand Down Expand Up @@ -961,6 +963,8 @@ func extractLangFromTag(tag string) (*langRuneBoundary, error) {
return &LangJPN, nil
case "kor":
return &LangKOR, nil
case "emj":
return &EmotEMJ, nil
default:
return &LangENG, nil
}
Expand Down
18 changes: 17 additions & 1 deletion faker_test.go
Expand Up @@ -20,10 +20,11 @@ const (
someStructWithLenAndLangRUS = 15
someStructWithLenAndLangJPN = 20
someStructWithLenAndLangKOR = 25
someStructWithLenAndEmotEMJ = 50
)

var (
langCorrectTagsMap = map[string]langRuneBoundary{"lang=eng": LangENG, "lang=chi": LangCHI, "lang=rus": LangRUS, "lang=jpn": LangJPN, "lang=kor": LangKOR}
langCorrectTagsMap = map[string]langRuneBoundary{"lang=eng": LangENG, "lang=chi": LangCHI, "lang=rus": LangRUS, "lang=jpn": LangJPN, "lang=kor": LangKOR, "lang=emj": EmotEMJ}
langUncorrectTags = [3]string{"lang=", "lang", "lng=eng"}

lenCorrectTags = [3]string{"len=4", "len=5", "len=10"}
Expand Down Expand Up @@ -142,6 +143,7 @@ type SomeStructWithLang struct {
ValueRUS string `faker:"lang=rus"`
ValueJPN string `faker:"lang=jpn"`
ValueKOR string `faker:"lang=kor"`
ValueEMJ string `faker:"lang=emj"`

ValueWithUndefinedLang string `faker:"lang=und"`
}
Expand All @@ -152,6 +154,7 @@ type SomeStructWithLenAndLang struct {
ValueRUS string ` faker:"len=15, lang=rus"`
ValueJPN string ` faker:"len=20, lang=jpn"`
ValueKOR string ` faker:"len=25, lang=kor"`
ValueEMJ string ` faker:"len=50, lang=emj"`
}

func (s SomeStruct) String() string {
Expand Down Expand Up @@ -642,6 +645,10 @@ func TestLang(t *testing.T) {
if err != nil {
t.Error(err.Error())
}
err = isStringLangCorrect(someStruct.ValueEMJ, EmotEMJ)
if err != nil {
t.Error(err.Error())
}

err = isStringLangCorrect(someStruct.ValueWithUndefinedLang, LangENG)
if err != nil {
Expand Down Expand Up @@ -793,6 +800,15 @@ func TestLangWithLen(t *testing.T) {
if korLen != someStructWithLenAndLangKOR {
t.Errorf("Got %d, but expected to be %d as a string len", korLen, someStructWithLenAndLangKOR)
}

err = isStringLangCorrect(someStruct.ValueEMJ, EmotEMJ)
if err != nil {
t.Error(err.Error())
}
emjLen := utfLen(someStruct.ValueEMJ)
if emjLen != someStructWithLenAndEmotEMJ {
t.Errorf("Got %d, but expected to be %d as a string len", emjLen, someStructWithLenAndEmotEMJ)
}
}

func isStringLangCorrect(value string, lang langRuneBoundary) error {
Expand Down