CommandTest.Mod 1.5 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849
  1. MODULE CommandTest; (** AUTHOR "negelef"; PURPOSE "Simple command tester"; *)
  2. IMPORT Commands, TestSuite, Streams, Files, Diagnostics;
  3. TYPE Tester = OBJECT (TestSuite.Tester)
  4. VAR command: ARRAY 256 OF CHAR;
  5. VAR tempname: Files.FileName;
  6. PROCEDURE Handle (reader: Streams.Reader; position: LONGINT; CONST name: ARRAY OF CHAR; type: TestSuite.TestType): INTEGER;
  7. VAR res: WORD; msg: ARRAY 128 OF CHAR; result: INTEGER; file: Files.File; writer: Files.Writer;
  8. BEGIN
  9. result := TestSuite.Failure;
  10. file := Files.New (tempname);
  11. IF file # NIL THEN
  12. Files.OpenWriter (writer, file, 0);
  13. IF file # NIL THEN
  14. Streams.Copy (reader, writer);
  15. writer.Update;
  16. Files.Register (file);
  17. Commands.Call (command, {Commands.Wait}, res, msg);
  18. IF res = Commands.Ok THEN result := TestSuite.Positive ELSE result := TestSuite.Negative END;
  19. END;
  20. END;
  21. FINALLY
  22. RETURN result;
  23. END Handle;
  24. END Tester;
  25. (** Verbose output: CompileTest.Test Command TempFile TestFile ~ *)
  26. (** Regression test: CompileTest.Test Command TempFile TestFile ResultFile ~ *)
  27. PROCEDURE Test* (context: Commands.Context);
  28. VAR diagnostics: Diagnostics.StreamDiagnostics; tester: Tester; report: TestSuite.StreamReport;
  29. BEGIN
  30. NEW (diagnostics, context.error);
  31. NEW (tester, diagnostics);
  32. NEW (report, context.out);
  33. IF ~context.arg.GetString (tester.command) OR ~context.arg.GetString (tester.tempname) THEN
  34. context.result := Commands.CommandParseError;
  35. RETURN;
  36. END;
  37. TestSuite.Drive (context, tester);
  38. tester.Print (report);
  39. END Test;
  40. END CommandTest.
  41. System.Free CommandTest ~