@@ -514,6 +514,48 @@ defmodule CodeTest do
514514             } 
515515  end 
516516
517+   test  "string_to_quoted handles unescape errors properly"  do 
518+     # Test invalid hex escape character 
519+     assert  { :error ,  { meta ,  message ,  token } }  =  Code . string_to_quoted ( "a.'\\ xg'" ) 
520+ 
521+     assert  meta [ :line ]  ==  1 
522+     assert  meta [ :column ]  ==  3 
523+ 
524+     assert  message  == 
525+              "invalid hex escape character, expected \\ xHH where H is a hexadecimal digit. Syntax error after: " 
526+ 
527+     assert  token  ==  "\\ x" 
528+ 
529+     # Test invalid Unicode escape character 
530+     assert  { :error ,  { meta2 ,  message2 ,  token2 } }  =  Code . string_to_quoted ( "a.'\\ ug'" ) 
531+ 
532+     assert  meta2 [ :line ]  ==  1 
533+     assert  meta2 [ :column ]  ==  3 
534+ 
535+     assert  message2  == 
536+              "invalid Unicode escape character, expected \\ uHHHH or \\ u{H*} where H is a hexadecimal digit. Syntax error after: " 
537+ 
538+     assert  token2  ==  "\\ u" 
539+ 
540+     # Test invalid Unicode code point (surrogate pair) 
541+     assert  { :error ,  { meta3 ,  message3 ,  token3 } }  =  Code . string_to_quoted ( "a.'\\ u{D800}'" ) 
542+ 
543+     assert  meta3 [ :line ]  ==  1 
544+     assert  meta3 [ :column ]  ==  3 
545+ 
546+     assert  message3  ==  "invalid or reserved Unicode code point \\ u{D800}. Syntax error after: " 
547+     assert  token3  ==  "\\ u" 
548+ 
549+     # Test Unicode code point beyond valid range 
550+     assert  { :error ,  { meta4 ,  message4 ,  token4 } }  =  Code . string_to_quoted ( "a.'\\ u{110000}'" ) 
551+ 
552+     assert  meta4 [ :line ]  ==  1 
553+     assert  meta4 [ :column ]  ==  3 
554+ 
555+     assert  message4  ==  "invalid or reserved Unicode code point \\ u{110000}. Syntax error after: " 
556+     assert  token4  ==  "\\ u" 
557+   end 
558+ 
517559  @ tag  :requires_source 
518560  test  "compile source"  do 
519561    assert  __MODULE__ . __info__ ( :compile ) [ :source ]  ==  String . to_charlist ( __ENV__ . file ) 
0 commit comments