11import { setOption , setOptions } from "./option" ;
2+ import { Translator } from "./i18n/language" ;
23
34Object . defineProperty ( global , "navigator" , {
45 value : { language : "en-US" } ,
@@ -13,7 +14,7 @@ describe("option", () => {
1314 // Act → capture return value
1415 const result = setOption ( mockOption , "key1" , "newValue1" ) ;
1516
16- // Assert
17+ //Assert
1718 expect ( result . key1 ) . toBe ( "newValue1" ) ;
1819 expect ( mockOption . key1 ) . toBe ( "value1" ) ;
1920 } ) ;
@@ -40,19 +41,19 @@ describe("option", () => {
4041 describe ( "setOptions with language" , ( ) => {
4142 it ( "should set language when provided" , ( ) => {
4243 const mockOption : any = { } ;
43-
44+ // Act
4445 const result = setOptions ( mockOption , { language : "fr_FR" } ) ;
45-
46+ // Assert
4647 expect ( result . language ) . toEqual ( "fr_FR" ) ;
4748 } ) ;
4849
4950 it ( "should not override language when other options change" , ( ) => {
5051 const mockOption : any = {
5152 language : "en_US" ,
5253 } ;
53-
54+ // Act
5455 const result = setOptions ( mockOption , { htmlRender : true } ) ;
55-
56+ // Assert
5657 expect ( result . language ) . toEqual ( "en_US" ) ;
5758 expect ( result . htmlRender ) . toBe ( true ) ;
5859 } ) ;
@@ -63,16 +64,72 @@ describe("option", () => {
6364 htmlRender : true ,
6465 customProp : "test" ,
6566 } ;
66-
67- // Change language via setOption
67+ // Act
6868 const updatedOption = setOption ( mockOption , "language" , "fr_FR" ) ;
69-
70- // Assert language updated
69+ // Assert
7170 expect ( updatedOption . language ) . toEqual ( "fr_FR" ) ;
72-
73- // Other options should remain
7471 expect ( updatedOption . htmlRender ) . toBe ( true ) ;
7572 expect ( updatedOption . customProp ) . toBe ( "test" ) ;
7673 } ) ;
7774 } ) ;
75+
76+ describe ( "Label handling and emoji overrides" , ( ) => {
77+ it ( "should override label with emoji when language is already set" , ( ) => {
78+ const options : any = {
79+ language : "de_DE" ,
80+ nextLabel : "Weiter" ,
81+ prevLabel : "Zurück" ,
82+ doneLabel : "Fertig" ,
83+ } ;
84+
85+ const updated = setOptions ( options , { nextLabel : "➡️" } ) ;
86+
87+ expect ( updated . nextLabel ) . toBe ( "➡️" ) ; // emoji kept
88+ expect ( updated . prevLabel ) . toBe ( "Zurück" ) ; // other labels stay German
89+ expect ( updated . doneLabel ) . toBe ( "Fertig" ) ;
90+ } ) ;
91+
92+ it ( "overWritten emoji label when changing language" , ( ) => {
93+ const options : any = {
94+ language : "de_DE" ,
95+ nextLabel : "➡️" ,
96+ prevLabel : "Zurück" ,
97+ doneLabel : "Fertig" ,
98+ } ;
99+
100+ const updated = setOptions ( options , { language : "fr_FR" } ) ;
101+
102+ expect ( updated . nextLabel ) . toBe ( "Suivant" ) ; // emoji overWritten by French
103+ const t = new Translator ( "fr_FR" ) ;
104+ expect ( updated . prevLabel ) . toBe ( t . translate ( "buttons.prev" ) ) ; // now French
105+ expect ( updated . doneLabel ) . toBe ( t . translate ( "buttons.done" ) ) ;
106+ } ) ;
107+
108+ it ( "should retranslate all labels if none are custom" , ( ) => {
109+ const options : any = { language : "en_US" } ;
110+ const updated = setOptions ( options , { language : "de_DE" } ) ;
111+
112+ const t = new Translator ( "de_DE" ) ;
113+ expect ( updated . nextLabel ) . toBe ( t . translate ( "buttons.next" ) ) ;
114+ expect ( updated . prevLabel ) . toBe ( t . translate ( "buttons.prev" ) ) ;
115+ expect ( updated . doneLabel ) . toBe ( t . translate ( "buttons.done" ) ) ;
116+ } ) ;
117+
118+ it ( "should keep emoji doneLabel when language is not set" , ( ) => {
119+ const defaultOptions : any = {
120+ nextLabel : "Next" ,
121+ prevLabel : "Back" ,
122+ doneLabel : "Done" ,
123+ } ;
124+
125+ const withEmoji = setOptions ( defaultOptions , { doneLabel : "✅" } ) ;
126+
127+ const afterStart = setOptions ( withEmoji , { isActive : true } ) ;
128+
129+ expect ( afterStart . doneLabel ) . toBe ( "✅" ) ;
130+
131+ expect ( afterStart . nextLabel ) . toBe ( "Next" ) ;
132+ expect ( afterStart . prevLabel ) . toBe ( "Back" ) ;
133+ } ) ;
134+ } ) ;
78135} ) ;
0 commit comments