comparison _test/Test/Web/View.pm @ 289:85572f512abc

*TTView refactoring
author cin
date Wed, 20 Feb 2013 02:25:30 +0400
parents 3a9cfea098dd
children aeeb57a12046
comparison
equal deleted inserted replaced
288:3a9cfea098dd 289:85572f512abc
85 85
86 # document should inherit loader's context 86 # document should inherit loader's context
87 assert( $doc->context->stash->get('user') eq 'test_user'); 87 assert( $doc->context->stash->get('user') eq 'test_user');
88 88
89 # document should not have 'this' template variable 89 # document should not have 'this' template variable
90 assert( not $doc->templateVars('this') );
91 90
92 assert( $doc->context != $loader->context); # document should have an own context 91 assert( $doc->context != $loader->context); # document should have an own context
93 }; 92 };
94 93
95 test TTDocumentTests => sub { 94 test TTDocumentTests => sub {
106 assert($doc->title eq 'test document'); 105 assert($doc->title eq 'test document');
107 106
108 assert(not $doc->can('notexists')); # autoloaded property should be ignored 107 assert(not $doc->can('notexists')); # autoloaded property should be ignored
109 assert(not defined $doc->notexists); # nonexisting property 108 assert(not defined $doc->notexists); # nonexisting property
110 assert($doc->template->version == 10); # static metadata 109 assert($doc->template->version == 10); # static metadata
111 assert($doc->templateVars('notexists') eq ''); #nonexisting template variable
112 assert($doc->templateVars('user') eq 'test_user'); # global data
113 assert($doc->templateVars('templateVar') eq ''); # defined in CTOR block, should be local
114 assert($doc->templateVars('dynamic') eq 'this is a dynamic value');
115 assert($doc->context->stash->get('user') eq 'test_user' ); # runtime context should be derived from documentContext 110 assert($doc->context->stash->get('user') eq 'test_user' ); # runtime context should be derived from documentContext
116 $doc->context->stash->set('user', 'nobody');
117 assert($doc->templateVars('user') eq 'test_user'); # isolated
118 $doc->context->stash->set('user', 'test_user');
119 111
120 my $text = $doc->Render(); 112 my $text = $doc->Render();
121 my $expected = read_file($this->GetResourceFile('Resources','TTView.Output','simple.txt'), binmode => ':utf8'); 113 my $expected = read_file($this->GetResourceFile('Resources','TTView.Output','simple.txt'), binmode => ':utf8');
122 114
123 assert($text eq $expected, "Bad Render() output","Got: $text", "Expected: $expected"); 115 assert($text eq $expected, "Bad Render() output","Got: $text", "Expected: $expected");
124
125 };
126
127 test TTControlTests => sub {
128 my ($this) = @_;
129
130 my $loader = $this->CreateLoader();
131
132 my $doc = $loader->document('simple');
133
134 assert(defined $doc);
135
136 my $factory = $doc->RequireControl('My/Org/Panel');
137
138 assert(defined $factory);
139
140 # control factory shares document scope to perform an initialization on demand
141 assert($factory->context->stash == $doc->context->stash);
142
143 assert($factory == $doc->RequireControl('My/Org/Panel'), "Control should be loaded only once");
144
145 my $ctl = $factory->new('information', { visualClass => 'simple', data => ['one','two','hello world'] } );
146
147 assert(defined $ctl);
148
149 assert($ctl->name eq 'information', "Created control should have a name", "Got: ".$ctl->name, "Expected: information");
150
151 assert($ctl->GetAttribute('visualClass') eq 'simple');
152
153 assert($factory->instances == 1);
154
155 $doc->childNodes([$ctl]);
156
157 assert($doc->templateVars('dojo.require'));
158 assert(ref $doc->templateVars('dojo.require') eq 'ARRAY');
159 assert($doc->templateVars('dojo.require')->[0] eq 'dijit.form.Input' );
160
161 my $text = $ctl->Render();
162
163 my $expected = read_file($this->GetResourceFile('Resources', 'TTView.Output', 'Panel.txt'), binmode => ':utf8');
164 assert($text eq $expected, '$ctl->Render(): Bad output', "Got: $text", "Expected: $expected");
165
166
167 my $doc2 = $loader->document('simple');
168
169 assert( $doc2->documentContext->stash->get( ['require',['My/Org/Panel'] ] ) );
170 print Dumper($doc2->context->stash);
171 assert( $doc2->context->stash->get( ['require',['My/Org/Panel'] ] ) );
172
173 116
174 }; 117 };
175 118
176 test TestDocumentLayout => sub { 119 test TestDocumentLayout => sub {
177 my ($this) = @_; 120 my ($this) = @_;
206 my $doc = $loader->document('simple'); 149 my $doc = $loader->document('simple');
207 150
208 assert(ref $loader->context->stash->get([ 'dojo', 0, 'require', 0]) eq 'ARRAY'); 151 assert(ref $loader->context->stash->get([ 'dojo', 0, 'require', 0]) eq 'ARRAY');
209 assertarray($loader->context->stash->get([ 'dojo', 0, 'require', 0]),[]); 152 assertarray($loader->context->stash->get([ 'dojo', 0, 'require', 0]),[]);
210 assert($loader->context->stash != $doc->context->stash); 153 assert($loader->context->stash != $doc->context->stash);
211 assert($loader->context->stash != $doc->documentContext->stash);
212 assert($doc->context->stash != $doc->documentContext->stash);
213 154
214 assert(defined $doc); 155 assert(defined $doc);
215 156
216 # only root stash variables can be localized, to avoid modifying dojo we 157 # only root stash variables can be localized, to avoid modifying dojo we
217 # need to replace it completely 158 # need to replace it completely
249 my $loader = $this->CreateLoader(); 190 my $loader = $this->CreateLoader();
250 $loader->document('simple'); # force loader initialization 191 $loader->document('simple'); # force loader initialization
251 192
252 AssertMemoryLeak(sub { 193 AssertMemoryLeak(sub {
253 my $doc = $loader->document('simple'); 194 my $doc = $loader->document('simple');
254 }); 195 },'dump');
255 196
256 AssertMemoryLeak(sub { 197 AssertMemoryLeak(sub {
257 my $doc = $loader->document('simple'); 198 my $doc = $loader->document('simple');
258 $doc->Render( { self => $doc } ); 199 $doc->Render( { self => $doc } );
259 }); 200 },'dump');
260 201
261 $loader->template('Layout/default'); 202 $loader->template('Layout/default');
262 $loader->template('My/Org/Panel'); 203 $loader->template('My/Org/Panel');
263 $loader->template('My/Org/TextPreview'); 204 $loader->template('My/Org/TextPreview');
264 AssertMemoryLeak(sub {
265 my $doc = $loader->document('simple');
266 my $factory = $doc->RequireControl('My/Org/Panel');
267 my $ctl = $doc->childNodes($factory->new('information', { visualClass => 'complex' }) );
268 },'dump');
269 205
270 $loader->template('complex'); 206 $loader->template('complex');
271 AssertMemoryLeak(sub { 207 AssertMemoryLeak(sub {
272 my $doc = $loader->document('complex'); 208 my $doc = $loader->document('complex');
273 $doc->Render(); 209 $doc->Render();