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 1 commit
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 @@ -14,6 +14,7 @@ func Example_withTagsLang() {
StringCHI string `faker:"lang=chi"`
StringRUS string `faker:"lang=rus"`
StringJPN string `faker:"lang=jpn"`
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 @@ -27,6 +28,7 @@ func Example_withTagsLang() {
StringCHI: 随机字符串
StringRUS:ваЩфз
StringJPN:びゃほぱヒてふ
StringEMJ:🐅😄🕢🍪🐡
}
*/
}
6 changes: 5 additions & 1 deletion faker.go
Expand Up @@ -64,6 +64,8 @@ var (
LangRUS = langRuneBoundary{1025, 1105, nil}
// LangJPN is for japanese Hiragana Katakana language
LangJPN = langRuneBoundary{12353, 12534, []rune{12436, 12437, 12438, 12439, 12440, 12441, 12442, 12443, 12444, 12445, 12446, 12447, 12448}}
// EmotEMJ is for emoticons
EmotEMJ = langRuneBoundary{126976, 129535, nil}
)

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

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

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

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

ValueWithUndefinedLang string `faker:"lang=und"`
}
Expand All @@ -121,6 +123,7 @@ type SomeStructWithLenAndLang struct {
ValueCHI string ` faker:"len=10, lang=chi"`
ValueRUS string ` faker:"len=15, lang=rus"`
ValueJPN string ` faker:"len=20, lang=jpn"`
ValueEMJ string ` faker:"len=50, lang=emj"`
}

func (s SomeStruct) String() string {
Expand Down Expand Up @@ -595,6 +598,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 @@ -737,6 +744,15 @@ func TestLangWithLen(t *testing.T) {
if jpnLen != someStructWithLenAndLangJPN {
t.Errorf("Got %d, but expected to be %d as a string len", jpnLen, someStructWithLenAndLangJPN)
}

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