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

4b825dc642cb6eb9a060e54bf8d69288fbee4904cfad47cfa334b206c65f22086bcc5d63e6f70944
1
/*
2
 *   test of save/restore 
3
 */
4
5
#include "tads.h"
6
#include "t3.h"
7
8
class RuntimeError: object
9
    construct(errno, ...) { errno_ = errno; }
10
    display = "Runtime Error: <<errno_>>"
11
    errno_ = 0
12
;
13
14
_say_embed(str) { tadsSay(str); }
15
16
_main(args)
17
{
18
    try
19
    {
20
        t3SetSay(_say_embed);
21
        main(args);
22
    }
23
    catch (RuntimeError rte)
24
    {
25
        "\n<<rte.display>>\n";
26
    }
27
}
28
29
obj1: object
30
    construct(nm) { sdesc = nm; }
31
    p1 = 'original obj1.p1'
32
    p2 = 'original obj1.p2'
33
    p3 = nil
34
    p4 = 'original obj1.p4'
35
    sdesc = 'obj1'
36
;
37
38
obj2: object
39
    construct(nm) { sdesc = nm; }
40
    p1 = 'original obj2.p1'
41
    p2 = 'original obj2.p2'
42
    p3 = nil
43
    p4 = 'original obj2.p4'
44
    sdesc = 'obj1'
45
;
46
47
globals: object
48
    obj3_ = nil
49
;
50
51
main(args)
52
{
53
    local obj3;
54
55
    obj3 = new obj1('obj3 pre-save');
56
    obj3.p1 = obj3.p2 = 'first new obj3';
57
    obj3.p1 += '.p1';
58
    obj3.p2 += '.p2';
59
60
    obj1.p1 += ' Modified!';
61
    obj2.p2 += ' Modified!';
62
63
    obj1.p3 = obj2.p3 = obj3;
64
65
66
    "Pre-save:\n";
67
    "obj1.p1 = <<obj1.p1>>, p2 = <<obj1.p2>>, p3 = <<obj1.p3.sdesc>>\n";
68
    "obj2.p1 = <<obj2.p1>>, p2 = <<obj2.p2>>, p3 = <<obj2.p3.sdesc>>\n";
69
    "obj3.p1 = <<obj3.p1>>, p2 = <<obj3.p2>>, p4 = <<obj3.p4>>\n";
70
    "\b";
71
72
    "Saving...\n";
73
    globals.obj3_ = obj3;
74
    saveGame('test.t3v');
75
    "Saved!\n";
76
77
    obj3 = new obj2('obj3 post-save');
78
    obj3.p1 = obj3.p2 = 'second new obj3';
79
    obj3.p1 += '.p1';
80
    obj3.p2 += '.p2';
81
    
82
    obj1.p1 += ' Mod Post Save';
83
    obj1.p2 += ' Mod Post Save';
84
    obj2.p1 += ' Mod Post Save';
85
    obj2.p2 += ' Mod Post Save';
86
    
87
    obj1.p3 = obj2.p3 = obj3;
88
    
89
    "Pre-Restore:\n";
90
    "obj1.p1 = <<obj1.p1>>, p2 = <<obj1.p2>>, p3 = <<obj1.p3.sdesc>>\n";
91
    "obj2.p1 = <<obj2.p1>>, p2 = <<obj2.p2>>, p3 = <<obj2.p3.sdesc>>\n";
92
    "obj3.p1 = <<obj3.p1>>, p2 = <<obj3.p2>>, p4 = <<obj3.p4>>\n";
93
    "\b";
94
    
95
    "Restoring...\n";
96
    restoreGame('test.t3v');
97
    obj3 = globals.obj3_;
98
    "Restored!\n";
99
100
    "Post-Restore:\n";
101
    "obj1.p1 = <<obj1.p1>>, p2 = <<obj1.p2>>, p3 = <<obj1.p3.sdesc>>\n";
102
    "obj2.p1 = <<obj2.p1>>, p2 = <<obj2.p2>>, p3 = <<obj2.p3.sdesc>>\n";
103
    "obj3.p1 = <<obj3.p1>>, p2 = <<obj3.p2>>, p4 = <<obj3.p4>>\n";
104
    "\b";
105
106
    "Restarting...\n";
107
    restartGame();
108
    _reinit(789, args);
109
}
110
111
_reinit(ctx, args)
112
{
113
    try
114
    {
115
        t3SetSay(_say_embed);
116
        reinit(ctx);
117
    }
118
    catch (RuntimeError rte)
119
    {
120
        "\n<<rte.display>>\n";
121
    }
122
}
123
124
reinit(ctx)
125
{    
126
    "This is reinit!  ctx = <<ctx>>\n";
127
128
    obj1.p3 = obj2.p3 = new obj1('obj3 in reinit');
129
    "obj1.p1 = <<obj1.p1>>, p2 = <<obj1.p2>>, p3 = <<obj1.p3.sdesc>>\n";
130
    "obj2.p1 = <<obj2.p1>>, p2 = <<obj2.p2>>, p3 = <<obj2.p3.sdesc>>\n";
131
    "\b";
132
133
    "Calling test1...\n";
134
    test1();
135
    "Back in reinit\n";
136
137
    "Restoring...\n";
138
    restoreGame('test.t3v');
139
    "Restored!\n";
140
141
    "obj1.p1 = <<obj1.p1>>, p2 = <<obj1.p2>>, p3 = <<obj1.p3.sdesc>>\n";
142
    "obj2.p1 = <<obj2.p1>>, p2 = <<obj2.p2>>, p3 = <<obj2.p3.sdesc>>\n";
143
    "\b";
144
}
145
146
test1()
147
{
148
    local x;
149
150
    x = 'hello';
151
    x += ' ';
152
    x += 'there!';
153
154
    "In test1 - x = '<<x>>'; calling test2...\n";
155
    test2();
156
    "Back in test1 - x = '<<x>>'\n";
157
}
158
159
test2()
160
{
161
    "In test2\n";
162
163
    obj1.p2 += ' test2-modified';
164
    obj2.p1 += ' test2-modified';
165
    "obj1.p1 = <<obj1.p1>>, p2 = <<obj1.p2>>, p3 = <<obj1.p3.sdesc>>\n";
166
    "obj2.p1 = <<obj2.p1>>, p2 = <<obj2.p2>>, p3 = <<obj2.p3.sdesc>>\n";
167
    "\b";
168
169
    "Saving...\n";
170
    saveGame('test.t3v');
171
    "Saved.\n";
172
173
    obj1.p1 += ' post-save-test2-modified';
174
    obj2.p2 += ' post-save-test2-modified';
175
    
176
    "obj1.p1 = <<obj1.p1>>, p2 = <<obj1.p2>>, p3 = <<obj1.p3.sdesc>>\n";
177
    "obj2.p1 = <<obj2.p1>>, p2 = <<obj2.p2>>, p3 = <<obj2.p3.sdesc>>\n";
178
    "\b";
179
}
180