File: demo2-test.pl

package info (click to toggle)
acl2 8.5dfsg-5
  • links: PTS
  • area: main
  • in suites: bookworm
  • size: 991,452 kB
  • sloc: lisp: 15,567,759; javascript: 22,820; cpp: 13,929; ansic: 12,092; perl: 7,150; java: 4,405; xml: 3,884; makefile: 3,507; sh: 3,187; ruby: 2,633; ml: 763; python: 746; yacc: 723; awk: 295; csh: 186; php: 171; lex: 154; tcl: 49; asm: 23; haskell: 17
file content (111 lines) | stat: -rwxr-xr-x 3,356 bytes parent folder | download | duplicates (6)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
#!/usr/bin/env perl

use strict;
use warnings;

print "Testing getopt demo2 program:\n";

sub test
{
    my $args = shift;
    my $expected_out = shift;
    my $expected_code = shift;

    print "Testing '$args'.\n";
    my $out = `./demo2 $args`;
    my $code = $? >> 8;

    # Mangle stuff to ignore Windows newline discrepancies.  Fixes issue #327
    $expected_out =~ s/\r?\n/\n/g;
    $out =~ s/\r?\n/\n/g;

    # We originally required that $out was equal to $expected_out.  However,
    # some Lisps print banners that we can't suppress.  So, I gave up on that
    # and now just require that the end of the output is as expected.
    chomp($expected_out);
    chomp($out);

    my $expected_len = length($expected_out);
    my $actual_len   = length($out);
    # print "expected_length = $expected_len  and  actual_length = $actual_len\n";

    if ($expected_len > $actual_len) {
        print "Fail: expected ($expected_len) $expected_out but got ($actual_len) $out\n";
	exit(1);
    }

    my $actual_tail = substr($out, $actual_len - $expected_len);

    if ($actual_tail ne $expected_out) {
        print "Fail: expected:------------\n$expected_out\n---------but got-----\n$out\n---------\n";
	exit(1);
    }

    if ($code != $expected_code) {
	print "Fail: expected exit status $expected_code but got $code\n";
	exit(1);
    }

    print "OK.\n";
}

my $HELPMSG = <<END;
demo2: how to write a command line program in ACL2
    -h,--help             Print a help message and exit with status 0.
    -v,--version          Print out a version message and exit with
                          status 0.
    -f,--fail             Print nothing and exit with status 1.

END

my $VERSION = "demo2: version 1.234";

# Some tests of blank arguments
test("", "colorless green ideas sleep furiously", 0);
test(" ", "colorless green ideas sleep furiously", 0);
test("  ", "colorless green ideas sleep furiously", 0);

# Help is the highest priority.
test("-h", $HELPMSG, 0);
test("--help", $HELPMSG, 0);
test("-v -h", $HELPMSG, 0);
test("-h -v", $HELPMSG, 0);
test("--help -v", $HELPMSG, 0);
test("-v --help", $HELPMSG, 0);
test("--help --version", $HELPMSG, 0);
test("--version --help", $HELPMSG, 0);
test("-f -h", $HELPMSG, 0);
test("-h -f", $HELPMSG, 0);
test("--help -f", $HELPMSG, 0);
test("-f --help", $HELPMSG, 0);
test("--help --fail", $HELPMSG, 0);
test("--fail --help", $HELPMSG, 0);

# Version is the next highest
test("-v", $VERSION, 0);
test("--version", $VERSION, 0);
test("-v -f", $VERSION, 0);
test("-f -v", $VERSION, 0);
test("--fail -v", $VERSION, 0);
test("-v --fail", $VERSION, 0);
test("--fail --version", $VERSION, 0);
test("--version --fail", $VERSION, 0);

# Fail has the least priority
test("-f", "", 1);
test("--fail", "", 1);

# Some tests of invalid args
test("-o", "Unrecognized option -o.", 1);
test("--oops", "Unrecognized option --oops", 1);  # BOZO should print a period I guess.
test("-v=5", "Option --version can't take an argument", 1);
test("-v=", "Option --version can't take an argument", 1);

# Some tests of tricky/hard arguments for certain Lisps
test("-e", "Unrecognized option -e.", 1);
test("-l", "Unrecognized option -l.", 1);
test("-Z", "Unrecognized option -Z.", 1);
test("-I", "Unrecognized option -I.", 1);
test("--eval", "Unrecognized option --eval", 1);
test("--load", "Unrecognized option --load", 1);