Ruslan López
Ruslan López

Reputation: 4477

How can I catch the output to the console in Prolog to verify it?

Suppose I have a hello_name.pl:

greeting (Name): -
   write ('hello'),
   write (Name),
   writeln ('!').

And I want to put in my plunit something like

catch_output (greeting ('Moncho'), ConsoleOutput),
  assertion ('hello Moncho!' =:= ConsoleOutput).

Upvotes: 1

Views: 207

Answers (1)

Guy Coder
Guy Coder

Reputation: 24976

If you are using

See: with_output_to/2

Note: with_output_to/2 is implemented using C in SWI-Prolog so is not portable as Prolog code.

?- with_output_to(string(Output),(write('hello'),write('Rusian'),write('!'))), 
   assertion( Output == "helloRusian!").

With corrections to your code and using SWI-Prolog unit tests

greeting(Name) :-
   write('hello'),
   write(Name),
   writeln('!').

:- begin_tests(your_tests).

test(001, Output == 'helloMoncho!\n') :-
    with_output_to(atom(Output), greeting('Moncho')).

:- end_tests(your_tests).

Upvotes: 3

Related Questions