1
//////////////////////////////////////////////////////////////////////////
3
// pgScript - PostgreSQL Tools
4
// RCS-ID: $Id: pgsTestExpressionIdent.cpp 7758 2009-03-26 20:49:59Z dpage $
5
// Copyright (C) 2002 - 2009, The pgAdmin Development Team
6
// This software is released under the BSD Licence
8
//////////////////////////////////////////////////////////////////////////
11
#include "pgsTestSuite.h"
13
#include "pgscript/exceptions/pgsParameterException.h"
14
#include "pgscript/expressions/pgsAssign.h"
15
#include "pgscript/expressions/pgsAssignToRecord.h"
16
#include "pgscript/expressions/pgsColumns.h"
17
#include "pgscript/expressions/pgsIdent.h"
18
#include "pgscript/expressions/pgsIdentRecord.h"
19
#include "pgscript/expressions/pgsLines.h"
20
#include "pgscript/expressions/pgsTrim.h"
21
#include "pgscript/objects/pgsNumber.h"
22
#include "pgscript/objects/pgsRecord.h"
23
#include "pgscript/objects/pgsString.h"
25
void pgsTestSuite::test_expression_ident(void)
27
const int init_inc_val = 10;
28
wxString s_init_inc_val = wxString() << init_inc_val;
34
// a := { a }; a[1].a = "a"
35
pgsRecord * R1 = pnew pgsRecord(1);
36
R1->insert(1, 0, pnew pgsString(wxT("a")));
37
R1->set_column_name(0, wxT("a"));
40
// b := { b }; b[8].b = "b"
41
pgsRecord * R2 = pnew pgsRecord(1);
42
R2->insert(8, 0, pnew pgsString(wxT("b")));
43
R2->set_column_name(0, wxT("b"));
46
// r := { c }; r[0].c = init_inc_val
47
pgsRecord * R3 = pnew pgsRecord(1);
48
R3->insert(0, 0, pnew pgsNumber(wxString()
50
R3->set_column_name(0, wxT("c"));
53
vars[wxT("c")] = pnew pgsString(wxT("c"));
54
vars[wxT("d")] = pnew pgsNumber(wxT("1"));
55
vars[wxT("i")] = pnew pgsNumber(s_init_inc_val);
61
TS_ASSERT(pgsIdent(wxT("a")).eval(vars)->value() == vars[wxT("a")]->value());
62
TS_ASSERT(pgsIdent(wxT("b")).eval(vars)->value() == vars[wxT("b")]->value());
63
TS_ASSERT(pgsIdent(wxT("c")).eval(vars)->value() == vars[wxT("c")]->value());
64
TS_ASSERT(pgsIdent(wxT("d")).eval(vars)->value() == vars[wxT("d")]->value());
65
TS_ASSERT(pgsIdent(wxT("e")).eval(vars)->value() == wxT(""));
66
TS_ASSERT(pgsIdent(wxT(" ")).eval(vars)->value() == wxT(""));
67
TS_ASSERT(pgsIdent(wxT("A")).eval(vars)->value() == wxT(""));
68
TS_ASSERT(pgsIdent(wxT("B")).eval(vars)->value() == wxT(""));
69
TS_ASSERT(pgsIdent(wxT("C")).eval(vars)->value() == wxT(""));
70
TS_ASSERT(pgsIdent(wxT("D")).eval(vars)->value() == wxT(""));
71
TS_ASSERT(pgsIdent(pgsIdent::m_now.Lower()).eval(vars)->value() == wxT(""));
72
wxString now = wxString() << wxDateTime::GetTimeNow();
73
TS_ASSERT(pgsIdent(pgsIdent::m_now).eval(vars)->value() == now);
76
TS_ASSERT(pgsIdent(wxT("a")).value() == wxT("a"));
77
TS_ASSERT(pgsIdent(wxT("b")).value() == wxT("b"));
78
TS_ASSERT(pgsIdent(wxT("c")).value() == wxT("c"));
79
TS_ASSERT(pgsIdent(wxT("d")).value() == wxT("d"));
80
TS_ASSERT(pgsIdent(wxT("e")).value() == wxT("e"));
81
TS_ASSERT(pgsIdent(wxT(" ")).value() == wxT(" "));
82
TS_ASSERT(pgsIdent(wxT("A")).value() == wxT("A"));
83
TS_ASSERT(pgsIdent(wxT("B")).value() == wxT("B"));
84
TS_ASSERT(pgsIdent(wxT("C")).value() == wxT("C"));
85
TS_ASSERT(pgsIdent(wxT("D")).value() == wxT("D"));
86
TS_ASSERT(pgsIdent(pgsIdent::m_now).value() == pgsIdent::m_now);
88
// [3] Test copy constructor
89
pgsIdent ident(wxT("d"));
90
TS_ASSERT(ident.eval(vars)->value() == wxT("1"));
92
TS_ASSERT(copy.eval(vars)->value() == wxT("1"));
93
TS_ASSERT(copy.value() == wxT("d"));
95
// [4] Test assignment
96
pgsIdent assign(wxT("a")); // a is a record
98
TS_ASSERT(assign.eval(vars)->value() == wxT("1"));
99
TS_ASSERT(assign.value() == wxT("d"));
102
// Test pgsIdentRecord with [int][str]
105
TS_ASSERT(pgsIdentRecord(wxT("a"), pnew pgsNumber(wxT("0")), pnew
106
pgsNumber(wxT("0"))).eval(vars)->value() == wxT("")); // Wrong line
107
TS_ASSERT(pgsIdentRecord(wxT("a"), pnew pgsNumber(wxT("1")), pnew
108
pgsNumber(wxT("0"))).eval(vars)->value() == wxT("a")); // OK
109
TS_ASSERT(pgsIdentRecord(wxT("a"), pnew pgsNumber(wxT("2")), pnew
110
pgsNumber(wxT("0"))).eval(vars)->value() == wxT("")); // Wrong line
111
TS_ASSERT(pgsIdentRecord(wxT("a"), pnew pgsNumber(wxT("0")), pnew
112
pgsNumber(wxT("1"))).eval(vars)->value() == wxT("")); // Wrong column
113
TS_ASSERT(pgsIdentRecord(wxT("a"), pnew pgsNumber(wxT("1")), pnew
114
pgsNumber(wxT("1"))).eval(vars)->value() == wxT("")); // Wrong line & column
115
TS_ASSERT(pgsIdentRecord(wxT("a"), pnew pgsRecord(1), pnew
116
pgsNumber(wxT("0"))).eval(vars)->value() == wxT("")); // Wrong line (record)
117
TS_ASSERT(pgsIdentRecord(wxT("a"), pnew pgsNumber(wxT("1")), pnew
118
pgsRecord(0)).eval(vars)->value() == wxT("")); // Wrong column (record)
119
TS_ASSERT(pgsIdentRecord(wxT("a"), pnew pgsString(wxT("1")), pnew
120
pgsNumber(wxT("0"))).eval(vars)->value() == wxT("")); // Wrong line (string)
121
TS_ASSERT(pgsIdentRecord(wxT("a"), pnew pgsNumber(wxT("1")), pnew
122
pgsString(wxT("0"))).eval(vars)->value() == wxT("")); // Wrong column (string)
123
TS_ASSERT(pgsIdentRecord(wxT("a"), pnew pgsNumber(wxT("1"), pgsReal), pnew
124
pgsNumber(wxT("0"))).eval(vars)->value() == wxT("")); // Wrong line (real)
125
TS_ASSERT(pgsIdentRecord(wxT("a"), pnew pgsNumber(wxT("1")), pnew
126
pgsNumber(wxT("0"), pgsReal)).eval(vars)->value() == wxT("")); // Wrong column (real)
127
TS_ASSERT(pgsIdentRecord(wxT("c"), pnew pgsNumber(wxT("0")), pnew
128
pgsNumber(wxT("0"))).eval(vars)->value() == wxT("")); // Not a record
129
TS_ASSERT(pgsIdentRecord(pgsIdent::m_now, pnew pgsNumber(wxT("0")), pnew
130
pgsNumber(wxT("0"))).eval(vars)->value() == wxT("")); // Does not exist
131
TS_ASSERT(pgsIdentRecord(wxT("e"), pnew pgsNumber(wxT("0")), pnew
132
pgsNumber(wxT("0"))).eval(vars)->value() == wxT("")); // Does not exist
135
TS_ASSERT(pgsIdentRecord(wxT("a"), pnew pgsNumber(wxT("0")), pnew
136
pgsNumber(wxT("0"))).value() == wxT("a[0][0]"));
137
TS_ASSERT(pgsIdentRecord(wxT("a"), pnew pgsNumber(wxT("1")), pnew
138
pgsNumber(wxT("0"))).value() == wxT("a[1][0]"));
139
TS_ASSERT(pgsIdentRecord(wxT("a"), pnew pgsNumber(wxT("2")), pnew
140
pgsNumber(wxT("0"))).value() == wxT("a[2][0]"));
141
TS_ASSERT(pgsIdentRecord(wxT("a"), pnew pgsNumber(wxT("0")), pnew
142
pgsNumber(wxT("1"))).value() == wxT("a[0][1]"));
143
TS_ASSERT(pgsIdentRecord(wxT("a"), pnew pgsNumber(wxT("1")), pnew
144
pgsNumber(wxT("1"))).value() == wxT("a[1][1]"));
145
TS_ASSERT(pgsIdentRecord(wxT("a"), pnew pgsString(wxT("1")), pnew
146
pgsNumber(wxT("0"))).value() == wxT("a[1][0]"));
147
TS_ASSERT(pgsIdentRecord(wxT("a"), pnew pgsNumber(wxT("1")), pnew
148
pgsString(wxT("0"))).value() == wxT("a[1][0]"));
149
TS_ASSERT(pgsIdentRecord(wxT("c"), pnew pgsNumber(wxT("0")), pnew
150
pgsNumber(wxT("0"))).value() == wxT("c[0][0]"));
151
TS_ASSERT(pgsIdentRecord(wxT("e"), pnew pgsNumber(wxT("0")), pnew
152
pgsNumber(wxT("0"))).value() == wxT("e[0][0]"));
154
// [3] Test copy constructor
155
pgsIdentRecord ident(wxT("a"), pnew pgsNumber(wxT("1")),
156
pnew pgsNumber(wxT("0")));
157
TS_ASSERT(ident.eval(vars)->value() == wxT("a"));
158
pgsIdentRecord copy(ident);
159
TS_ASSERT(copy.eval(vars)->value() == wxT("a"));
160
TS_ASSERT(copy.value() == wxT("a[1][0]"));
162
// [4] Test assignment
163
pgsIdentRecord assign(wxT("a"), pnew pgsNumber(wxT("0")),
164
pnew pgsNumber(wxT("0"))); // Wrong location
166
TS_ASSERT(assign.eval(vars)->value() == wxT("a"));
167
TS_ASSERT(copy.value() == wxT("a[1][0]"));
170
// Test pgsIdentRecord with [int]
173
TS_ASSERT(pgsIdentRecord(wxT("a"), pnew pgsNumber(wxT("0")))
174
.eval(vars)->value() == wxT("(\"\")")); // Wrong line
175
TS_ASSERT(pgsIdentRecord(wxT("a"), pnew pgsNumber(wxT("1")))
176
.eval(vars)->value() == wxT("(\"a\")")); // OK
177
TS_ASSERT(pgsIdentRecord(wxT("a"), pnew pgsNumber(wxT("2")))
178
.eval(vars)->value() == wxT("")); // Wrong line
179
TS_ASSERT(pgsIdentRecord(wxT("b"), pnew pgsNumber(wxT("7")))
180
.eval(vars)->value() == wxT("(\"\")")); // Wrong line
181
TS_ASSERT(pgsIdentRecord(wxT("b"), pnew pgsNumber(wxT("8")))
182
.eval(vars)->value() == wxT("(\"b\")")); // OK
183
TS_ASSERT(pgsIdentRecord(wxT("b"), pnew pgsNumber(wxT("9")))
184
.eval(vars)->value() == wxT("")); // Wrong line
185
TS_ASSERT(pgsIdentRecord(wxT("a"), pnew pgsRecord(1))
186
.eval(vars)->value() == wxT("")); // Wrong line (record)
187
TS_ASSERT(pgsIdentRecord(wxT("a"), pnew pgsString(wxT("1")))
188
.eval(vars)->value() == wxT("")); // Wrong line (string)
189
TS_ASSERT(pgsIdentRecord(wxT("a"), pnew pgsNumber(wxT("1"), pgsReal))
190
.eval(vars)->value() == wxT("")); // Wrong line (real)
191
TS_ASSERT(pgsIdentRecord(wxT("c"), pnew pgsNumber(wxT("0")))
192
.eval(vars)->value() == wxT("")); // Not a record
193
TS_ASSERT(pgsIdentRecord(wxT("e"), pnew pgsString(wxT("0")))
194
.eval(vars)->value() == wxT("")); // Does not exist
197
TS_ASSERT(pgsIdentRecord(wxT("a"), pnew pgsNumber(wxT("0")))
198
.value() == wxT("a[0]"));
199
TS_ASSERT(pgsIdentRecord(wxT("a"), pnew pgsNumber(wxT("1")))
200
.value() == wxT("a[1]"));
201
TS_ASSERT(pgsIdentRecord(wxT("a"), pnew pgsNumber(wxT("2")))
202
.value() == wxT("a[2]"));
203
TS_ASSERT(pgsIdentRecord(wxT("b"), pnew pgsNumber(wxT("7")))
204
.value() == wxT("b[7]"));
205
TS_ASSERT(pgsIdentRecord(wxT("b"), pnew pgsNumber(wxT("8")))
206
.value() == wxT("b[8]"));
207
TS_ASSERT(pgsIdentRecord(wxT("b"), pnew pgsNumber(wxT("9")))
208
.value() == wxT("b[9]"));
209
TS_ASSERT(pgsIdentRecord(wxT("a"), pnew pgsString(wxT("1")))
210
.value() == wxT("a[1]"));
211
TS_ASSERT(pgsIdentRecord(wxT("a"), pnew pgsNumber(wxT("1"), pgsReal))
212
.value() == wxT("a[1]"));
213
TS_ASSERT(pgsIdentRecord(wxT("c"), pnew pgsNumber(wxT("0")))
214
.value() == wxT("c[0]"));
215
TS_ASSERT(pgsIdentRecord(wxT("e"), pnew pgsString(wxT("0")))
216
.value() == wxT("e[0]"));
218
// [3] Test copy constructor
219
pgsIdentRecord ident(wxT("a"), pnew pgsNumber(wxT("1")));
221
pgsIdentRecord copy(ident);
222
TS_ASSERT(copy.eval(vars)->value() == wxT("(\"a\")"));
223
TS_ASSERT(copy.value() == wxT("a[1]"));
225
// [4] Test assignment
226
pgsIdentRecord assign(wxT("a"), pnew pgsNumber(wxT("0")));
228
TS_ASSERT(assign.eval(vars)->value() == wxT("(\"a\")"));
229
TS_ASSERT(copy.value() == wxT("a[1]"));
235
TS_ASSERT(pgsLines(wxT("a")).eval(vars)->value() == wxT("2"));
236
TS_ASSERT(pgsLines(wxT("b")).eval(vars)->value() == wxT("9"));
237
TS_ASSERT(pgsLines(wxT("c")).eval(vars)->value() == wxT("1")); // Not a record
238
TS_ASSERT(pgsLines(wxT("d")).eval(vars)->value() == wxT("1")); // Not a record
239
TS_ASSERT(pgsLines(wxT("e")).eval(vars)->value() == wxT("0")); // Does not exist
240
TS_ASSERT(pgsLines(wxT(" ")).eval(vars)->value() == wxT("0")); // Does not exist
243
TS_ASSERT(pgsLines(wxT("a")).value() == wxT("LINES(a)"));
244
TS_ASSERT(pgsLines(wxT("b")).value() == wxT("LINES(b)"));
245
TS_ASSERT(pgsLines(wxT("c")).value() == wxT("LINES(c)"));
246
TS_ASSERT(pgsLines(wxT("d")).value() == wxT("LINES(d)"));
247
TS_ASSERT(pgsLines(wxT("e")).value() == wxT("LINES(e)"));
248
TS_ASSERT(pgsLines(wxT(" ")).value() == wxT("LINES( )"));
250
// [3] Test copy constructor
251
pgsLines ident(wxT("a"));
253
pgsLines copy(ident);
254
TS_ASSERT(copy.eval(vars)->value() == wxT("2"));
255
TS_ASSERT(copy.value() == wxT("LINES(a)"));
257
// [4] Test assignment
258
pgsLines assign(wxT("b"));
260
TS_ASSERT(assign.eval(vars)->value() == wxT("2"));
261
TS_ASSERT(assign.value() == wxT("LINES(a)"));
267
TS_ASSERT(pgsColumns(wxT("a")).eval(vars)->value() == wxT("1"));
268
TS_ASSERT(pgsColumns(wxT("b")).eval(vars)->value() == wxT("1"));
269
TS_ASSERT(pgsColumns(wxT("c")).eval(vars)->value() == wxT("1")); // Not a record
270
TS_ASSERT(pgsColumns(wxT("d")).eval(vars)->value() == wxT("1")); // Not a record
271
TS_ASSERT(pgsColumns(wxT("e")).eval(vars)->value() == wxT("0")); // Does not exist
272
TS_ASSERT(pgsColumns(wxT(" ")).eval(vars)->value() == wxT("0")); // Does not exist
275
TS_ASSERT(pgsColumns(wxT("a")).value() == wxT("COLUMNS(a)"));
276
TS_ASSERT(pgsColumns(wxT("b")).value() == wxT("COLUMNS(b)"));
277
TS_ASSERT(pgsColumns(wxT("c")).value() == wxT("COLUMNS(c)"));
278
TS_ASSERT(pgsColumns(wxT("d")).value() == wxT("COLUMNS(d)"));
279
TS_ASSERT(pgsColumns(wxT("e")).value() == wxT("COLUMNS(e)"));
280
TS_ASSERT(pgsColumns(wxT(" ")).value() == wxT("COLUMNS( )"));
282
// [3] Test copy constructor
283
pgsColumns ident(wxT("a"));
285
pgsColumns copy(ident);
286
TS_ASSERT(copy.eval(vars)->value() == wxT("1"));
287
TS_ASSERT(copy.value() == wxT("COLUMNS(a)"));
289
// [4] Test assignment
290
pgsColumns assign(wxT("e"));
292
TS_ASSERT(assign.eval(vars)->value() == wxT("1"));
293
TS_ASSERT(assign.value() == wxT("COLUMNS(a)"));
299
TS_ASSERT(pgsTrim(pnew pgsString(wxT(" abc "))).eval(vars)->value() == wxT("abc"));
300
TS_ASSERT(pgsTrim(pnew pgsString(wxT("abc "))).eval(vars)->value() == wxT("abc"));
301
TS_ASSERT(pgsTrim(pnew pgsString(wxT(" abc\n "))).eval(vars)->value() == wxT("abc"));
302
TS_ASSERT(pgsTrim(pnew pgsNumber(wxT("10"))).eval(vars)->value() == wxT("10"));
303
TS_ASSERT(pgsTrim(pnew pgsIdent(wxT("c"))).eval(vars)->value() == wxT("c"));
306
TS_ASSERT(pgsTrim(pnew pgsString(wxT(" abc "))).value() == wxT("TRIM( abc )"));
307
TS_ASSERT(pgsTrim(pnew pgsString(wxT("abc "))).value() == wxT("TRIM(abc )"));
308
TS_ASSERT(pgsTrim(pnew pgsNumber(wxT("10"))).value() == wxT("TRIM(10)"));
309
TS_ASSERT(pgsTrim(pnew pgsIdent(wxT("c"))).value() == wxT("TRIM(c)"));
311
// [3] Test copy constructor
312
pgsTrim trim(pnew pgsString(wxT(" a ")));
315
TS_ASSERT(copy.eval(vars)->value() == wxT("a"));
316
TS_ASSERT(copy.value() == wxT("TRIM( a )"));
318
// [4] Test assignment
319
pgsTrim assign(pnew pgsString(wxT(" b ")));
321
TS_ASSERT(assign.eval(vars)->value() == wxT("a"));
322
TS_ASSERT(assign.value() == wxT("TRIM( a )"));
327
// [1] Test eval & value
329
pgsAssign assign(wxT("c"), pnew pgsString(wxT("a")));
330
assign.eval(vars); // c was 'c'
331
TS_ASSERT(vars[wxT("c")]->value() == wxT("a"));
332
TS_ASSERT(assign.value() == wxT("SET c = a"));
335
pgsAssign assign(wxT("h"), pnew pgsNumber(wxT("4")));
336
assign.eval(vars); // h did not exist
337
TS_ASSERT(vars[wxT("h")]->value() == wxT("4"));
338
TS_ASSERT(assign.value() == wxT("SET h = 4"));
341
// [2] Test copy constructor
342
pgsAssign ident(wxT("g"), pnew pgsNumber(wxT("5")));
343
pgsAssign copy(ident);
344
TS_ASSERT(ident.eval(vars)->value() == copy.eval(vars)->value()
345
&& copy.eval(vars)->value() == wxT("5"));
346
TS_ASSERT(copy.value() == wxT("SET g = 5"));
348
// [3] Test assignment
349
pgsAssign assign(wxT("h"), pnew pgsNumber(wxT("4")));
351
TS_ASSERT(assign.eval(vars)->value() == copy.eval(vars)->value()
352
&& assign.eval(vars)->value() == wxT("5"));
353
TS_ASSERT(assign.value() == wxT("SET g = 5"));
356
// Test pgsAssignToRecord
358
// [1] Test eval & value
360
pgsAssignToRecord assign(wxT("a"), pnew pgsNumber(wxT("1")),
361
pnew pgsString(wxT("a")), pnew pgsString(wxT("x")));
362
TS_ASSERT(assign.eval(vars)->value() == wxT("x"));
363
TS_ASSERT(assign.value() == wxT("SET a[1][a] = x"));
366
pgsAssignToRecord assign(wxT("a"), pnew pgsNumber(wxT("1")),
367
pnew pgsNumber(wxT("0")), pnew pgsString(wxT("z")));
368
TS_ASSERT(assign.eval(vars)->value() == wxT("z"));
369
TS_ASSERT(assign.value() == wxT("SET a[1][0] = z"));
372
pgsAssignToRecord assign(wxT("a"), pnew pgsNumber(wxT("5")),
373
pnew pgsNumber(wxT("0")), pnew pgsString(wxT("v")));
374
TS_ASSERT(assign.eval(vars)->value() == wxT("v"));
375
TS_ASSERT(assign.value() == wxT("SET a[5][0] = v"));
379
pgsAssignToRecord(wxT("c"), pnew pgsNumber(wxT("1")), pnew
380
pgsNumber(wxT("0")), pnew pgsString(wxT("x"))).eval(vars);
381
TS_ASSERT(false); // Not a record
383
catch (const pgsParameterException &)
389
pgsAssignToRecord(wxT("a"), pnew pgsNumber(wxT("1")), pnew
390
pgsNumber(wxT("1")), pnew pgsString(wxT("x"))).eval(vars);
391
TS_ASSERT(false); // Wrong column
393
catch (const pgsParameterException &)
399
pgsAssignToRecord(wxT("a"), pnew pgsNumber(wxT("1")), pnew
400
pgsRecord(1), pnew pgsString(wxT("x"))).eval(vars);
401
TS_ASSERT(false); // Wrong column (record)
403
catch (const pgsParameterException &)
409
pgsAssignToRecord(wxT("a"), pnew pgsNumber(wxT("1")), pnew
410
pgsString(wxT("b")), pnew pgsString(wxT("x"))).eval(vars);
411
TS_ASSERT(false); // Wrong column
413
catch (const pgsParameterException &)
419
pgsAssignToRecord(wxT("a"), pnew pgsNumber(wxT("1")), pnew
420
pgsNumber(wxT("0"), pgsReal), pnew pgsString(wxT("x"))).eval(vars);
421
TS_ASSERT(false); // Wrong column (real)
423
catch (const pgsParameterException &)
429
pgsAssignToRecord(wxT("a"), pnew pgsRecord(1), pnew
430
pgsNumber(wxT("0")), pnew pgsString(wxT("x"))).eval(vars);
431
TS_ASSERT(false); // Wrong line (record)
433
catch (const pgsParameterException &)
439
pgsAssignToRecord(wxT("a"), pnew pgsString(wxT("1")), pnew
440
pgsNumber(wxT("0")), pnew pgsString(wxT("x"))).eval(vars);
441
TS_ASSERT(false); // Wrong line (string)
443
catch (const pgsParameterException &)
449
pgsAssignToRecord(wxT("a"), pnew pgsNumber(wxT("1"), pgsReal), pnew
450
pgsNumber(wxT("0")), pnew pgsString(wxT("x"))).eval(vars);
451
TS_ASSERT(false); // Wrong line (real)
453
catch (const pgsParameterException &)
458
// [2] Test copy constructor
459
pgsAssignToRecord ident(wxT("b"), pnew pgsNumber(wxT("8")), pnew
460
pgsNumber(wxT("0")), pnew pgsString(wxT("x")));
461
pgsAssignToRecord copy(ident);
462
TS_ASSERT(ident.eval(vars)->value() == copy.eval(vars)->value()
463
&& copy.eval(vars)->value() == wxT("x"));
464
TS_ASSERT(copy.value() == wxT("SET b[8][0] = x"));
466
// [3] Test assignment
467
pgsAssignToRecord assign(wxT("b"), pnew pgsNumber(wxT("1")), pnew
468
pgsNumber(wxT("0")), pnew pgsString(wxT("v")));
470
TS_ASSERT(assign.eval(vars)->value() == copy.eval(vars)->value()
471
&& assign.eval(vars)->value() == wxT("x"));
472
TS_ASSERT(assign.value() == wxT("SET b[8][0] = x"));