@@ -178,4 +178,227 @@ public void test_evaluate_returnTypeConsistency() {
178178 assertTrue (result instanceof String );
179179 assertEquals ("test" , result );
180180 }
181+
182+ // Additional comprehensive test cases for better coverage
183+
184+ public void test_evaluate_withUnicodeCharacters () {
185+ final Map <String , Object > params = new HashMap <>();
186+ // Test various Unicode characters including emojis
187+ final String template = "Hello 🌍 World 🚀 Test 😀" ;
188+ assertEquals (template , exampleEngine .evaluate (template , params ));
189+ }
190+
191+ public void test_evaluate_withVariousEmojiSequences () {
192+ final Map <String , Object > params = new HashMap <>();
193+ final String template = "👨👩👧👦 👍🏻 🏴" ;
194+ assertEquals (template , exampleEngine .evaluate (template , params ));
195+ }
196+
197+ public void test_evaluate_withMixedLanguages () {
198+ final Map <String , Object > params = new HashMap <>();
199+ final String template = "English 日本語 中文 한글 العربية Русский" ;
200+ assertEquals (template , exampleEngine .evaluate (template , params ));
201+ }
202+
203+ public void test_evaluate_withSQLInjectionLikeStrings () {
204+ final Map <String , Object > params = new HashMap <>();
205+ final String template = "'; DROP TABLE users; --" ;
206+ assertEquals (template , exampleEngine .evaluate (template , params ));
207+ }
208+
209+ public void test_evaluate_withXSSLikeStrings () {
210+ final Map <String , Object > params = new HashMap <>();
211+ final String template = "<script>alert('XSS')</script>" ;
212+ assertEquals (template , exampleEngine .evaluate (template , params ));
213+ }
214+
215+ public void test_evaluate_withHTMLEntities () {
216+ final Map <String , Object > params = new HashMap <>();
217+ final String template = "<div>&"'</div>" ;
218+ assertEquals (template , exampleEngine .evaluate (template , params ));
219+ }
220+
221+ public void test_evaluate_withPathTraversalLikeStrings () {
222+ final Map <String , Object > params = new HashMap <>();
223+ final String template = "../../etc/passwd" ;
224+ assertEquals (template , exampleEngine .evaluate (template , params ));
225+ }
226+
227+ public void test_evaluate_withControlCharacters () {
228+ final Map <String , Object > params = new HashMap <>();
229+ final String template = "Line1\r \n Line2\u0000 Null\u0007 Bell" ;
230+ assertEquals (template , exampleEngine .evaluate (template , params ));
231+ }
232+
233+ public void test_evaluate_withVeryLongString () {
234+ final Map <String , Object > params = new HashMap <>();
235+ final StringBuilder sb = new StringBuilder ();
236+ // Create a string of 10MB
237+ for (int i = 0 ; i < 10000 ; i ++) {
238+ sb .append ("This is a very long string for testing memory handling. " );
239+ }
240+ final String template = sb .toString ();
241+ assertEquals (template , exampleEngine .evaluate (template , params ));
242+ }
243+
244+ public void test_evaluate_consecutiveCalls () {
245+ final Map <String , Object > params = new HashMap <>();
246+ // Test that consecutive calls don't affect each other
247+ assertEquals ("first" , exampleEngine .evaluate ("first" , params ));
248+ assertEquals ("second" , exampleEngine .evaluate ("second" , params ));
249+ assertEquals ("third" , exampleEngine .evaluate ("third" , params ));
250+ }
251+
252+ public void test_evaluate_parameterMapImmutability () {
253+ final Map <String , Object > params = new HashMap <>();
254+ params .put ("key1" , "value1" );
255+ params .put ("key2" , "value2" );
256+
257+ final String template = "test" ;
258+ final int originalSize = params .size ();
259+ exampleEngine .evaluate (template , params );
260+
261+ // Verify that the parameter map was not modified
262+ assertEquals (originalSize , params .size ());
263+ assertEquals ("value1" , params .get ("key1" ));
264+ assertEquals ("value2" , params .get ("key2" ));
265+ }
266+
267+ public void test_evaluate_withNullValuesInParameterMap () {
268+ final Map <String , Object > params = new HashMap <>();
269+ params .put ("key1" , null );
270+ params .put ("key2" , "value" );
271+ params .put ("key3" , null );
272+
273+ final String template = "test with nulls" ;
274+ assertEquals (template , exampleEngine .evaluate (template , params ));
275+ }
276+
277+ public void test_evaluate_withNestedMapsInParameters () {
278+ final Map <String , Object > params = new HashMap <>();
279+ final Map <String , Object > nestedMap = new HashMap <>();
280+ nestedMap .put ("nested1" , "value1" );
281+ nestedMap .put ("nested2" , 123 );
282+ params .put ("outer" , nestedMap );
283+
284+ final String template = "nested test" ;
285+ assertEquals (template , exampleEngine .evaluate (template , params ));
286+ }
287+
288+ public void test_evaluate_withListsInParameters () {
289+ final Map <String , Object > params = new HashMap <>();
290+ final java .util .List <String > list = new java .util .ArrayList <>();
291+ list .add ("item1" );
292+ list .add ("item2" );
293+ list .add ("item3" );
294+ params .put ("list" , list );
295+
296+ final String template = "list test" ;
297+ assertEquals (template , exampleEngine .evaluate (template , params ));
298+ }
299+
300+ public void test_evaluate_templateImmutability () {
301+ final Map <String , Object > params = new HashMap <>();
302+ final String originalTemplate = "original" ;
303+ final Object result = exampleEngine .evaluate (originalTemplate , params );
304+
305+ // Verify that the returned value equals the original
306+ assertEquals (originalTemplate , result );
307+ // Verify that it's still a String
308+ assertTrue (result instanceof String );
309+ }
310+
311+ public void test_evaluate_withRegexSpecialCharacters () {
312+ final Map <String , Object > params = new HashMap <>();
313+ final String template = ".*+?^${}()|[]\\ " ;
314+ assertEquals (template , exampleEngine .evaluate (template , params ));
315+ }
316+
317+ public void test_evaluate_withJSONLikeString () {
318+ final Map <String , Object > params = new HashMap <>();
319+ final String template = "{\" key\" : \" value\" , \" number\" : 123, \" nested\" : {\" inner\" : true}}" ;
320+ assertEquals (template , exampleEngine .evaluate (template , params ));
321+ }
322+
323+ public void test_evaluate_withXMLLikeString () {
324+ final Map <String , Object > params = new HashMap <>();
325+ final String template = "<?xml version=\" 1.0\" ?><root><element attr=\" value\" >text</element></root>" ;
326+ assertEquals (template , exampleEngine .evaluate (template , params ));
327+ }
328+
329+ public void test_getName_notNull () {
330+ assertNotNull (exampleEngine .getName ());
331+ }
332+
333+ public void test_getName_notEmpty () {
334+ assertFalse (exampleEngine .getName ().isEmpty ());
335+ }
336+
337+ public void test_getName_exactValue () {
338+ final String name = exampleEngine .getName ();
339+ assertEquals ("example" , name );
340+ assertEquals (7 , name .length ());
341+ }
342+
343+ public void test_multipleInstancesWithDifferentTemplates () {
344+ final ExampleEngine engine1 = new ExampleEngine ();
345+ final ExampleEngine engine2 = new ExampleEngine ();
346+
347+ final Map <String , Object > params1 = new HashMap <>();
348+ final Map <String , Object > params2 = new HashMap <>();
349+
350+ assertEquals ("template1" , engine1 .evaluate ("template1" , params1 ));
351+ assertEquals ("template2" , engine2 .evaluate ("template2" , params2 ));
352+ }
353+
354+ public void test_evaluate_withBoundaryLengthStrings () {
355+ final Map <String , Object > params = new HashMap <>();
356+
357+ // Test single character
358+ assertEquals ("a" , exampleEngine .evaluate ("a" , params ));
359+
360+ // Test two characters
361+ assertEquals ("ab" , exampleEngine .evaluate ("ab" , params ));
362+
363+ // Test exactly 255 characters
364+ final StringBuilder sb = new StringBuilder ();
365+ for (int i = 0 ; i < 255 ; i ++) {
366+ sb .append ("x" );
367+ }
368+ final String str255 = sb .toString ();
369+ assertEquals (str255 , exampleEngine .evaluate (str255 , params ));
370+ }
371+
372+ public void test_evaluate_withBackslashCharacters () {
373+ final Map <String , Object > params = new HashMap <>();
374+ final String template = "C:\\ Users\\ Test\\ file.txt" ;
375+ assertEquals (template , exampleEngine .evaluate (template , params ));
376+ }
377+
378+ public void test_evaluate_withQuotationMarks () {
379+ final Map <String , Object > params = new HashMap <>();
380+ final String template = "He said \" Hello\" and she replied 'Hi'" ;
381+ assertEquals (template , exampleEngine .evaluate (template , params ));
382+ }
383+
384+ public void test_evaluate_stateIndependence () {
385+ final Map <String , Object > params = new HashMap <>();
386+ // First call
387+ exampleEngine .evaluate ("first call" , params );
388+ // Second call should not be affected by the first
389+ final Object result = exampleEngine .evaluate ("second call" , params );
390+ assertEquals ("second call" , result );
391+ }
392+
393+ public void test_evaluate_withNumbersOnlyString () {
394+ final Map <String , Object > params = new HashMap <>();
395+ final String template = "1234567890" ;
396+ assertEquals (template , exampleEngine .evaluate (template , params ));
397+ }
398+
399+ public void test_evaluate_withMixedContent () {
400+ final Map <String , Object > params = new HashMap <>();
401+ final String template = "Text123!@#$%^&*()_+-=[]{}|;':\" ,./<>?`~\n \t \r " ;
402+ assertEquals (template , exampleEngine .evaluate (template , params ));
403+ }
181404}
0 commit comments