cfad47cfa3/t3compiler/tads3/test/data/undo.t

4b825dc642cb6eb9a060e54bf8d69288fbee4904cfad47cfa334b206c65f22086bcc5d63e6f70944
1
/*
2
 *   undo.t - test of savepoint/undo
3
 */
4
5
#include "tads.h"
6
#include "t3.h"
7
#include "t3test.h"
8
9
10
_say_embed(str) { tadsSay(str); }
11
12
class RuntimeError: object
13
    construct(errno, ...) { errno_ = errno; }
14
    display = "Runtime Error: <<errno_>>"
15
    errno_ = 0
16
;
17
18
_main(args)
19
{
20
    try
21
    {
22
        t3SetSay(_say_embed);
23
        main();
24
    }
25
    catch (RuntimeError rte)
26
    {
27
        "\n<<rte.display>>\n";
28
    }
29
}
30
31
obj1: object
32
    construct(id) { id_ = id; }
33
    sdesc = "This is obj1(<<id_>>, <<t3test_get_obj_id(self)>>)"
34
    id_ = 'original'
35
    p1 = 1
36
    p2 = 2
37
    p3 = 3
38
    p4 = nil
39
    finalize() { "Finalizer: obj1(<<id_>>, <<t3test_get_obj_id(self)>>)\n"; }
40
;
41
42
main()
43
{
44
    for (local i = 0 ; i < 3 ; ++i)
45
    {
46
        "*** Pass <<i>> ***\b";
47
48
        "Step One\n";
49
        savepoint();
50
        t3RunGC();
51
52
        obj1.p1 = 'one';
53
        obj1.p2 = 'two';
54
        obj1.p3 = 'three';
55
        obj1.p4 = new obj1('step one');
56
        "obj1.p1 = <<obj1.p1>>, p2 = <<obj1.p2>>, p3 = <<obj1.p3>>,
57
        p4 = << obj1.p4 == nil ? "nil" : obj1.p4.sdesc >>\n";
58
59
        "\bStep Two\n";
60
        savepoint();
61
        t3RunGC();
62
63
        obj1.p1 += '111';
64
        obj1.p2 += '222';
65
        obj1.p3 += '333';
66
        obj1.p4 = new obj1('step two');
67
        "obj1.p1 = <<obj1.p1>>, p2 = <<obj1.p2>>, p3 = <<obj1.p3>>,
68
        p4 = << obj1.p4 == nil ? "nil" : obj1.p4.sdesc >>\n";
69
70
        "\bStep Three\n";
71
        savepoint();
72
        t3RunGC();
73
74
        obj1.p1 = 'x';
75
        obj1.p2 = 'y';
76
        obj1.p3 = 'z';
77
        obj1.p4 = new obj1('step three');
78
        "obj1.p1 = <<obj1.p1>>, p2 = <<obj1.p2>>, p3 = <<obj1.p3>>,
79
        p4 = << obj1.p4 == nil ? "nil" : obj1.p4.sdesc >>\n";
80
81
        "\bUndoing: <<bool2str(undo())>>\n";
82
        t3RunGC();
83
        "obj1.p1 = <<obj1.p1>>, p2 = <<obj1.p2>>, p3 = <<obj1.p3>>,
84
        p4 = << obj1.p4 == nil ? "nil" : obj1.p4.sdesc >>\n";
85
86
        "\bStep Three Prime\n";
87
        savepoint();
88
        t3RunGC();
89
90
        obj1.p1 = 'a';
91
        obj1.p2 = 'b';
92
        obj1.p3 = 'c';
93
        obj1.p4 = new obj1('step three prime');
94
        "obj1.p1 = <<obj1.p1>>, p2 = <<obj1.p2>>, p3 = <<obj1.p3>>,
95
        p4 = << obj1.p4 == nil ? "nil" : obj1.p4.sdesc >>\n";
96
97
        "\bUndoing: <<bool2str(undo())>>\n";
98
        t3RunGC();
99
        "obj1.p1 = <<obj1.p1>>, p2 = <<obj1.p2>>, p3 = <<obj1.p3>>,
100
        p4 = << obj1.p4 == nil ? "nil" : obj1.p4.sdesc >>\n";
101
102
        "\bUndoing: <<bool2str(undo())>>\n";
103
        t3RunGC();
104
        "obj1.p1 = <<obj1.p1>>, p2 = <<obj1.p2>>, p3 = <<obj1.p3>>,
105
        p4 = << obj1.p4 == nil ? "nil" : obj1.p4.sdesc >>\n";
106
107
        "\bUndoing: <<bool2str(undo())>>\n";
108
        t3RunGC();
109
        "obj1.p1 = <<obj1.p1>>, p2 = <<obj1.p2>>, p3 = <<obj1.p3>>,
110
        p4 = << obj1.p4 == nil ? "nil" : obj1.p4.sdesc >>\n";
111
112
        "\bUndoing: <<bool2str(undo())>>\n";
113
        t3RunGC();
114
        "obj1.p1 = <<obj1.p1>>, p2 = <<obj1.p2>>, p3 = <<obj1.p3>>,
115
        p4 = << obj1.p4 == nil ? "nil" : obj1.p4.sdesc >>\n";
116
117
        "\b";
118
    }
119
}
120
121
bool2str(val)
122
{
123
    return val ? 'true' : 'nil';
124
}