1# Before `make install' is performed this script should be runnable with
2# `make test'. After `make install' it should work as `perl test.pl'
3#########################
4
5# change 'tests => 1' to 'tests => last_test_to_print';
6
7sub result {
8    my($i, $state) = @_;
9    if ($state) {
10	print "ok $i\n";
11    } else {
12	print "ng $i\n";
13	exit $i;
14    }
15}
16
17sub sortFunc {
18    my($a, $b) = @_;
19    my($va, $vb);
20
21    $va = $a->objValue();
22    $vb = $b->objValue();
23    return $va <=> $vb;
24}
25
26use Test;
27BEGIN { plan tests => 13 };
28use ClearSilver;
29ok(1); # If we made it this far, we're ok.
30
31$testnum = 2;
32#
33# test new()
34#
35$hdf = ClearSilver::HDF->new();
36$hdf ? result($testnum, 1) : result($testnum, 0);
37$testnum++;
38
39#
40# test reading file
41#
42$ret = $hdf->readFile("test.hdf");
43$ret ? result($testnum, 1) : result($testnum, 0);
44$testnum++;
45
46#
47# test getObj()
48#
49$lev2_node = $hdf->getObj("TopNode.2nd1");
50$lev2_node ? result($testnum, 1) : result($testnum, 0);
51$testnum++;
52
53
54#
55# test objName()
56#
57$lev2_name = $lev2_node->objName();
58($lev2_name eq "2nd1") ? result($testnum, 1) : result($testnum, 0);
59$testnum++;
60
61#
62# test objChild() & objValue()
63#
64$lev3_node = $lev2_node->objChild();
65if (!$lev3_node) {
66    result($testnum, 0);
67}
68$val = $lev3_node->objValue();
69($val eq "value1") ?  result($testnum, 1) : result($testnum, 0);
70$testnum++;
71
72#
73# test objNext()
74#
75$next_node = $lev3_node->objNext();
76if (!$lev3_node) {
77    result($testnum, 0);
78}
79$nam = $next_node->objName();
80($nam eq "Entry2") ? result($testnum, 1) : result($testnum, 0);
81$testnum++;
82
83#
84# test getChild()
85#
86$lev2_node = $hdf->getChild("TopNode.2nd1");
87$lev2_node ? result($testnum, 1) : result($testnum, 0);
88$testnum++;
89
90#
91# test setValue() & getValue()
92#
93$hdf->setValue("Data.1", "Value1");
94$str = $hdf->getValue("Data.1", "default");
95($str eq "Value1") ? result($testnum, 1) : result($testnum, 0);
96$testnum++;
97
98$str = $hdf->getValue("Data.2", "default"); # doesn't exist
99($str eq "default") ? result($testnum, 1) : result($testnum, 0);
100$testnum++;
101
102#
103# test copy tree
104#
105$copy = ClearSilver::HDF->new();
106$ret = $copy->copy("", $hdf);
107$ret ? result($testnum, 0) : result($testnum, 1);
108$testnum++;
109$str = $copy->getValue("Data.1", "default");
110print $str
111($str eq "Value1") ? result($testnum, 1) : result($testnum, 0);
112$testnum++;
113
114#
115# test setSymlink()
116#
117$ret = $copy->setSymlink( "BottomNode" ,"TopNode");
118$ret ? result($testnum, 1) : result($testnum, 0);
119$testnum++;
120$tmp = $copy->getObj("BottomNode.2nd1");
121$tmp ? result($testnum, 1) : result($testnum, 0);
122$testnum++;
123
124#
125# test removeTree()
126#
127$ret = $copy->removeTree("TopNode");
128$ret ? result($testnum, 1) : result($testnum, 0);
129$testnum++;
130$tmp = $copy->getObj("TopNode.2nd1");
131$tmp ? result($testnum, 0) : result($testnum, 1);
132$testnum++;
133
134#
135# test sortObj()
136#
137$sort_top = $hdf->getObj("Sort.Data");
138$sort_top->sortObj("sortFunc");
139$child = $sort_top->objChild();
140$name = $child->objName();
141($name eq "entry3") ? result($testnum, 1) : result($testnum, 0);
142$testnum++;
143
144
145#
146# test CS
147#
148$cs = ClearSilver::CS->new($hdf);
149$cs ? result($testnum, 1) : result($testnum, 0);
150$testnum++;
151
152#
153# parseString() and render()
154#
155$ret = $cs->parseString("<?cs var:TopNode.2nd1.Entry3 ?>");
156if (!$ret) {
157    result($testnum, 0);
158}
159$ret = $cs->render();
160($ret eq "value3") ? result($testnum, 1) : result($testnum, 0);
161$testnum++;
162
163#
164# parseFile()
165#
166$ret = $cs->parseFile("test.cs");
167if (!$ret) {
168    result($testnum, 0);
169}
170$ret = $cs->render();
171open(FH, "> test.out");
172print FH $ret;
173close(FH);
174$ret = system("diff test.gold test.out > /dev/null");
175$ret ? result($testnum, 0) : result($testnum, 1);
176
177
178