123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339 |
- # Testing the functionality of the module HRVAnalysis
- #
- # The following denotes to the parser which regression test file to use.
- # $Regression: CSV.Test.tmp$
- # WMUtilities.Call PCTest.Execute CSV.Test ~ Verbose testing mode
- # WMUtilities.Call PCTest.Execute CSV.Test CSV.Test.tmp ~ Regression testing mode
- # Use halt or asserts to check for the output you expect
- # There are two directives for the test cases:
- # - positive
- # expects that no ASSERT fails and no HALT is executed
- # - negative
- # expects that a HALT is executed or an ASSERT fails
- #
- # It is better to specify all running test cases as positive so the trap window only opens
- # really if a test case failed.
- positive: UNLOAD the CSV module before the tests
- MODULE Test;
- IMPORT Modules;
- VAR res: WORD; msg: ARRAY 64 OF CHAR;
- BEGIN
- Modules.FreeModule("TestShared", res, msg);
- Modules.FreeModule("CSV", res, msg);
- END Test.
- positive: setup test base module with shared functions
- MODULE TestShared;
- IMPORT Files, CSV, Modules, Strings;
- CONST fn = "CSV.Test.input.tmp.csv";
- VAR f: Files.File; w: Files.Writer; canTest: BOOLEAN;
- PROCEDURE GetWriter*(): Files.Writer;
- BEGIN
- ASSERT(canTest);
- IF w = NIL THEN
- f := Files.New(fn);
- Files.OpenWriter(w, f, 0);
- END;
- RETURN w;
- END GetWriter;
- PROCEDURE CloseWriter*;
- BEGIN
- ASSERT(canTest);
- w.Update(); Files.Register(f); f := NIL; w := NIL;
- END CloseWriter;
- PROCEDURE GetScanner*(csv: CSV.CSV): CSV.Scanner;
- VAR r: Files.Reader; fl: Files.File; scan: CSV.Scanner;
- BEGIN
- ASSERT(canTest);
- fl := Files.Old(fn);
- Files.OpenReader(r, fl, 0);
- NEW(scan, csv, r);
- RETURN scan;
- END GetScanner;
- PROCEDURE Cleanup;
- VAR fnstr: Strings.String; res: WORD;
- BEGIN
- IF canTest THEN
- fnstr := Strings.NewString(fn);
- Files.Delete(fnstr^, res);
- END;
- END Cleanup;
- BEGIN
- canTest := Files.Old(fn) = NIL;
- Modules.InstallTermHandler(Cleanup);
- END TestShared.
- positive: parse empty file gives empty CSV
- MODULE Test;
- IMPORT CSV, Streams, Strings, TestShared;
- VAR w: Streams.Writer; csv, csvref: CSV.CSV; s: CSV.Scanner;
- BEGIN
- w := TestShared.GetWriter();
- csvref := CSV.GetDefaultCSV();
- csvref.NewLine();
- TestShared.CloseWriter();
- csv := CSV.GetDefaultCSV();
- s := TestShared.GetScanner(csv);
- s.Scan();
- ASSERT(CSV.CompareCSVs(csv, csvref));
- END Test.
- positive: completely empty line doesn't produce a field
- MODULE Test;
- IMPORT CSV, Streams, Strings, TestShared;
- VAR w: Streams.Writer; csv, csvref: CSV.CSV; s: CSV.Scanner;
- BEGIN
- w := TestShared.GetWriter();
- csvref := CSV.GetDefaultCSV();
- csvref.NewLine();
- csvref.AddField("Test line"); csvref.AddField("32");
- w.String('"Test line",32');
- csvref.NewLine();
- w.Ln();
- TestShared.CloseWriter();
- csv := CSV.GetDefaultCSV();
- s := TestShared.GetScanner(csv);
- s.Scan();
- ASSERT(CSV.CompareCSVs(csv, csvref));
- END Test.
- positive: empty field at the beginning of a line is recognised
- MODULE Test;
- IMPORT CSV, Streams, Strings, TestShared;
- VAR w: Streams.Writer; csv, csvref: CSV.CSV; s: CSV.Scanner;
- BEGIN
- w := TestShared.GetWriter();
- csvref := CSV.GetDefaultCSV();
- csvref.NewLine();
- csvref.AddField(""); csvref.AddField("First field empty"); csvref.AddField("134");
- w.String('"","First field empty",134');
- csvref.NewLine();
- w.Ln();
- TestShared.CloseWriter();
- csv := CSV.GetDefaultCSV();
- s := TestShared.GetScanner(csv);
- s.Scan();
- ASSERT(CSV.CompareCSVs(csv, csvref));
- END Test.
- positive: empty field at end of line is recognised as such
- MODULE Test;
- IMPORT CSV, Streams, Strings, TestShared;
- VAR w: Streams.Writer; csv, csvref: CSV.CSV; s: CSV.Scanner;
- BEGIN
- w := TestShared.GetWriter();
- csvref := CSV.GetDefaultCSV();
- csvref.NewLine();
- csvref.AddField("Test empty EOL field"); csvref.AddField("31"); csvref.AddField("");
- w.String('"Test empty EOL field",31,""');
- TestShared.CloseWriter();
- csv := CSV.GetDefaultCSV();
- s := TestShared.GetScanner(csv);
- s.Scan();
- ASSERT(CSV.CompareCSVs(csv, csvref));
- END Test.
- positive: parse simple line 1
- MODULE Test;
- IMPORT CSV, Streams, Strings, TestShared;
- VAR w: Streams.Writer; csv, csvref: CSV.CSV; s: CSV.Scanner;
- BEGIN
- w := TestShared.GetWriter();
- csvref := CSV.GetDefaultCSV();
- csvref.NewLine();
- csvref.AddField("Parker"); csvref.AddField("Howard"); csvref.AddField("32"); csvref.AddField("River Avenue 12");
- w.String('Parker, Howard, 32, "River Avenue 12"');
- TestShared.CloseWriter();
- csv := CSV.GetDefaultCSV();
- s := TestShared.GetScanner(csv);
- s.Scan();
- ASSERT(CSV.CompareCSVs(csv, csvref));
- END Test.
- positive: parse field
- MODULE Test;
- IMPORT CSV, Streams, Strings, TestShared;
- VAR w: Streams.Writer; csv, csvref: CSV.CSV; s: CSV.Scanner;
- BEGIN
- w := TestShared.GetWriter();
- csvref := CSV.GetDefaultCSV();
- csvref.NewLine();
- csvref.AddField("Parker");
- w.String('Parker');
- TestShared.CloseWriter();
- csv := CSV.GetDefaultCSV();
- s := TestShared.GetScanner(csv);
- s.Scan();
- ASSERT(CSV.CompareCSVs(csv, csvref));
- END Test.
- positive: parse field and ignore leading whitespace not in quotes
- MODULE Test;
- IMPORT CSV, Streams, Strings, TestShared;
- VAR w: Streams.Writer; csv, csvref: CSV.CSV; s: CSV.Scanner;
- BEGIN
- w := TestShared.GetWriter();
- csvref := CSV.GetDefaultCSV();
- csvref.NewLine();
- csvref.AddField("Parker");
- w.String(' Parker');
- TestShared.CloseWriter();
- csv := CSV.GetDefaultCSV();
- s := TestShared.GetScanner(csv);
- s.Scan();
- ASSERT(CSV.CompareCSVs(csv, csvref));
- END Test.
- positive: parse field and keep leading whitespace in quotes
- MODULE Test;
- IMPORT CSV, Streams, Strings, TestShared;
- VAR w: Streams.Writer; csv, csvref: CSV.CSV; s: CSV.Scanner;
- BEGIN
- w := TestShared.GetWriter();
- csvref := CSV.GetDefaultCSV();
- csvref.NewLine();
- csvref.AddField(" Parker");
- w.String('" Parker"');
- TestShared.CloseWriter();
- csv := CSV.GetDefaultCSV();
- s := TestShared.GetScanner(csv);
- s.Scan();
- ASSERT(CSV.CompareCSVs(csv, csvref));
- END Test.
- positive: parse field and ignore trailing whitespace not in quotes
- MODULE Test;
- IMPORT CSV, Streams, Strings, TestShared;
- VAR w: Streams.Writer; csv, csvref: CSV.CSV; s: CSV.Scanner;
- BEGIN
- w := TestShared.GetWriter();
- csvref := CSV.GetDefaultCSV();
- csvref.NewLine();
- csvref.AddField("Parker");
- w.String('Parker ');
- TestShared.CloseWriter();
- csv := CSV.GetDefaultCSV();
- s := TestShared.GetScanner(csv);
- s.Scan();
- ASSERT(CSV.CompareCSVs(csv, csvref));
- END Test.
- positive: parse field and keep trailing whitespace in quotes
- MODULE Test;
- IMPORT CSV, Streams, Strings, TestShared;
- VAR w: Streams.Writer; csv, csvref: CSV.CSV; s: CSV.Scanner;
- BEGIN
- w := TestShared.GetWriter();
- csvref := CSV.GetDefaultCSV();
- csvref.NewLine();
- csvref.AddField("Parker ");
- w.String('"Parker "');
- TestShared.CloseWriter();
- csv := CSV.GetDefaultCSV();
- s := TestShared.GetScanner(csv);
- s.Scan();
- ASSERT(CSV.CompareCSVs(csv, csvref));
- END Test.
- positive: parse simple file
- MODULE Test;
- IMPORT CSV, Streams, Strings, TestShared;
- VAR w: Streams.Writer; csv, csvref: CSV.CSV; s: CSV.Scanner;
- BEGIN
- w := TestShared.GetWriter();
- csvref := CSV.GetDefaultCSV();
- csvref.NewLine();
- csvref.AddField("Parker"); csvref.AddField("Howard"); csvref.AddField("32"); csvref.AddField("River Avenue 12");
- w.String('Parker,Howard,32,"River Avenue 12"');
- csvref.NewLine();
- w.Ln();
- csvref.AddField(" Hello Peter "); csvref.AddField("Off, everything cool!");
- w.String('" Hello Peter ","Off, everything cool!"');
- TestShared.CloseWriter();
- csv := CSV.GetDefaultCSV();
- s := TestShared.GetScanner(csv);
- s.Scan();
- ASSERT(CSV.CompareCSVs(csv, csvref));
- END Test.
- positive: parse field not quoted and containing still whitespace skip after whitespace
- (* Text in a field after whitespace should be skipped until a separator appears *)
- MODULE Test;
- IMPORT CSV, Streams, Strings, TestShared;
- VAR w: Streams.Writer; csv, csvref: CSV.CSV; s: CSV.Scanner;
- BEGIN
- w := TestShared.GetWriter();
- csvref := CSV.GetDefaultCSV();
- csvref.NewLine();
- csvref.AddField("Parker"); csvref.AddField("Howard"); csvref.AddField("32"); csvref.AddField("River Avenue 12");
- w.String('Parker,Howard Martin,32,"River Avenue 12"');
- csvref.NewLine();
- w.Ln();
- csvref.AddField(" Hello Peter "); csvref.AddField("Off, everything cool!");
- w.String('" Hello Peter ","Off, everything cool!"');
- TestShared.CloseWriter();
- csv := CSV.GetDefaultCSV();
- s := TestShared.GetScanner(csv);
- s.Scan();
- ASSERT(CSV.CompareCSVs(csv, csvref));
- END Test.
- positive: UNLOAD the CSV module after the tests
- MODULE Test;
- IMPORT Modules;
- VAR res: WORD; msg: ARRAY 64 OF CHAR;
- BEGIN
- Modules.FreeModule("TestShared", res, msg);
- Modules.FreeModule("CSV", res, msg);
- END Test.
-
|