module Tree = Qsp_syntax.Tree module Ast = Tree.Ast module Check = Qsp_syntax.Check module S = Qsp_syntax.S module T = Qsp_syntax.T let _test_instruction = Syntax._test_instruction let _position = Syntax._position let result = [ Tree.Ast.Expression (Tree.Ast.Literal ( _position, [ T.Expression [ Tree.Ast.Literal (_position, [ T.Text "key" ]) ]; T.Text ""; ] )); ] (* String and escaped delimiter *) let nested_squote () = _test_instruction "'<<''key''>>'" result let nested_dquote () = _test_instruction {|"<<""key"">>"|} result let long_quote () = _test_instruction {|{<<{key}>>}|} result (* Mix bewteen string enclosing *) let nested_string_literal2 () = _test_instruction {|"<<'key'>>"|} result let nested_string_literal4 () = _test_instruction {|{<<'key'>>}|} result (* The current state shall remain when we are inside an expression. *) let nested_string_expression1 () = _test_instruction {|'<<(''key'')>>'|} result let nested_string_expression2 () = _test_instruction {|"<<('key')>>"|} result (* The block shall also interpreted when inside a comment *) let nested_comment () = _test_instruction "!! '<>'" result let test = ( "Literals", [ Alcotest.test_case "Nested squote" `Quick nested_squote; Alcotest.test_case "Nested string with literal2" `Quick nested_string_literal2; Alcotest.test_case "Nested dquote" `Quick nested_dquote; Alcotest.test_case "Nested string with literal4" `Quick nested_string_literal4; Alcotest.test_case "Nested long_quote" `Quick long_quote; Alcotest.test_case "Nested string with expression1" `Quick nested_string_expression1; Alcotest.test_case "Nested string with expression2" `Quick nested_string_expression2; Alcotest.test_case "Nested comment" `Quick nested_comment; ] )