comparison _test/Test/DOM/Navigator.pm @ 24:7f00786f8210

Первая рабочая реазизация схемы и навигаторов
author Sergey
date Mon, 05 Oct 2009 00:48:49 +0400
parents 75980091813b
children 1828103371d0
comparison
equal deleted inserted replaced
23:716b287d4795 24:7f00786f8210
3 3
4 __PACKAGE__->PassThroughArgs; 4 __PACKAGE__->PassThroughArgs;
5 5
6 use IMPL::Test qw(test failed); 6 use IMPL::Test qw(test failed);
7 use IMPL::DOM::Navigator; 7 use IMPL::DOM::Navigator;
8 use IMPL::DOM::Navigator::SchemaNavigator;
8 use IMPL::DOM::Node; 9 use IMPL::DOM::Node;
10 use IMPL::DOM::Schema;
11 use IMPL::Class::Property;
12
13 BEGIN {
14 public property doc => prop_all;
15 }
16
17 sub CTOR {
18 my ($this) = @_;
19
20 $this->doc(
21 IMPL::DOM::Node->new(nodeName => 'root')->appendRange(
22 IMPL::DOM::Node->new(nodeName=> 'age', nodeValue => 21),
23 IMPL::DOM::Node->new(nodeName=> 'address')->appendRange(
24 IMPL::DOM::Node->new(nodeName=>'city', nodeValue=>'moscow'),
25 IMPL::DOM::Node->new(nodeName=>'street', nodeValue=>'main'),
26 IMPL::DOM::Node->new(nodeName=>'phone',nodeValue=>'123-456'),
27 ),
28 IMPL::DOM::Node->new(nodeName=> 'address')->appendRange(
29 IMPL::DOM::Node->new(nodeName=>'city', nodeValue=>'San Francisco'),
30 IMPL::DOM::Node->new(nodeName=>'street', nodeValue=>'Libertador'),
31 ),
32 IMPL::DOM::Node->new(nodeName=> 'contacts')->appendRange(
33 IMPL::DOM::Node->new(nodeName=>'phone',nodeValue=>'123-123'),
34 IMPL::DOM::Node->new(nodeName=>'phone',nodeValue=>'1-233-434-34-54'),
35 IMPL::DOM::Node->new(nodeName=>'email',nodeValue=>'some@mail.none')
36 )
37
38 )
39 );
40 }
9 41
10 test Creation => sub { 42 test Creation => sub {
11 my ($this) = @_; 43 my ($this) = @_;
12 44
13 my $doc = new IMPL::DOM::Node(nodeName => 'root'); 45 my $doc = new IMPL::DOM::Node(nodeName => 'root');
62 failed ("Back() retuned unexpected result", "Recieved: $navresult", "Expected: $doc") if $doc != $navresult; 94 failed ("Back() retuned unexpected result", "Recieved: $navresult", "Expected: $doc") if $doc != $navresult;
63 my $curr = $navi->Current; 95 my $curr = $navi->Current;
64 failed ("Current node has a wrong value","Current: $curr","Expected: $doc") if $doc != $curr; 96 failed ("Current node has a wrong value","Current: $curr","Expected: $doc") if $doc != $curr;
65 }; 97 };
66 98
99 test selectNodes1 => sub {
100 my ($this) = @_;
101
102 my $navi = new IMPL::DOM::Navigator($this->doc);
103 my @result = $navi->selectNodes('contacts','phone');
104 failed "Expected to get two entries, but got:",map($_->nodeName,@result) unless @result == 2;
105 };
67 106
107 test selectNodes2 => sub {
108 my ($this) = @_;
109
110 my $navi = new IMPL::DOM::Navigator($this->doc);
111 my @result = $navi->selectNodes(undef,'phone');
112 failed "Expected to get three entries, but got:",map($_->nodeName,@result) unless @result == 3;
113 };
68 114
115 test FetchDoeachState => sub {
116 my ($this) = @_;
117
118 my $navi = new IMPL::DOM::Navigator($this->doc);
119
120 $navi->Navigate(undef,'phone');
121
122 $navi->saveState();
123
124 my @result;
125 doeach $navi sub {
126 push @result,$_;
127 };
128
129 failed "Expected to get three nodes, but got: ", map($_->nodeName,@result) unless @result == 3;
130
131 $navi->restoreState();
132 @result = ();
133
134 push @result, $_ while fetch $navi;
135
136 failed "Expected to get three nodes, but got: ", map($_->nodeName,@result) unless @result == 3;
137 };
138
139 test NavigateSchema => sub {
140 my $navi = new IMPL::DOM::Navigator::SchemaNavigator(IMPL::DOM::Schema->MetaSchema);
141
142 my $root = $navi->NavigateName('schema') or failed "Failed to navigate to the root element";
143
144 $navi->saveState;
145 $navi->NavigateName('Node') or failed "Failed to navigate to a simple node";
146 $navi->restoreState;
147
148 failed "Can't navigate from simple node" if $navi->NavigateName('Property');
149
150 $navi->NavigateName('ComplexType') or failed "Failed to navigate to a complex node";
151 $navi->NavigateName('NodeSet') or failed "Failed to navigate to NodeSet";
152 $navi->SchemaBack();
153 $navi->NavigateName('NodeList') or failed "Failed to navigate to NodeList";
154 $navi->NavigateName('SimpleNode') or failed "Failed to navigate to SimpleNode";
155 $navi->NavigateName('Enum') or failed "Failed to navigate to Enum";
156 $navi->NavigateName('Item') or failed "Failed to navigate to Item";
157
158 };
69 159
70 160
71 1; 161 1;