1() = evalfile ("inc.sl");
2
3testing_feature ("Multiline strings");
4private define break_string (str, rep)
5{
6   (str, ) = strreplace (str, "\n", rep, strlen (str));
7   return str;
8}
9
10define test_string (str)
11{
12   variable ml = break_string (str, "\\n\\\n");
13   ml = eval(`"` + ml + `";`);
14   if (str != ml)
15     {
16	failed ("%s --> %s", str, ml);
17     }
18
19   ml = break_string (str, "\n");
20   ml = eval(```` + ml + ```;`);
21   if (str != ml)
22     {
23	failed ("%s --> %s", str, ml);
24     }
25}
26
27test_string ("1 This is\na multiline\nstring\n");
28
29eval(`
30define test_string2 (str, ans)
31{
32   if (str != ans)
33     {
34	failed ("str != ans, where str=%s, ans=%s", str, ans);
35	return;
36     }
37}
38`);
39test_string2 (`2 This is\na multiline\nstring\n`,
40	      "2 This is\\na multiline\\nstring\\n");
41test_string2 (`3 This is\\\na multiline\nstring\nX`Q,
42	      "3 This is\\\na multiline\nstring\nX");
43
44eval("\
45define test_string3 (str, ans)\n\
46{\n\
47   if (str != ans)\n\
48     {\n\
49	failed (\"str != ans, where str=%S, ans=%S\", str, ans);\n\
50	return;\n\
51     }\n\
52}\n\
53");
54test_string3 (`2 This is\na multiline\nstring\n`,
55	      "2 This is\\na multiline\\nstring\\n");
56test_string3 (`3 This is\\\na multiline\nstring\nX`Q,
57	      "3 This is\\\na multiline\nstring\nX");
58variable FOO = "multiline";
59test_string3 (`4 This is\\\na ${FOO}\nstring\nX`Q$,
60	      "4 This is\\\na multiline\nstring\nX");
61test_string3 (`5 This is\na ${FOO}
62string\n`$,
63	      "5 This is\\na multiline\nstring\\n");
64
65test_string3 (`6 This is
66 a \0 binary
67 string\0`BQ,
68	      "6 This is\n a \0 binary\n string\0");
69
70print ("Ok\n");
71
72exit (0);
73
74