-- TestMailer.mesa; edited by HGM, March 24, 1981  1:37 AM  

DIRECTORY
  Mailer USING [Level, SendMailViaGV, SendMailViaMTP],
  Put USING [Line],
  Window USING [Handle];

TestMailer: PROGRAM IMPORTS Mailer, Put =
  BEGIN

  wh: Window.Handle = NIL;

  Info: PROCEDURE [s: STRING, level: Mailer.Level] =
    BEGIN
    Put.Line[wh, s];
    END;

  proc: PROCEDURE [from, subject, to, cc: STRING, body: LONG STRING,
    sender, password: STRING,
    info: PROCEDURE [s: STRING, level: Mailer.Level]] 
    RETURNS [worked: BOOLEAN];

  hgm: STRING = "Murray.PA";
  subject: STRING = "Testing";
  body: STRING = "This is the body of a test message.
Throw it out.
";

  DoOneTest: PROCEDURE [from, to, cc, sender: STRING] =
    BEGIN
    IF ~proc[from, subject, to, cc, body, sender, NIL, Info] THEN Put.Line[wh, "Failed....."]
    ELSE Put.Line[wh, "Worked..."];
    END;

  RunTests: PROCEDURE [] =
    BEGIN
    -- These should work
    DoOneTest[hgm, hgm, NIL, hgm];
    DoOneTest["foo", hgm, NIL, hgm];
    -- These should work but complain a bit
    DoOneTest[hgm, "foo.PA, Murray.PA", NIL, hgm];
    DoOneTest["foo", hgm, "foo.PA", hgm];
    DoOneTest["foo", hgm, "foo", hgm];
    -- These should fail
    DoOneTest[hgm, "foo", NIL, hgm];
    DoOneTest[hgm, "foo.PA", NIL, hgm];
    DoOneTest[hgm, hgm, NIL, "foo.PA"];
    DoOneTest[hgm, hgm, NIL, "foo"];
    END;

  Put.Line[wh,"Trying GV..."L];
  proc ← Mailer.SendMailViaGV;
  RunTests[];

  Put.Line[wh,"Trying MTP..."L];
  proc ← Mailer.SendMailViaMTP;
  RunTests[];

  END.