@@ -3,26 +3,26 @@ import 'package:file/memory.dart';
33import 'package:test/test.dart' ;
44
55void main () {
6+ const argResultsApiKey = 'argResultsApiKey' ;
7+ const argResultsDisableSafety = true ;
8+ const argResultsContext = 'argResultsContext' ;
9+ const argResultsExcludeLocales = ['pl' ];
10+ const argResultsBatchSize = 4096 ;
11+ const argResultsArbDir = 'argResultsArbDir' ;
12+ const argResultsTemplateArbFile = 'argResultsTemplateArbFile' ;
13+ const argResultsUseEscaping = true ;
14+ const argResultsRelaxSyntax = true ;
15+
616 group (
717 'TranslateOptions' ,
818 () {
919 test (
1020 'resolve returns options with values from argResults over yamlResults' ,
1121 () {
12- const argResultsModelProvider = ModelProvider .gemini ;
22+ const argResultsModel = Model .gemini25Flash ;
1323 const argResultsCustomModelProviderUrl =
1424 'http://argResultsCustomModelProviderBaseUrl' ;
15- const argResultsModel = Model .gemini25Flash;
1625 const argResultsCustomModel = 'argResultsCustomModel' ;
17- const argResultsApiKey = 'argResultsApiKey' ;
18- const argResultsDisableSafety = true ;
19- const argResultsContext = 'argResultsContext' ;
20- const argResultsExcludeLocales = ['pl' ];
21- const argResultsBatchSize = 4096 ;
22- const argResultsArbDir = 'argResultsArbDir' ;
23- const argResultsTemplateArbFile = 'argResultsTemplateArbFile' ;
24- const argResultsUseEscaping = true ;
25- const argResultsRelaxSyntax = true ;
2626
2727 final argResults = TranslateArgResults (
2828 help: false ,
@@ -64,11 +64,6 @@ void main() {
6464 expect (
6565 translateOptions,
6666 isA <TranslateOptions >()
67- .having (
68- (options) => options.modelProvider,
69- 'modelProvider' ,
70- argResultsModelProvider,
71- )
7267 .having (
7368 (options) => options.customModelProviderBaseUrl,
7469 'customModelProviderBaseUrl' ,
@@ -134,4 +129,114 @@ void main() {
134129 );
135130 },
136131 );
132+
133+ group (
134+ 'modelProvider resolving' ,
135+ () {
136+ test ('resolves gemini provider' , () {
137+ const argResultsModel = Model .gemini25Flash;
138+
139+ final argResults = TranslateArgResults (
140+ help: false ,
141+ customModelProviderBaseUrl: null ,
142+ model: argResultsModel,
143+ customModel: null ,
144+ apiKey: argResultsApiKey,
145+ disableSafety: argResultsDisableSafety,
146+ context: argResultsContext,
147+ excludeLocales: argResultsExcludeLocales,
148+ batchSize: argResultsBatchSize,
149+ arbDir: argResultsArbDir,
150+ templateArbFile: argResultsTemplateArbFile,
151+ useEscaping: argResultsUseEscaping,
152+ relaxSyntax: argResultsRelaxSyntax,
153+ );
154+ final yamlResults = TranslateYamlResults .empty ();
155+
156+ final translateOptions = TranslateOptions .resolve (
157+ MemoryFileSystem (),
158+ argResults,
159+ yamlResults,
160+ );
161+
162+ expect (
163+ translateOptions,
164+ isA <TranslateOptions >().having ((options) => options.modelProvider,
165+ 'modelProvider' , ModelProvider .gemini));
166+ });
167+
168+ test ('resolves openAI provider' , () {
169+ const argResultsModel = Model .gpt5Mini;
170+
171+ final argResults = TranslateArgResults (
172+ help: false ,
173+ customModelProviderBaseUrl: null ,
174+ model: argResultsModel,
175+ customModel: null ,
176+ apiKey: argResultsApiKey,
177+ disableSafety: argResultsDisableSafety,
178+ context: argResultsContext,
179+ excludeLocales: argResultsExcludeLocales,
180+ batchSize: argResultsBatchSize,
181+ arbDir: argResultsArbDir,
182+ templateArbFile: argResultsTemplateArbFile,
183+ useEscaping: argResultsUseEscaping,
184+ relaxSyntax: argResultsRelaxSyntax,
185+ );
186+ final yamlResults = TranslateYamlResults .empty ();
187+
188+ final translateOptions = TranslateOptions .resolve (
189+ MemoryFileSystem (),
190+ argResults,
191+ yamlResults,
192+ );
193+
194+ expect (
195+ translateOptions,
196+ isA <TranslateOptions >().having ((options) => options.modelProvider,
197+ 'modelProvider' , ModelProvider .openAi));
198+ });
199+
200+ test (
201+ 'resolves customOpenAiCompatible provider with custom model taking precedence' ,
202+ () {
203+ const argResultsModel = Model .gemini25Flash;
204+ const argResultsCustomModelProviderUrl =
205+ 'http://argResultsCustomModelProviderBaseUrl' ;
206+ const argResultsCustomModel = 'argResultsCustomModel' ;
207+
208+ final argResults = TranslateArgResults (
209+ help: false ,
210+ customModelProviderBaseUrl: argResultsCustomModelProviderUrl,
211+ model: argResultsModel,
212+ customModel: argResultsCustomModel,
213+ apiKey: argResultsApiKey,
214+ disableSafety: argResultsDisableSafety,
215+ context: argResultsContext,
216+ excludeLocales: argResultsExcludeLocales,
217+ batchSize: argResultsBatchSize,
218+ arbDir: argResultsArbDir,
219+ templateArbFile: argResultsTemplateArbFile,
220+ useEscaping: argResultsUseEscaping,
221+ relaxSyntax: argResultsRelaxSyntax,
222+ );
223+ final yamlResults = TranslateYamlResults .empty ();
224+
225+ final translateOptions = TranslateOptions .resolve (
226+ MemoryFileSystem (),
227+ argResults,
228+ yamlResults,
229+ );
230+
231+ expect (
232+ translateOptions,
233+ isA <TranslateOptions >()
234+ .having ((o) => o.modelProvider, 'modelProvider' ,
235+ ModelProvider .customOpenAiCompatible)
236+ .having (
237+ (o) => o.customModel, 'customModel' , argResultsCustomModel),
238+ );
239+ });
240+ },
241+ );
137242}
0 commit comments