(* Copyright (C) 1989, Digital Equipment Corporation *) (* All rights reserved. *) (* See the file COPYRIGHT for a full description. *) (* Last modified on Sat Apr 7 00:17:00 1990 by muller *) (* modified on Fri Sep 29 13:15:38 1989 by kalsow *) (* modified on Mon Apr 25 17:53:07 1988 by stolfi *) MODULE TestParseShell EXPORTS Main; IMPORT Wr, Text, Fmt, Scan, List, ParseShell; FROM Stdio IMPORT stderr; PROCEDURE Test (t: Text.T; n: INTEGER; a0, a1, a2, a3, a4, a5: Text.T := NIL) = VAR list, shud: List.T; BEGIN Wr.PutText (stderr, "\n\ncommand = |" & t & "|"); shud := NIL; ASSERT (n <= 6); IF n > 5 THEN shud := List.New (a5, shud) END; IF n > 4 THEN shud := List.New (a4, shud) END; IF n > 3 THEN shud := List.New (a3, shud) END; IF n > 2 THEN shud := List.New (a2, shud) END; IF n > 1 THEN shud := List.New (a1, shud) END; IF n > 0 THEN shud := List.New (a0, shud) END; TRY list := ParseShell.ToList (t); PrintList (stderr, list); IF n = -1 THEN Wr.PutText (stderr, "\n ***** ERROR (should fail)") ELSIF NOT List.Equal (list, shud) THEN Wr.PutText (stderr, "\n ***** ERROR --- should be"); PrintList (stderr, shud); END; EXCEPT Scan.BadFormat => Wr.PutText (stderr, "\n Failed"); IF n # -1 THEN Wr.PutText (stderr, "\n ***** ERROR --- shoulde be"); PrintList (stderr, shud); END END; END Test; PROCEDURE PrintList (wr: Wr.T; list: List.T) = VAR i: INTEGER; BEGIN i := 0; WHILE list # NIL DO Wr.PutText (stderr, "\n argv[" & Fmt.Int (i) & "] = |" & NARROW (list.first, Text.T) & "|"); INC (i); list := list.tail END END PrintList; PROCEDURE Main () = BEGIN Test ("", 0); Test ("\'\'", 1, ""); Test ("\"\"", 1, ""); Test ("\\\\", 1, "\\"); Test ("\'", -1); Test ("\'\'\"", -1); Test (" ", 0); Test ("a", 1, "a"); Test ("\'a\'", 1, "a"); Test ("\\\'a\\\'", 1, "\'a\'"); Test ("\"a\"", 1, "a"); Test ("\\\"a\\\"", 1, "\"a\""); Test ("a\"a\'\\ \"bcd\'ef\\g\'", 1, "aa\'\\ bcdef\\g"); Test ("aa\'\\ bcd\'ef\\\'g", 1, "aa\\ bcdef\'g"); Test ("abc def ", 2, "abc", "def"); Test (" abc def ", 2, "abc", "def"); Test ("\\\' \\\" \\ \\\'\\\\\\\'", 4, "\'", "\"", " ", "\'\\\'"); END Main; EXCEPTION ASSERT_FAILED; <*INLINE*> PROCEDURE ASSERT (b: BOOLEAN) = BEGIN IF NOT b THEN RAISE ASSERT_FAILED END; END ASSERT; BEGIN Main () END ParseShellTest.