1
//////////////////////////////////////////////////////////////////////////
3
// pgScript - PostgreSQL Tools
5
// Copyright (C) 2002 - 2009, The pgAdmin Development Team
6
// This software is released under the PostgreSQL Licence
8
//////////////////////////////////////////////////////////////////////////
11
#include "pgsTestSuite.h"
14
#include "pgscript/exceptions/pgsParameterException.h"
15
#include "pgscript/expressions/pgsGenDateTime.h"
16
#include "pgscript/expressions/pgsGenDate.h"
17
#include "pgscript/expressions/pgsGenDictionary.h"
18
#include "pgscript/expressions/pgsGenInt.h"
19
#include "pgscript/expressions/pgsGenReal.h"
20
#include "pgscript/expressions/pgsGenReference.h"
21
#include "pgscript/expressions/pgsGenRegex.h"
22
#include "pgscript/expressions/pgsGenString.h"
23
#include "pgscript/expressions/pgsGenTime.h"
24
#include "pgscript/generators/pgsStringGen.h"
25
#include "pgscript/objects/pgsNumber.h"
26
#include "pgscript/objects/pgsString.h"
28
void pgsTestSuite::test_object_generator(void)
30
const int nb_iterations = 20;
33
///////////////////////
34
// INTEGER GENERATOR //
35
///////////////////////
37
// With an integer generator integer(1, 2, false, wxDateTime::GetTimeNow())
39
// [1] Create the generator
40
pgsExpression * min = pnew pgsNumber(wxT("1"));
41
pgsExpression * max = pnew pgsNumber(wxT("2"));
42
pgsExpression * sequence = pnew pgsNumber(wxT("0"));
43
pgsExpression * seed = pnew pgsNumber(wxString()
44
<< wxDateTime::GetTimeNow());
46
gen = pnew pgsGenInt(min, max, sequence, seed);
48
// [2] Check type properties
52
pgsOperand rnd = gen->eval(vars);
53
for (int i = 0; i < nb_iterations; i++)
55
result = rnd->eval(vars)->value();
56
TS_ASSERT(result == wxT("1") || result == wxT("2"));
59
// [4] Test copy constructor
60
pgsGenInt * copy = pnew pgsGenInt(*gen);
61
TS_ASSERT(copy->value() = gen->value());
62
TS_ASSERT(copy->value() = gen->value());
65
// [5] Test assignment operator
66
pgsGenInt * assignment = pnew pgsGenInt(min->clone(), max->clone(),
67
sequence->clone(), seed->clone());
69
TS_ASSERT(assignment->value() = gen->value());
70
TS_ASSERT(assignment->value() = gen->value());
73
// [6] Delete the generator
77
// With an integer generator integer(-nb_iterations, nb_iterations, true, wxDateTime::GetTimeNow())
79
// [1] Create the generator
80
pgsExpression * min = pnew pgsNumber(wxString() << -nb_iterations);
81
pgsExpression * max = pnew pgsNumber(wxString() << nb_iterations);
82
pgsExpression * sequence = pnew pgsNumber(wxT("1"));
83
pgsExpression * seed = pnew pgsNumber(wxString()
84
<< wxDateTime::GetTimeNow());
86
gen = pnew pgsGenInt(min, max, sequence, seed);
88
// [2] Check type properties
90
// [3] Check result is unique
93
pgsOperand rnd = gen->eval(vars);
94
for (int i = 0; i < nb_iterations * 2 + 1; i++)
96
result = rnd->eval(vars)->value();
97
TS_ASSERT(sav.Index(result) == wxNOT_FOUND);
98
sav.push_back(result);
101
// [4] Test copy constructor
102
pgsGenInt * copy = pnew pgsGenInt(*gen);
103
TS_ASSERT(copy->value() = gen->value());
104
TS_ASSERT(copy->value() = gen->value());
107
// [5] Test assignment operator
108
pgsGenInt * assignment = pnew pgsGenInt(min->clone(), max->clone(),
109
sequence->clone(), seed->clone());
111
TS_ASSERT(assignment->value() = gen->value());
112
TS_ASSERT(assignment->value() = gen->value());
115
// [6] Delete the generator
119
// With an invalid integer generator integer(1, 2.0, false, wxDateTime::GetTimeNow())
121
// [1] Create the generator
122
pgsExpression * min = pnew pgsNumber(wxT("1"));
123
pgsExpression * max = pnew pgsNumber(wxT("2.0"), pgsReal);
124
pgsExpression * sequence = pnew pgsNumber(wxT("0"));
125
pgsExpression * seed = pnew pgsNumber(wxString()
126
<< wxDateTime::GetTimeNow());
128
gen = pnew pgsGenInt(min, max, sequence, seed);
130
// [2] Check type properties
132
// [3] Check that the result is invalid
138
catch (const pgsParameterException &)
140
// Parameters are not correct: exception expected
143
// [4] Delete the generator
151
// With a real generator real(80, 118.123456789, 6, false, wxDateTime::GetTimeNow())
153
// [1] Create the generator
154
pgsExpression * min = pnew pgsNumber(wxT("80"));
155
pgsExpression * max = pnew pgsNumber(wxT("118.123456789"), pgsReal);
156
pgsExpression * precision = pnew pgsNumber(wxT("6"));
157
pgsExpression * sequence = pnew pgsNumber(wxT("0"));
158
pgsExpression * seed = pnew pgsNumber(wxString()
159
<< wxDateTime::GetTimeNow());
160
pgsGenReal * gen = 0;
161
gen = pnew pgsGenReal(min, max, precision, sequence, seed);
163
// [2] Check type properties
167
pgsOperand rnd = gen->eval(vars);
168
for (int i = 0; i < nb_iterations; i++)
170
result = rnd->eval(vars)->value();
171
TS_ASSERT(MAPM(result.mb_str()) >= "80");
172
TS_ASSERT(MAPM(result.mb_str()) <= "118.123456");
175
// [4] Test copy constructor
176
pgsGenReal * copy = pnew pgsGenReal(*gen);
177
TS_ASSERT(copy->value() = gen->value());
178
TS_ASSERT(copy->value() = gen->value());
181
// [5] Test assignment operator
182
pgsGenReal * assignment = pnew pgsGenReal(min->clone(), max->clone(),
183
precision->clone(), sequence->clone(), seed->clone());
185
TS_ASSERT(assignment->value() = gen->value());
186
TS_ASSERT(assignment->value() = gen->value());
189
// [6] Delete the generator
193
// With a real generator (invalid precision) real(80, 90, 6.3, false, wxDateTime::GetTimeNow())
195
// [1] Create the generator
196
pgsExpression * min = pnew pgsNumber(wxT("80"));
197
pgsExpression * max = pnew pgsNumber(wxT("90"));
198
pgsExpression * precision = pnew pgsNumber(wxT("6.3"), pgsReal);
199
pgsExpression * sequence = pnew pgsNumber(wxT("0"));
200
pgsExpression * seed = pnew pgsNumber(wxString()
201
<< wxDateTime::GetTimeNow());
202
pgsGenReal * gen = 0;
203
gen = pnew pgsGenReal(min, max, precision, sequence, seed);
205
// [2] Check type properties
207
// [3] Check that the result is invalid
213
catch (const pgsParameterException &)
215
// Parameters are not correct: exception expected
218
// [4] Delete the generator
222
// With a real generator (invalid sequence identifier) real(80, 90, 5, 5.0, wxDateTime::GetTimeNow())
224
// [1] Create the generator
225
pgsExpression * min = pnew pgsNumber(wxT("80"));
226
pgsExpression * max = pnew pgsNumber(wxT("90"));
227
pgsExpression * precision = pnew pgsNumber(wxT("5"));
228
pgsExpression * sequence = pnew pgsNumber(wxT("5.0"), pgsReal);
229
pgsExpression * seed = pnew pgsNumber(wxString()
230
<< wxDateTime::GetTimeNow());
231
pgsGenReal * gen = 0;
232
gen = pnew pgsGenReal(min, max, precision, sequence, seed);
234
// [2] Check type properties
236
// [3] Check that the result is invalid
242
catch (const pgsParameterException &)
244
// Parameters are not correct: exception expected
247
// [4] Delete the generator
251
//////////////////////
252
// STRING GENERATOR //
253
//////////////////////
255
// With a string generator string(5, 40, 5, 123456789L)
257
// [1] Create the generator
258
pgsExpression * min = pnew pgsNumber(wxT("5"));
259
pgsExpression * max = pnew pgsNumber(wxT("40"));
260
pgsExpression * nb_words = pnew pgsNumber(wxT("5"));
261
pgsExpression * seed = pnew pgsNumber(wxT("123456789"));
262
pgsGenString * gen = pnew pgsGenString(min, max, nb_words, seed);
264
// [2] Check type properties
267
pgsStringGen comparator(5, 40, 5, 123456789L);
269
pgsOperand rnd = gen->eval(vars);
270
for (int i = 0; i < nb_iterations; i++)
272
result = rnd->eval(vars)->value();
273
TS_ASSERT(result == comparator.random());
276
// [4] Test copy constructor
277
pgsGenString * copy = pnew pgsGenString(*gen);
278
TS_ASSERT(copy->value() = gen->value());
279
TS_ASSERT(copy->value() = gen->value());
282
// [5] Test assignment operator
283
pgsGenString * assignment = pnew pgsGenString(min->clone(),
284
max->clone(), nb_words->clone(), seed->clone());
286
TS_ASSERT(assignment->value() = gen->value());
287
TS_ASSERT(assignment->value() = gen->value());
290
// [6] Delete the generator
294
// With a string generator (invalid number of words) string(5, 40, 5.5, 123456789L)
296
// [1] Create the generator
297
pgsExpression * min = pnew pgsNumber(wxT("5"));
298
pgsExpression * max = pnew pgsNumber(wxT("40"));
299
pgsExpression * nb_words = pnew pgsNumber(wxT("5.5"),
301
pgsExpression * seed = pnew pgsNumber(wxT("123456789"));
302
pgsGenString * gen = 0;
303
gen = pnew pgsGenString(min, max, nb_words, seed);
305
// [2] Check type properties
307
// [2] Check that the result is invalid
313
catch (const pgsParameterException &)
315
// Parameters are not correct: exception expected
318
// [4] Delete the generator
322
/////////////////////////
323
// DATE_TIME GENERATOR //
324
/////////////////////////
326
// With a date_time generator date_time(2008-01-01 00:00:00,
327
// 2008-01-01 05:00:00, false, wxDateTime::GetTimeNow())
329
// [1] Create the generator
330
pgsExpression * min = pnew pgsString(wxT("2008-01-01 00:00:00"));
331
pgsExpression * max = pnew pgsString(wxT("2008-01-01 05:00:00"));
332
pgsExpression * sequence = pnew pgsNumber(wxT("0"));
333
pgsExpression * seed = pnew pgsNumber(wxString()
334
<< wxDateTime::GetTimeNow());
335
pgsGenDateTime * gen = 0;
336
gen = pnew pgsGenDateTime(min, max, sequence, seed);
338
// [2] Check type properties
342
pgsOperand rnd = gen->eval(vars);
343
for (int i = 0; i < nb_iterations; i++)
345
result = rnd->eval(vars)->value();
346
TS_ASSERT(result.StartsWith(wxT("2008-01-01 0")));
349
// [4] Test copy constructor
350
pgsGenDateTime * copy = pnew pgsGenDateTime(*gen);
351
TS_ASSERT(copy->value() = gen->value());
352
TS_ASSERT(copy->value() = gen->value());
355
// [5] Test assignment operator
356
pgsGenDateTime * assignment = pnew pgsGenDateTime(min->clone(),
357
max->clone(), sequence->clone(), seed->clone());
359
TS_ASSERT(assignment->value() = gen->value());
360
TS_ASSERT(assignment->value() = gen->value());
363
// [6] Delete the generator
367
// With an invalid date_time generator date_time(20080101,
368
// 20080101, false, wxDateTime::GetTimeNow())
369
// DateTime parameters are numbers
371
// [1] Create the generator
372
pgsExpression * min = pnew pgsNumber(wxT("20080101"));
373
pgsExpression * max = pnew pgsString(wxT("20080101"));
374
pgsExpression * sequence = pnew pgsNumber(wxT("0"));
375
pgsExpression * seed = pnew pgsNumber(wxString()
376
<< wxDateTime::GetTimeNow());
377
pgsGenDateTime * gen = 0;
378
gen = pnew pgsGenDateTime(min, max, sequence, seed);
380
// [2] Check type properties
382
// [3] Check that the result is invalid
388
catch (const pgsParameterException &)
390
// Parameters are not correct: exception expected
393
// [4] Delete the generator
397
// With an invalid date_time generator date_time(20080101,
398
// 20080101, false, wxDateTime::GetTimeNow())
399
// DateTime parameters are numbers
401
// [1] Create the generator
402
pgsExpression * min = pnew pgsString(wxT("20080101"));
403
pgsExpression * max = pnew pgsNumber(wxT("20080101"));
404
pgsExpression * sequence = pnew pgsNumber(wxT("0"));
405
pgsExpression * seed = pnew pgsNumber(wxString()
406
<< wxDateTime::GetTimeNow());
407
pgsGenDateTime * gen = 0;
408
gen = pnew pgsGenDateTime(min, max, sequence, seed);
410
// [2] Check type properties
412
// [3] Check that the result is invalid
418
catch (const pgsParameterException &)
420
// Parameters are not correct: exception expected
423
// [4] Delete the generator
427
// With an invalid date_time generator date_time(2008-01-01 00:00:00,
428
// 2008-2008-2008 05:00:00, false, wxDateTime::GetTimeNow())
430
// [1] Create the generator
431
pgsExpression * min = pnew pgsString(wxT("2008-01-01 00:00:00"));
432
pgsExpression * max = pnew pgsString(wxT("2008-2008-2008 05:00:00"));
433
pgsExpression * sequence = pnew pgsNumber(wxT("0"));
434
pgsExpression * seed = pnew pgsNumber(wxString()
435
<< wxDateTime::GetTimeNow());
436
pgsGenDateTime * gen = 0;
437
gen = pnew pgsGenDateTime(min, max, sequence, seed);
439
// [2] Check type properties
441
// [3] Check that the result is invalid
447
catch (const pgsParameterException &)
449
// Parameters are not correct: exception expected
452
// [4] Delete the generator
460
// With a date generator date(2008-01-01, 2008-01-02, false, wxDateTime::GetTimeNow())
462
// [1] Create the generator
463
pgsExpression * min = pnew pgsString(wxT("2008-01-01"));
464
pgsExpression * max = pnew pgsString(wxT("2008-01-02"));
465
pgsExpression * sequence = pnew pgsNumber(wxT("0"));
466
pgsExpression * seed = pnew pgsNumber(wxString()
467
<< wxDateTime::GetTimeNow());
468
pgsGenDate * gen = 0;
469
gen = pnew pgsGenDate(min, max, sequence, seed);
471
// [2] Check type properties
475
pgsOperand rnd = gen->eval(vars);
476
for (int i = 0; i < nb_iterations; i++)
478
result = rnd->eval(vars)->value();
479
TS_ASSERT(result == wxT("2008-01-01") || result == wxT("2008-01-02"));
482
// [4] Test copy constructor
483
pgsGenDate * copy = pnew pgsGenDate(*gen);
484
TS_ASSERT(copy->value() = gen->value());
485
TS_ASSERT(copy->value() = gen->value());
488
// [5] Test assignment operator
489
pgsGenDate * assignment = pnew pgsGenDate(min->clone(), max->clone(),
490
sequence->clone(), seed->clone());
492
TS_ASSERT(assignment->value() = gen->value());
493
TS_ASSERT(assignment->value() = gen->value());
496
// [6] Delete the generator
500
// With an invalid date generator date(20080101, 20080101, false, wxDateTime::GetTimeNow())
501
// Date parameters are numbers
503
// [1] Create the generator
504
pgsExpression * min = pnew pgsNumber(wxT("20080101"));
505
pgsExpression * max = pnew pgsString(wxT("20080101"));
506
pgsExpression * sequence = pnew pgsNumber(wxT("0"));
507
pgsExpression * seed = pnew pgsNumber(wxString()
508
<< wxDateTime::GetTimeNow());
509
pgsGenDate * gen = 0;
510
gen = pnew pgsGenDate(min, max, sequence, seed);
512
// [2] Check type properties
514
// [3] Check that the result is invalid
520
catch (const pgsParameterException &)
522
// Parameters are not correct: exception expected
525
// [4] Delete the generator
529
// With an invalid date generator date(20080101, 20080101, false, wxDateTime::GetTimeNow())
530
// Date parameters are numbers
532
// [1] Create the generator
533
pgsExpression * min = pnew pgsString(wxT("20080101"));
534
pgsExpression * max = pnew pgsNumber(wxT("20080101"));
535
pgsExpression * sequence = pnew pgsNumber(wxT("0"));
536
pgsExpression * seed = pnew pgsNumber(wxString()
537
<< wxDateTime::GetTimeNow());
538
pgsGenDate * gen = 0;
539
gen = pnew pgsGenDate(min, max, sequence, seed);
541
// [2] Check type properties
543
// [3] Check that the result is invalid
549
catch (const pgsParameterException &)
551
// Parameters are not correct: exception expected
554
// [4] Delete the generator
558
// With an invalid date generator date(2008-01-01, 2008-2008-2008, false, wxDateTime::GetTimeNow())
560
// [1] Create the generator
561
pgsExpression * min = pnew pgsString(wxT("2008-01-01"));
562
pgsExpression * max = pnew pgsString(wxT("2008-2008-2008"));
563
pgsExpression * sequence = pnew pgsNumber(wxT("0"));
564
pgsExpression * seed = pnew pgsNumber(wxString()
565
<< wxDateTime::GetTimeNow());
566
pgsGenDate * gen = 0;
567
gen = pnew pgsGenDate(min, max, sequence, seed);
569
// [2] Check type properties
571
// [3] Check that the result is invalid
577
catch (const pgsParameterException &)
579
// Parameters are not correct: exception expected
582
// [4] Delete the generator
590
// With a time generator time(05:30:00, 05:30:10, false, wxDateTime::GetTimeNow())
592
// [1] Create the generator
593
pgsExpression * min = pnew pgsString(wxT("05:30:00"));
594
pgsExpression * max = pnew pgsString(wxT("05:30:10"));
595
pgsExpression * sequence = pnew pgsNumber(wxT("0"));
596
pgsExpression * seed = pnew pgsNumber(wxString()
597
<< wxDateTime::GetTimeNow());
598
pgsGenTime * gen = 0;
599
gen = pnew pgsGenTime(min, max, sequence, seed);
601
// [2] Check type properties
605
pgsOperand rnd = gen->eval(vars);
606
for (int i = 0; i < nb_iterations; i++)
608
result = rnd->eval(vars)->value();
609
TS_ASSERT(result.StartsWith(wxT("05:30:")));
612
// [4] Test copy constructor
613
pgsGenTime * copy = pnew pgsGenTime(*gen);
614
TS_ASSERT(copy->value() = gen->value());
615
TS_ASSERT(copy->value() = gen->value());
618
// [5] Test assignment operator
619
pgsGenTime * assignment = pnew pgsGenTime(min->clone(), max->clone(),
620
sequence->clone(), seed->clone());
622
TS_ASSERT(assignment->value() = gen->value());
623
TS_ASSERT(assignment->value() = gen->value());
626
// [6] Delete the generator
630
// With an invalid time generator time(120000, 120000, false, wxDateTime::GetTimeNow())
631
// DateTime parameters are numbers
633
// [1] Create the generator
634
pgsExpression * min = pnew pgsNumber(wxT("120000"));
635
pgsExpression * max = pnew pgsString(wxT("120000"));
636
pgsExpression * sequence = pnew pgsNumber(wxT("0"));
637
pgsExpression * seed = pnew pgsNumber(wxString()
638
<< wxDateTime::GetTimeNow());
639
pgsGenTime * gen = 0;
640
gen = pnew pgsGenTime(min, max, sequence, seed);
642
// [2] Check type properties
644
// [3] Check that the result is invalid
650
catch (const pgsParameterException &)
652
// Parameters are not correct: exception expected
655
// [4] Delete the generator
659
// With an invalid time generator time(120000, 120000, false, wxDateTime::GetTimeNow())
660
// DateTime parameters are numbers
662
// [1] Create the generator
663
pgsExpression * min = pnew pgsString(wxT("120000"));
664
pgsExpression * max = pnew pgsNumber(wxT("120000"));
665
pgsExpression * sequence = pnew pgsNumber(wxT("0"));
666
pgsExpression * seed = pnew pgsNumber(wxString()
667
<< wxDateTime::GetTimeNow());
668
pgsGenTime * gen = 0;
669
gen = pnew pgsGenTime(min, max, sequence, seed);
671
// [2] Check type properties
673
// [3] Check that the result is invalid
679
catch (const pgsParameterException &)
681
// Parameters are not correct: exception expected
684
// [4] Delete the generator
688
// With an invalid time generator time(80:80:80, 85:85:85, false, wxDateTime::GetTimeNow())
690
// [1] Create the generator
691
pgsExpression * min = pnew pgsString(wxT("80:80:80"));
692
pgsExpression * max = pnew pgsString(wxT("85:85:85"));
693
pgsExpression * sequence = pnew pgsNumber(wxT("0"));
694
pgsExpression * seed = pnew pgsNumber(wxString()
695
<< wxDateTime::GetTimeNow());
696
pgsGenTime * gen = 0;
697
gen = pnew pgsGenTime(min, max, sequence, seed);
699
// [2] Check type properties
701
// [3] Check that the result is invalid
707
catch (const pgsParameterException &)
709
// Parameters are not correct: exception expected
712
// [4] Delete the generator
716
/////////////////////////
717
// REFERENCE GENERATOR //
718
/////////////////////////
720
// Nothing can work because there is no valid connection provided to
721
// the pgsGenReference
723
// [1] Create the generator
724
pgsExpression * table = 0;
725
table = pnew pgsString(wxT("table"));
726
pgsExpression * column = 0;
727
column = pnew pgsString(wxT("column"));
728
pgsExpression * sequence = 0;
729
sequence = pnew pgsNumber(wxT("0"));
730
pgsExpression * seed = 0;
731
seed = pnew pgsNumber(wxString() << wxDateTime::GetTimeNow());
732
pgsGenReference * gen = 0;
733
gen = pnew pgsGenReference(table, column, sequence, seed);
735
// [2] Check type properties
743
catch (const pgsParameterException &)
748
// [4] Test copy constructor
749
pgsGenReference * copy = 0;
750
copy = pnew pgsGenReference(*gen);
751
TS_ASSERT(copy->value() = gen->value());
752
TS_ASSERT(copy->value() = gen->value());
758
catch (const pgsParameterException &)
764
// [5] Test assignment operator
765
pgsGenReference * assignment = 0;
766
assignment = pnew pgsGenReference(table->clone(),
767
column->clone(), sequence->clone(), seed->clone());
769
TS_ASSERT(assignment->value() = gen->value());
770
TS_ASSERT(assignment->value() = gen->value());
773
assignment->eval(vars);
776
catch (const pgsParameterException &)
782
// [6] Delete the generator
786
// Use an empty string for the table
788
// [1] Create the generator
789
pgsExpression * table = pnew pgsString(wxT(""));
790
pgsExpression * column = pnew pgsString(wxT("column"));
791
pgsExpression * sequence = pnew pgsNumber(wxT("0"));
792
pgsExpression * seed = pnew pgsNumber(wxString()
793
<< wxDateTime::GetTimeNow());
794
pgsGenReference * gen = 0;
795
gen = pnew pgsGenReference(table, column, sequence, seed);
797
// [2] Check type properties
805
catch (const pgsParameterException &)
812
// [6] Delete the generator
816
// Use an empty string for the column
818
// [1] Create the generator
819
pgsExpression * table = pnew pgsString(wxT("table"));
820
pgsExpression * column = pnew pgsString(wxT(""));
821
pgsExpression * sequence = pnew pgsNumber(wxT("0"));
822
pgsExpression * seed = pnew pgsNumber(wxString()
823
<< wxDateTime::GetTimeNow());
824
pgsGenReference * gen = 0;
825
gen = pnew pgsGenReference(table, column, sequence, seed);
827
// [2] Check type properties
835
catch (const pgsParameterException &)
842
// [6] Delete the generator
846
// Use a number for the table
848
// [1] Create the generator
849
pgsExpression * table = pnew pgsNumber(wxT("123"));
850
pgsExpression * column = pnew pgsString(wxT("column"));
851
pgsExpression * sequence = pnew pgsNumber(wxT("0"));
852
pgsExpression * seed = pnew pgsNumber(wxString()
853
<< wxDateTime::GetTimeNow());
854
pgsGenReference * gen = 0;
855
gen = pnew pgsGenReference(table, column, sequence, seed);
857
// [2] Check type properties
865
catch (const pgsParameterException &)
872
// [6] Delete the generator
876
// Use a number for the column
878
// [1] Create the generator
879
pgsExpression * table = pnew pgsString(wxT("table"));
880
pgsExpression * column = pnew pgsNumber(wxT("123"));
881
pgsExpression * sequence = pnew pgsNumber(wxT("0"));
882
pgsExpression * seed = pnew pgsNumber(wxString()
883
<< wxDateTime::GetTimeNow());
884
pgsGenReference * gen = 0;
885
gen = pnew pgsGenReference(table, column, sequence, seed);
887
// [2] Check type properties
895
catch (const pgsParameterException &)
902
// [6] Delete the generator
906
/////////////////////
907
// REGEX GENERATOR //
908
/////////////////////
910
// With a regex generator regex(abc{2}[a-z]{1,50}, wxDateTime::GetTimeNow())
912
// [1] Create the generator
913
pgsExpression * regex = pnew pgsString(wxT("abc{2}[a-z]{1,50}"));
914
pgsExpression * seed = pnew pgsNumber(wxString()
915
<< wxDateTime::GetTimeNow());
916
pgsGenRegex * gen = 0;
917
gen = pnew pgsGenRegex(regex, seed);
919
// [2] Check type properties
923
pgsOperand rnd = gen->eval(vars);
924
for (int i = 0; i < nb_iterations; i++)
926
result = rnd->eval(vars)->value();
927
TS_ASSERT(result.StartsWith(wxT("abcc")));
930
// [4] Test copy constructor
931
pgsGenRegex * copy = pnew pgsGenRegex(*gen);
932
TS_ASSERT(copy->value() = gen->value());
933
TS_ASSERT(copy->value() = gen->value());
936
// [5] Test assignment operator
937
pgsGenRegex * assignment = pnew pgsGenRegex(regex->clone(),
940
TS_ASSERT(assignment->value() = gen->value());
941
TS_ASSERT(assignment->value() = gen->value());
944
// [6] Delete the generator
948
// With an invalid regex generator regex(123, wxDateTime::GetTimeNow())
949
// The regex is a number
951
// [1] Create the generator
952
pgsExpression * regex = pnew pgsNumber(wxT("123"));
953
pgsExpression * seed = pnew pgsNumber(wxString()
954
<< wxDateTime::GetTimeNow());
955
pgsGenRegex * gen = 0;
956
gen = pnew pgsGenRegex(regex, seed);
958
// [2] Check type properties
960
// [3] Check that the result is invalid
966
catch (const pgsParameterException &)
968
// Parameters are not correct: exception expected
971
// [4] Delete the generator
975
// With an invalid regex generator regex([ab{], wxDateTime::GetTimeNow())
976
// The regex is a number
978
// [1] Create the generator
979
pgsExpression * regex = pnew pgsString(wxT("[ab{]"));
980
pgsExpression * seed = pnew pgsNumber(wxString()
981
<< wxDateTime::GetTimeNow());
982
pgsGenRegex * gen = 0;
983
gen = pnew pgsGenRegex(regex, seed);
985
// [2] Check type properties
987
// [3] Check that the result is invalid
993
catch (const pgsParameterException &)
995
// Parameters are not correct: exception expected
998
// [4] Delete the generator
1002
//////////////////////////
1003
// DICTIONARY GENERATOR //
1004
//////////////////////////
1006
const wxString dictionary = wxT("cities.txt"); // More than 2 lines
1007
wxCSConv conv(wxT("utf-8")); // Encoding used for creating the dictionary
1009
// Content of the dictionary
1010
wxString example = wxT("DixieWorld\n")
1015
wxT("Healthy Heights\n")
1017
wxT("First National State\n")
1019
wxT("Peaches N' More\n")
1020
wxT("Isle B Seaing U\n")
1023
wxT("Town and Country\n")
1024
wxT("Sunny Farms\n")
1027
wxT("Hot N' Humid\n")
1029
wxT("Heritage Home\n")
1032
wxT("Lakes-a-plenty\n")
1036
wxT("Korn-O-copia\n")
1038
wxT("Hard Rock State\n")
1039
wxT("Consolidated Peoples\n")
1040
wxT("I Can't Believe It's Not Mexico\n")
1044
wxT("South Lake Shores\n")
1047
wxT("Gettysburg Estates\n")
1050
wxT("South Northland\n")
1051
wxT("Opry-Tune-Itee\n")
1052
wxT("Superultramax\n")
1054
wxT("Ethan Allendale\n")
1056
wxT("Kountry Korner\n")
1057
wxT("Friendly Folks\n")
1059
wxT("Fin and Fur\n");
1061
// Create the dictionary
1063
dict_file.Create(dictionary, true);
1064
TS_ASSERT(dict_file.IsOpened());
1065
dict_file.Write(example, conv);
1068
// With a dictionary generator file(dictionary, false, wxDateTime::GetTimeNow(), utf-8)
1070
// [1] Create the generator
1071
pgsExpression * file_path = pnew pgsString(dictionary);
1072
pgsExpression * sequence = pnew pgsNumber(wxT("0"));
1073
pgsExpression * seed = pnew pgsNumber(wxString()
1074
<< wxDateTime::GetTimeNow());
1075
pgsExpression * encoding = pnew pgsString(wxT("utf-8"));
1076
pgsGenDictionary * gen = 0;
1077
gen = pnew pgsGenDictionary(file_path, sequence, seed, encoding);
1079
// [2] Check type properties
1083
pgsOperand rnd = gen->eval(vars);
1084
for (int i = 0; i < nb_iterations; i++)
1086
result = rnd->eval(vars)->value();
1087
TS_ASSERT(result.Length() >= 4); // The shortest city name in the dictionary
1090
// [4] Test copy constructor
1091
pgsGenDictionary * copy = pnew pgsGenDictionary(*gen);
1092
TS_ASSERT(copy->value() = gen->value());
1093
TS_ASSERT(copy->value() = gen->value());
1096
// [5] Test assignment operator
1097
pgsGenDictionary * assignment = pnew pgsGenDictionary(file_path->clone(),
1098
sequence->clone(), seed->clone(), encoding->clone());
1100
TS_ASSERT(assignment->value() = gen->value());
1101
TS_ASSERT(assignment->value() = gen->value());
1102
pdelete(assignment);
1104
// [6] Delete the generator
1108
// With an invalid dictionary generator file(dictionary, false, wxDateTime::GetTimeNow(), utf-8)
1109
// Sequence is a string
1111
// [1] Create the generator
1112
pgsExpression * file_path = pnew pgsString(dictionary);
1113
pgsExpression * sequence = pnew pgsString(wxT("0"));
1114
pgsExpression * seed = pnew pgsNumber(wxString()
1115
<< wxDateTime::GetTimeNow());
1116
pgsExpression * encoding = pnew pgsString(wxT("utf-8"));
1117
pgsGenDictionary * gen = 0;
1118
gen = pnew pgsGenDictionary(file_path, sequence, seed, encoding);
1120
// [2] Check type properties
1122
// [3] Check that the result is invalid
1128
catch (const pgsParameterException &)
1130
// Parameters are not correct: exception expected
1133
// [4] Delete the generator
1137
// With an invalid dictionary generator file(dictionary, false, wxDateTime::GetTimeNow(), utf-8)
1140
// [1] Create the generator
1141
pgsExpression * file_path = pnew pgsString(dictionary);
1142
pgsExpression * sequence = pnew pgsNumber(wxT("0"));
1143
pgsExpression * seed = pnew pgsString(wxString()
1144
<< wxDateTime::GetTimeNow());
1145
pgsExpression * encoding = pnew pgsString(wxT("utf-8"));
1146
pgsGenDictionary * gen = 0;
1147
gen = pnew pgsGenDictionary(file_path, sequence, seed, encoding);
1149
// [2] Check type properties
1151
// [3] Check that the result is invalid
1157
catch (const pgsParameterException &)
1159
// Parameters are not correct: exception expected
1162
// [4] Delete the generator
1166
// With an invalid dictionary generator file(123, false, wxDateTime::GetTimeNow(), utf-8)
1169
// [1] Create the generator
1170
pgsExpression * file_path = pnew pgsNumber(wxT("123"));
1171
pgsExpression * sequence = pnew pgsNumber(wxT("0"));
1172
pgsExpression * seed = pnew pgsNumber(wxString()
1173
<< wxDateTime::GetTimeNow());
1174
pgsExpression * encoding = pnew pgsString(wxT("utf-8"));
1175
pgsGenDictionary * gen = 0;
1176
gen = pnew pgsGenDictionary(file_path, sequence, seed, encoding);
1178
// [2] Check type properties
1180
// [3] Check that the result is invalid
1186
catch (const pgsParameterException &)
1188
// Parameters are not correct: exception expected
1191
// [4] Delete the generator
1195
// Remove the dictionary
1196
::wxRemoveFile(dictionary);