001 // Copyright 2006, 2007, 2008, 2009, 2010, 2011 The Apache Software Foundation
002 //
003 // Licensed under the Apache License, Version 2.0 (the "License");
004 // you may not use this file except in compliance with the License.
005 // You may obtain a copy of the License at
006 //
007 // http://www.apache.org/licenses/LICENSE-2.0
008 //
009 // Unless required by applicable law or agreed to in writing, software
010 // distributed under the License is distributed on an "AS IS" BASIS,
011 // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
012 // See the License for the specific language governing permissions and
013 // limitations under the License.
014
015 package org.apache.tapestry5.test;
016
017 import java.io.IOException;
018 import java.io.InputStream;
019 import java.lang.annotation.Annotation;
020 import java.net.URL;
021 import java.util.Arrays;
022 import java.util.Locale;
023 import java.util.Map;
024 import java.util.Properties;
025
026 import javax.servlet.ServletOutputStream;
027 import javax.servlet.http.HttpServletRequest;
028 import javax.servlet.http.HttpServletResponse;
029 import javax.servlet.http.HttpSession;
030
031 import org.apache.tapestry5.Asset;
032 import org.apache.tapestry5.Asset2;
033 import org.apache.tapestry5.Binding;
034 import org.apache.tapestry5.Block;
035 import org.apache.tapestry5.ClientElement;
036 import org.apache.tapestry5.ComponentEventCallback;
037 import org.apache.tapestry5.ComponentResources;
038 import org.apache.tapestry5.ComponentResourcesCommon;
039 import org.apache.tapestry5.Field;
040 import org.apache.tapestry5.FieldTranslator;
041 import org.apache.tapestry5.FieldValidationSupport;
042 import org.apache.tapestry5.FieldValidator;
043 import org.apache.tapestry5.Link;
044 import org.apache.tapestry5.MarkupWriter;
045 import org.apache.tapestry5.NullFieldStrategy;
046 import org.apache.tapestry5.PropertyConduit;
047 import org.apache.tapestry5.PropertyOverrides;
048 import org.apache.tapestry5.Translator;
049 import org.apache.tapestry5.ValidationDecorator;
050 import org.apache.tapestry5.ValidationTracker;
051 import org.apache.tapestry5.Validator;
052 import org.apache.tapestry5.ValueEncoder;
053 import org.apache.tapestry5.annotations.Id;
054 import org.apache.tapestry5.annotations.Parameter;
055 import org.apache.tapestry5.annotations.Path;
056 import org.apache.tapestry5.beaneditor.BeanModel;
057 import org.apache.tapestry5.beaneditor.PropertyModel;
058 import org.apache.tapestry5.func.Predicate;
059 import org.apache.tapestry5.internal.services.MapMessages;
060 import org.apache.tapestry5.internal.services.MarkupWriterImpl;
061 import org.apache.tapestry5.ioc.AnnotationProvider;
062 import org.apache.tapestry5.ioc.Locatable;
063 import org.apache.tapestry5.ioc.Location;
064 import org.apache.tapestry5.ioc.Messages;
065 import org.apache.tapestry5.ioc.ObjectLocator;
066 import org.apache.tapestry5.ioc.Resource;
067 import org.apache.tapestry5.ioc.annotations.Inject;
068 import org.apache.tapestry5.ioc.internal.util.CollectionFactory;
069 import org.apache.tapestry5.ioc.internal.util.InternalUtils;
070 import org.apache.tapestry5.ioc.test.IOCTestCase;
071 import org.apache.tapestry5.model.ComponentModel;
072 import org.apache.tapestry5.model.EmbeddedComponentModel;
073 import org.apache.tapestry5.model.MutableComponentModel;
074 import org.apache.tapestry5.model.ParameterModel;
075 import org.apache.tapestry5.runtime.Component;
076 import org.apache.tapestry5.services.ApplicationStateCreator;
077 import org.apache.tapestry5.services.ApplicationStateManager;
078 import org.apache.tapestry5.services.ApplicationStatePersistenceStrategy;
079 import org.apache.tapestry5.services.ApplicationStatePersistenceStrategySource;
080 import org.apache.tapestry5.services.AssetFactory;
081 import org.apache.tapestry5.services.AssetSource;
082 import org.apache.tapestry5.services.BaseURLSource;
083 import org.apache.tapestry5.services.BeanModelSource;
084 import org.apache.tapestry5.services.BindingFactory;
085 import org.apache.tapestry5.services.BindingSource;
086 import org.apache.tapestry5.services.ClassTransformation;
087 import org.apache.tapestry5.services.ClasspathAssetAliasManager;
088 import org.apache.tapestry5.services.ComponentClassResolver;
089 import org.apache.tapestry5.services.ComponentEventRequestHandler;
090 import org.apache.tapestry5.services.ComponentEventResultProcessor;
091 import org.apache.tapestry5.services.ComponentRequestHandler;
092 import org.apache.tapestry5.services.Context;
093 import org.apache.tapestry5.services.Environment;
094 import org.apache.tapestry5.services.FieldTranslatorSource;
095 import org.apache.tapestry5.services.FieldValidatorSource;
096 import org.apache.tapestry5.services.FormSupport;
097 import org.apache.tapestry5.services.Heartbeat;
098 import org.apache.tapestry5.services.HttpServletRequestHandler;
099 import org.apache.tapestry5.services.InjectionProvider;
100 import org.apache.tapestry5.services.MetaDataLocator;
101 import org.apache.tapestry5.services.PageRenderLinkSource;
102 import org.apache.tapestry5.services.Request;
103 import org.apache.tapestry5.services.RequestGlobals;
104 import org.apache.tapestry5.services.RequestHandler;
105 import org.apache.tapestry5.services.ResourceDigestGenerator;
106 import org.apache.tapestry5.services.Response;
107 import org.apache.tapestry5.services.Session;
108 import org.apache.tapestry5.services.TransformField;
109 import org.apache.tapestry5.services.TransformMethodSignature;
110 import org.apache.tapestry5.services.TranslatorSource;
111 import org.apache.tapestry5.services.ValidationConstraintGenerator;
112 import org.apache.tapestry5.services.ValueEncoderSource;
113 import org.apache.tapestry5.services.javascript.JavaScriptSupport;
114 import org.easymock.EasyMock;
115 import org.easymock.IAnswer;
116
117 /**
118 * Base test case that adds a number of convenience factory and training methods for the public
119 * interfaces of
120 * Tapestry.
121 */
122 @SuppressWarnings("all")
123 public abstract class TapestryTestCase extends IOCTestCase
124 {
125
126 /**
127 * Creates a new markup writer instance (not a markup writer mock). Output can be directed at
128 * the writer, which uses
129 * the default (HTML) markup model. The writer's toString() value represents all the collected
130 * markup in the
131 * writer.
132 */
133 protected final MarkupWriter createMarkupWriter()
134 {
135 return new MarkupWriterImpl();
136 }
137
138 protected final ApplicationStateCreator mockApplicationStateCreator()
139 {
140 return newMock(ApplicationStateCreator.class);
141 }
142
143 protected final ApplicationStatePersistenceStrategy mockApplicationStatePersistenceStrategy()
144 {
145 return newMock(ApplicationStatePersistenceStrategy.class);
146 }
147
148 protected final ApplicationStatePersistenceStrategySource mockApplicationStatePersistenceStrategySource()
149 {
150 return newMock(ApplicationStatePersistenceStrategySource.class);
151 }
152
153 protected final Asset mockAsset()
154 {
155 return newMock(Asset.class);
156 }
157
158 protected final AssetFactory mockAssetFactory()
159 {
160 return newMock(AssetFactory.class);
161 }
162
163 protected final AssetSource mockAssetSource()
164 {
165 return newMock(AssetSource.class);
166 }
167
168 protected final Binding mockBinding()
169 {
170 return newMock(Binding.class);
171 }
172
173 protected final BindingFactory mockBindingFactory()
174 {
175 return newMock(BindingFactory.class);
176 }
177
178 protected final BindingSource mockBindingSource()
179 {
180 return newMock(BindingSource.class);
181 }
182
183 protected final Block mockBlock()
184 {
185 return newMock(Block.class);
186 }
187
188 protected final ClasspathAssetAliasManager mockClasspathAssetAliasManager()
189 {
190 return newMock(ClasspathAssetAliasManager.class);
191 }
192
193 protected final ClassTransformation mockClassTransformation()
194 {
195 return newMock(ClassTransformation.class);
196 }
197
198 protected final Component mockComponent()
199 {
200 return newMock(Component.class);
201 }
202
203 protected final ComponentClassResolver mockComponentClassResolver()
204 {
205 return newMock(ComponentClassResolver.class);
206 }
207
208 protected final ComponentEventCallback mockComponentEventHandler()
209 {
210 return newMock(ComponentEventCallback.class);
211 }
212
213 protected final ComponentModel mockComponentModel()
214 {
215 return newMock(ComponentModel.class);
216 }
217
218 protected final ComponentResources mockComponentResources()
219 {
220 return newMock(ComponentResources.class);
221 }
222
223 protected final Context mockContext()
224 {
225 return newMock(Context.class);
226 }
227
228 protected final Environment mockEnvironment()
229 {
230 return newMock(Environment.class);
231 }
232
233 protected final Field mockField()
234 {
235 return newMock(Field.class);
236 }
237
238 protected final FieldValidator mockFieldValidator()
239 {
240 return newMock(FieldValidator.class);
241 }
242
243 protected FieldValidatorSource mockFieldValidatorSource()
244 {
245 return newMock(FieldValidatorSource.class);
246 }
247
248 protected final Field mockFieldWithLabel(String label)
249 {
250 Field field = mockField();
251
252 train_getLabel(field, label);
253
254 return field;
255 }
256
257 protected final Heartbeat mockHeartbeat()
258 {
259 return newMock(Heartbeat.class);
260 }
261
262 protected final HttpServletRequest mockHttpServletRequest()
263 {
264 return newMock(HttpServletRequest.class);
265 }
266
267 protected final HttpServletResponse mockHttpServletResponse()
268 {
269 return newMock(HttpServletResponse.class);
270 }
271
272 protected final HttpSession mockHttpSession()
273 {
274 return newMock(HttpSession.class);
275 }
276
277 protected final Inject mockInject()
278 {
279 return newMock(Inject.class);
280 }
281
282 protected final Link mockLink()
283 {
284 return newMock(Link.class);
285 }
286
287 protected final MarkupWriter mockMarkupWriter()
288 {
289 return newMock(MarkupWriter.class);
290 }
291
292 protected final MutableComponentModel mockMutableComponentModel()
293 {
294 return newMock(MutableComponentModel.class);
295 }
296
297 protected final ParameterModel mockParameterModel()
298 {
299 return newMock(ParameterModel.class);
300 }
301
302 protected final Path mockPath()
303 {
304 return newMock(Path.class);
305 }
306
307 protected final PropertyConduit mockPropertyConduit()
308 {
309 return newMock(PropertyConduit.class);
310 }
311
312 protected final PropertyModel mockPropertyModel()
313 {
314 return newMock(PropertyModel.class);
315 }
316
317 protected final Request mockRequest()
318 {
319 return newMock(Request.class);
320 }
321
322 protected final RequestHandler mockRequestHandler()
323 {
324 return newMock(RequestHandler.class);
325 }
326
327 protected final ResourceDigestGenerator mockResourceDigestGenerator()
328 {
329 return newMock(ResourceDigestGenerator.class);
330 }
331
332 protected final Response mockResponse()
333 {
334 return newMock(Response.class);
335 }
336
337 protected final Session mockSession()
338 {
339 return newMock(Session.class);
340 }
341
342 protected final Translator mockTranslator()
343 {
344 return newMock(Translator.class);
345 }
346
347 protected final ValidationConstraintGenerator mockValidationConstraintGenerator()
348 {
349 return newMock(ValidationConstraintGenerator.class);
350 }
351
352 protected final ValidationTracker mockValidationTracker()
353 {
354 return newMock(ValidationTracker.class);
355 }
356
357 protected final Validator mockValidator()
358 {
359 return newMock(Validator.class);
360 }
361
362 protected final void train_buildConstraints(ValidationConstraintGenerator generator, Class propertyType,
363 AnnotationProvider provider, String... constraints)
364 {
365 expect(generator.buildConstraints(propertyType, provider)).andReturn(Arrays.asList(constraints));
366 }
367
368 protected final <T> void train_create(ApplicationStateCreator<T> creator, T aso)
369 {
370 expect(creator.create()).andReturn(aso);
371 }
372
373 protected final void train_createAsset(AssetFactory factory, Resource resource, Asset asset)
374 {
375 expect(factory.createAsset(resource)).andReturn(asset);
376 }
377
378 protected final void train_createValidator(FieldValidatorSource source, Field field, String validatorType,
379 String constraintValue, String overrideId, Messages overrideMessages, Locale locale, FieldValidator result)
380 {
381 expect(source.createValidator(field, validatorType, constraintValue, overrideId, overrideMessages, locale))
382 .andReturn(result);
383 }
384
385 protected final void train_encodeRedirectURL(Response response, String URI, String encoded)
386 {
387 expect(response.encodeRedirectURL(URI)).andReturn(encoded);
388 }
389
390 protected final void train_encodeURL(Response response, String inputURL, String outputURL)
391 {
392 expect(response.encodeURL(inputURL)).andReturn(outputURL);
393 }
394
395 protected final <T> void train_exists(ApplicationStatePersistenceStrategy strategy, Class<T> asoClass,
396 boolean exists)
397 {
398 expect(strategy.exists(asoClass)).andReturn(exists);
399 }
400
401 protected final void train_getAsset(AssetSource source, Resource root, String path, Locale locale, Asset asset)
402 {
403 expect(source.getAsset(root, path, locale)).andReturn(asset);
404 }
405
406 protected final void train_matchFields(ClassTransformation transformation, TransformField field)
407 {
408 expect(transformation.matchFields(EasyMock.isA(Predicate.class))).andReturn(Arrays.asList(field));
409 }
410
411 protected final void train_getName(TransformField field, String name)
412 {
413 expect(field.getName()).andReturn(name);
414 }
415
416 protected final <T extends Annotation> void train_getAnnotation(TransformField field, Class<T> annotationClass,
417 T anotation)
418 {
419 expect(field.getAnnotation(annotationClass)).andReturn(anotation);
420 }
421
422 protected final void train_generateChecksum(ResourceDigestGenerator generator, URL url, String digest)
423 {
424 expect(generator.generateDigest(url)).andReturn(digest);
425 }
426
427 protected final <T> void train_get(ApplicationStatePersistenceStrategy strategy, Class<T> asoClass,
428 ApplicationStateCreator<T> creator, T aso)
429 {
430 expect(strategy.get(asoClass, creator)).andReturn(aso);
431 }
432
433 protected final void train_get(ApplicationStatePersistenceStrategySource source, String strategyName,
434 ApplicationStatePersistenceStrategy strategy)
435 {
436 expect(source.get(strategyName)).andReturn(strategy).atLeastOnce();
437 }
438
439 protected final void train_get(Binding binding, Object value)
440 {
441 expect(binding.get()).andReturn(value);
442 }
443
444 protected void train_getAttribute(HttpSession session, String attributeName, Object value)
445 {
446 expect(session.getAttribute(attributeName)).andReturn(value);
447 }
448
449 protected final void train_getAttribute(Session session, String name, Object attribute)
450 {
451 expect(session.getAttribute(name)).andReturn(attribute);
452 }
453
454 protected final void train_getAttributeNames(Session session, String prefix, String... names)
455 {
456 expect(session.getAttributeNames(prefix)).andReturn(Arrays.asList(names));
457 }
458
459 protected final void train_getBaseResource(ComponentModel model, Resource resource)
460 {
461 expect(model.getBaseResource()).andReturn(resource).atLeastOnce();
462 }
463
464 protected final void train_getClassName(ClassTransformation transformation, String className)
465 {
466 expect(transformation.getClassName()).andReturn(className).atLeastOnce();
467 }
468
469 protected final void train_getClasspathAsset(AssetSource source, String path, Asset asset)
470 {
471 expect(source.getClasspathAsset(path)).andReturn(asset);
472 }
473
474 protected final void train_getClasspathAsset(AssetSource source, String path, Locale locale, Asset asset)
475 {
476 expect(source.getClasspathAsset(path, locale)).andReturn(asset);
477 }
478
479 protected final void train_getCompleteId(ComponentResourcesCommon resources, String completeId)
480 {
481 expect(resources.getCompleteId()).andReturn(completeId).atLeastOnce();
482 }
483
484 protected final void train_getComponent(ComponentResources resources, Component component)
485 {
486 expect(resources.getComponent()).andReturn(component).atLeastOnce();
487 }
488
489 protected final void train_getComponentClassName(ComponentModel model, String className)
490 {
491 expect(model.getComponentClassName()).andReturn(className).atLeastOnce();
492 }
493
494 protected final void train_getComponentResources(Component component, ComponentResources resources)
495 {
496 expect(component.getComponentResources()).andReturn(resources).atLeastOnce();
497 }
498
499 protected final void train_getConduit(PropertyModel model, PropertyConduit conduit)
500 {
501 expect(model.getConduit()).andReturn(conduit).atLeastOnce();
502 }
503
504 protected <C, T> void train_getConstraintType(Validator<C, T> validator, Class<C> constraintType)
505 {
506 expect(validator.getConstraintType()).andReturn(constraintType).atLeastOnce();
507 }
508
509 protected final void train_getContainer(ComponentResources resources, Component container)
510 {
511 expect(resources.getContainer()).andReturn(container).atLeastOnce();
512 }
513
514 protected final void train_getContainerMessages(ComponentResources resources, Messages containerMessages)
515 {
516 expect(resources.getContainerMessages()).andReturn(containerMessages).atLeastOnce();
517 }
518
519 protected final void train_getContainerResources(ComponentResources resources, ComponentResources containerResources)
520 {
521 expect(resources.getContainerResources()).andReturn(containerResources).atLeastOnce();
522 }
523
524 protected final void train_getDateHeader(Request request, String name, long value)
525 {
526 expect(request.getDateHeader(name)).andReturn(value).atLeastOnce();
527 }
528
529 protected final void train_getFieldPersistenceStrategy(ComponentModel model, String fieldName, String fieldStrategy)
530 {
531 expect(model.getFieldPersistenceStrategy(fieldName)).andReturn(fieldStrategy).atLeastOnce();
532 }
533
534 protected final void train_getId(ComponentResources resources, String id)
535 {
536 expect(resources.getId()).andReturn(id).atLeastOnce();
537 }
538
539 protected final void train_getLabel(Field field, String label)
540 {
541 expect(field.getLabel()).andReturn(label).atLeastOnce();
542 }
543
544 protected final void train_getLocale(ComponentResourcesCommon resources, Locale locale)
545 {
546 expect(resources.getLocale()).andReturn(locale).atLeastOnce();
547 }
548
549 protected final void train_getLocale(Request request, Locale locale)
550 {
551 expect(request.getLocale()).andReturn(locale).atLeastOnce();
552 }
553
554 protected void train_getMessageKey(Validator validator, String messageKey)
555 {
556 expect(validator.getMessageKey()).andReturn(messageKey).atLeastOnce();
557 }
558
559 protected final void train_getMessages(ComponentResources resources, Messages messages)
560 {
561 expect(resources.getMessages()).andReturn(messages).atLeastOnce();
562 }
563
564 protected final void train_getMeta(ComponentModel model, String key, String value)
565 {
566 expect(model.getMeta(key)).andReturn(value).atLeastOnce();
567 }
568
569 protected final void train_getOutputStream(HttpServletResponse response, ServletOutputStream stream)
570 {
571 try
572 {
573 expect(response.getOutputStream()).andReturn(stream);
574 }
575 catch (IOException e)
576 {
577 fail(e.getMessage(), e);
578 }
579 }
580
581 protected final void train_getPage(ComponentResources resources, Component page)
582 {
583 expect(resources.getPage()).andReturn(page).atLeastOnce();
584 }
585
586 protected final void train_getParameterModel(ComponentModel model, String parameterName,
587 ParameterModel parameterModel)
588 {
589 expect(model.getParameterModel(parameterName)).andReturn(parameterModel).atLeastOnce();
590 }
591
592 protected final void train_getParameterNames(ComponentModel model, String... names)
593 {
594 expect(model.getParameterNames()).andReturn(Arrays.asList(names));
595 }
596
597 protected final void train_getParentModel(ComponentModel model, ComponentModel parentModel)
598 {
599 expect(model.getParentModel()).andReturn(parentModel).atLeastOnce();
600 }
601
602 protected final void train_getPath(Request request, String path)
603 {
604 expect(request.getPath()).andReturn(path).atLeastOnce();
605 }
606
607 protected final void train_getPersistentFieldNames(ComponentModel model, String... names)
608 {
609 expect(model.getPersistentFieldNames()).andReturn(Arrays.asList(names)).atLeastOnce();
610 }
611
612 protected final void train_getRootResource(AssetFactory factory, Resource rootResource)
613 {
614 expect(factory.getRootResource()).andReturn(rootResource);
615 }
616
617 protected final void train_getSession(HttpServletRequest request, boolean create, HttpSession session)
618 {
619 expect(request.getSession(create)).andReturn(session);
620 }
621
622 protected void train_getSession(Request request, boolean create, Session session)
623 {
624 expect(request.getSession(create)).andReturn(session);
625 }
626
627 protected final void train_getSupportsInformalParameters(ComponentModel model, boolean supports)
628 {
629 expect(model.getSupportsInformalParameters()).andReturn(supports).atLeastOnce();
630 }
631
632 protected final void train_getValueType(Validator validator, Class valueType)
633 {
634 expect(validator.getValueType()).andReturn(valueType).atLeastOnce();
635 }
636
637 @SuppressWarnings("unchecked")
638 protected final void train_handleResult(ComponentEventCallback handler, Object result, boolean abort)
639 {
640 expect(handler.handleResult(result)).andReturn(abort);
641 }
642
643 protected final void train_inError(ValidationTracker tracker, Field field, boolean inError)
644 {
645 expect(tracker.inError(field)).andReturn(inError);
646 }
647
648 protected final void train_isRequired(Validator validator, boolean isRequired)
649 {
650 expect(validator.isRequired()).andReturn(isRequired).atLeastOnce();
651 }
652
653 protected final void train_isInvariant(Binding binding, boolean isInvariant)
654 {
655 expect(binding.isInvariant()).andReturn(isInvariant);
656 }
657
658 protected final void train_isRequired(ParameterModel model, boolean isRequired)
659 {
660 expect(model.isRequired()).andReturn(isRequired);
661 }
662
663 protected final void train_isRootClass(MutableComponentModel model, boolean isRootClass)
664 {
665 expect(model.isRootClass()).andReturn(isRootClass);
666 }
667
668 protected final void train_name(Parameter parameter, String name)
669 {
670 expect(parameter.name()).andReturn(name).atLeastOnce();
671 }
672
673 protected final void train_newBinding(BindingFactory factory, String description, ComponentResources container,
674 ComponentResources component, String expression, Location l, Binding binding)
675 {
676 expect(factory.newBinding(description, container, component, expression, l)).andReturn(binding);
677 }
678
679 protected void train_newBinding(BindingSource bindingSource, String description,
680 ComponentResources componentResources, String defaultBindingPrefix, String expression, Binding binding)
681 {
682 expect(bindingSource.newBinding(description, componentResources, defaultBindingPrefix, expression)).andReturn(
683 binding);
684 }
685
686 protected final void train_newMemberName(ClassTransformation transformation, String suggested, String name)
687 {
688 expect(transformation.newMemberName(suggested)).andReturn(name);
689 }
690
691 protected final void train_newMemberName(ClassTransformation transformation, String prefix, String baseName,
692 String name)
693 {
694 expect(transformation.newMemberName(prefix, baseName)).andReturn(name);
695 }
696
697 protected final <T> void train_peek(Environment env, Class<T> type, T value)
698 {
699 expect(env.peek(type)).andReturn(value);
700 }
701
702 protected final <T> void train_peekRequired(Environment env, Class<T> type, T value)
703 {
704 expect(env.peekRequired(type)).andReturn(value);
705 }
706
707 protected final void train_provideInjection(InjectionProvider provider, String fieldName, Class fieldType,
708 ObjectLocator locator, ClassTransformation transformation, MutableComponentModel model, boolean result)
709 {
710 expect(provider.provideInjection(fieldName, fieldType, locator, transformation, model)).andReturn(result);
711 }
712
713 @SuppressWarnings("unchecked")
714 protected final void train_renderInformalParameters(ComponentResources resources, final MarkupWriter writer,
715 final Object... informals)
716 {
717 resources.renderInformalParameters(writer);
718 IAnswer answer = new IAnswer()
719 {
720 public Object answer() throws Throwable
721 {
722 writer.attributes(informals);
723
724 return null;
725 }
726 };
727
728 setAnswer(answer);
729 }
730
731 protected final void train_requiresDigest(ResourceDigestGenerator generator, String path, boolean requiresDigest)
732 {
733 expect(generator.requiresDigest(path)).andReturn(requiresDigest);
734 }
735
736 protected final void train_service(RequestHandler handler, Request request, Response response, boolean result)
737 throws IOException
738 {
739 expect(handler.service(request, response)).andReturn(result);
740 }
741
742 protected final void train_setContentLength(HttpServletResponse response, int length)
743 {
744 response.setContentLength(length);
745 }
746
747 protected final void train_setContentType(HttpServletResponse response, String contentType)
748 {
749 response.setContentType(contentType);
750 }
751
752 protected final void train_setDateHeader(HttpServletResponse response, String headerName, long date)
753 {
754 response.setDateHeader(headerName, date);
755 }
756
757 protected final void train_toClass(ClassTransformation transformation, String type, Class classForType)
758 {
759 expect(transformation.toClass(type)).andReturn(classForType);
760 }
761
762 protected final void train_toClientURL(Asset asset, String URL)
763 {
764 expect(asset.toClientURL()).andReturn(URL).atLeastOnce();
765 }
766
767 protected final void train_toClientURL(ClasspathAssetAliasManager manager, String resourcePath, String clientURL)
768 {
769 expect(manager.toClientURL(resourcePath)).andReturn(clientURL);
770 }
771
772 protected final void train_toRedirectURI(Link link, String URI)
773 {
774 expect(link.toRedirectURI()).andReturn(URI).atLeastOnce();
775 }
776
777 protected final void train_value(Id annotation, String value)
778 {
779 expect(annotation.value()).andReturn(value).atLeastOnce();
780 }
781
782 protected final void train_value(Path annotation, String value)
783 {
784 expect(annotation.value()).andReturn(value).atLeastOnce();
785 }
786
787 protected final void train_getBoundType(ComponentResources resources, String parameterName, Class type)
788 {
789 expect(resources.getBoundType(parameterName)).andReturn(type);
790 }
791
792 protected final BeanModel mockBeanModel()
793 {
794 return newMock(BeanModel.class);
795 }
796
797 protected final BeanModelSource mockBeanModelSource()
798 {
799 return newMock(BeanModelSource.class);
800 }
801
802 public final void train_getLocation(Locatable locatable, Location location)
803 {
804 expect(locatable.getLocation()).andReturn(location).atLeastOnce();
805 }
806
807 public final void train_getResource(Location location, Resource resource)
808 {
809 expect(location.getResource()).andReturn(resource).atLeastOnce();
810 }
811
812 public final void train_getLine(Location location, int line)
813 {
814 expect(location.getLine()).andReturn(line).atLeastOnce();
815 }
816
817 protected final void train_getParameter(Request request, String elementName, String value)
818 {
819 expect(request.getParameter(elementName)).andReturn(value).atLeastOnce();
820 }
821
822 protected final void train_getPageName(ComponentResourcesCommon resources, String pageName)
823 {
824 expect(resources.getPageName()).andReturn(pageName).atLeastOnce();
825 }
826
827 protected final FormSupport mockFormSupport()
828 {
829 return newMock(FormSupport.class);
830 }
831
832 /**
833 * Provides access to component messages, suitable for testing. Reads the associated .properties
834 * file for the class
835 * (NOT any localization of it). Only the messages directly in the .properties file is
836 * available.
837 *
838 * @param componentClass
839 * component class whose messages are needed *
840 * @return the Messages instance
841 */
842 protected final Messages messagesFor(Class componentClass) throws IOException
843 {
844 String file = componentClass.getSimpleName() + ".properties";
845
846 Properties properties = new Properties();
847
848 InputStream is = null;
849
850 try
851 {
852 is = componentClass.getResourceAsStream(file);
853
854 if (is == null)
855 throw new RuntimeException(String.format("Class %s does not have a message catalog.",
856 componentClass.getName()));
857
858 properties.load(is);
859 }
860 finally
861 {
862 InternalUtils.close(is);
863 }
864
865 Map<String, String> map = CollectionFactory.newCaseInsensitiveMap();
866
867 for (Object key : properties.keySet())
868 {
869
870 String skey = (String) key;
871
872 map.put(skey, properties.getProperty(skey));
873 }
874
875 return new MapMessages(Locale.ENGLISH, map);
876 }
877
878 protected final FieldValidationSupport mockFieldValidationSupport()
879 {
880 return newMock(FieldValidationSupport.class);
881 }
882
883 protected final void train_getInheritInformalParameters(EmbeddedComponentModel model, boolean inherits)
884 {
885 expect(model.getInheritInformalParameters()).andReturn(inherits).atLeastOnce();
886 }
887
888 protected final ApplicationStateManager mockApplicationStateManager()
889 {
890 return newMock(ApplicationStateManager.class);
891 }
892
893 protected final <T> void train_get(ApplicationStateManager manager, Class<T> asoClass, T aso)
894 {
895 expect(manager.get(asoClass)).andReturn(aso);
896 }
897
898 protected final void train_getInput(ValidationTracker tracker, Field field, String input)
899 {
900 expect(tracker.getInput(field)).andReturn(input);
901 }
902
903 protected final void train_isXHR(Request request, boolean isXHR)
904 {
905 expect(request.isXHR()).andReturn(isXHR).atLeastOnce();
906 }
907
908 protected void train_getPathInfo(HttpServletRequest request, String pathInfo)
909 {
910 expect(request.getPathInfo()).andReturn(pathInfo).atLeastOnce();
911 }
912
913 protected final void train_service(HttpServletRequestHandler handler, HttpServletRequest request,
914 HttpServletResponse response, boolean result) throws IOException
915 {
916 expect(handler.service(request, response)).andReturn(result);
917 }
918
919 protected final void train_getServletPath(HttpServletRequest request, String path)
920 {
921 expect(request.getServletPath()).andReturn(path).atLeastOnce();
922 }
923
924 protected final HttpServletRequestHandler mockHttpServletRequestHandler()
925 {
926 return newMock(HttpServletRequestHandler.class);
927 }
928
929 protected final NullFieldStrategy mockNullFieldStrategy()
930 {
931 return newMock(NullFieldStrategy.class);
932 }
933
934 protected final ValueEncoderSource mockValueEncoderSource()
935 {
936 return newMock(ValueEncoderSource.class);
937 }
938
939 protected final ValueEncoder mockValueEncoder()
940 {
941 return newMock(ValueEncoder.class);
942 }
943
944 protected final void train_toClient(ValueEncoder valueEncoder, Object value, String encoded)
945 {
946 expect(valueEncoder.toClient(value)).andReturn(encoded);
947 }
948
949 protected final void train_getValueEncoder(ValueEncoderSource source, Class type, ValueEncoder valueEncoder)
950 {
951 expect(source.getValueEncoder(type)).andReturn(valueEncoder).atLeastOnce();
952 }
953
954 protected final void train_toValue(ValueEncoder valueEncoder, String clientValue, Object value)
955 {
956 expect(valueEncoder.toValue(clientValue)).andReturn(value);
957 }
958
959 protected <T> void train_findMeta(MetaDataLocator locator, String key, ComponentResources resources,
960 Class<T> expectedType, T value)
961 {
962 expect(locator.findMeta(key, resources, expectedType)).andReturn(value).atLeastOnce();
963 }
964
965 protected MetaDataLocator mockMetaDataLocator()
966 {
967 return newMock(MetaDataLocator.class);
968 }
969
970 protected final void train_isSecure(Request request, boolean isSecure)
971 {
972 expect(request.isSecure()).andReturn(isSecure).atLeastOnce();
973 }
974
975 protected final void train_getBaseURL(BaseURLSource baseURLSource, boolean secure, String baseURL)
976 {
977 expect(baseURLSource.getBaseURL(secure)).andReturn(baseURL);
978 }
979
980 protected final BaseURLSource mockBaseURLSource()
981 {
982 return newMock(BaseURLSource.class);
983 }
984
985 protected final void train_getAttribute(Request request, String attibuteName, Object value)
986 {
987 expect(request.getAttribute(attibuteName)).andReturn(value);
988 }
989
990 protected final void train_getBlockParameter(ComponentResources resources, String name, Block block)
991 {
992 expect(resources.getBlockParameter(name)).andReturn(block).atLeastOnce();
993 }
994
995 protected final PropertyOverrides mockPropertyOverrides()
996 {
997 return newMock(PropertyOverrides.class);
998 }
999
1000 protected void train_getOverrideBlock(PropertyOverrides overrides, String name, Block block)
1001 {
1002 expect(overrides.getOverrideBlock(name)).andReturn(block).atLeastOnce();
1003 }
1004
1005 protected final void train_getOverrideMessages(PropertyOverrides overrides, Messages messages)
1006 {
1007 expect(overrides.getOverrideMessages()).andReturn(messages);
1008 }
1009
1010 protected final void train_isDisabled(Field field, boolean disabled)
1011 {
1012 expect(field.isDisabled()).andReturn(disabled);
1013 }
1014
1015 protected final ValidationDecorator mockValidationDecorator()
1016 {
1017 return newMock(ValidationDecorator.class);
1018 }
1019
1020 protected final void train_isRequired(Field field, boolean required)
1021 {
1022 expect(field.isRequired()).andReturn(required);
1023 }
1024
1025 protected final void train_getClientId(ClientElement element, String clientId)
1026 {
1027 expect(element.getClientId()).andReturn(clientId);
1028 }
1029
1030 protected final FieldTranslator mockFieldTranslator()
1031 {
1032 return newMock(FieldTranslator.class);
1033 }
1034
1035 protected final Translator mockTranslator(String name, Class type)
1036 {
1037 Translator translator = mockTranslator();
1038
1039 train_getName(translator, name);
1040 train_getType(translator, type);
1041
1042 return translator;
1043 }
1044
1045 protected final void train_getName(Translator translator, String name)
1046 {
1047 expect(translator.getName()).andReturn(name).atLeastOnce();
1048 }
1049
1050 protected final void train_getType(Translator translator, Class type)
1051 {
1052 expect(translator.getType()).andReturn(type).atLeastOnce();
1053 }
1054
1055 protected final void train_getType(TransformField field, String type)
1056 {
1057 expect(field.getType()).andReturn(type).atLeastOnce();
1058 }
1059
1060 protected final void train_createDefaultTranslator(FieldTranslatorSource source, ComponentResources resources,
1061 String parameterName, FieldTranslator translator)
1062 {
1063 expect(source.createDefaultTranslator(resources, parameterName)).andReturn(translator);
1064 }
1065
1066 protected final TranslatorSource mockTranslatorSource()
1067 {
1068 return newMock(TranslatorSource.class);
1069 }
1070
1071 protected final void train_get(TranslatorSource translatorSource, String name, Translator translator)
1072 {
1073 expect(translatorSource.get(name)).andReturn(translator).atLeastOnce();
1074 }
1075
1076 protected final void train_getMessageKey(Translator translator, String messageKey)
1077 {
1078 expect(translator.getMessageKey()).andReturn(messageKey).atLeastOnce();
1079 }
1080
1081 protected final void train_findByType(TranslatorSource ts, Class propertyType, Translator translator)
1082 {
1083 expect(ts.findByType(propertyType)).andReturn(translator);
1084 }
1085
1086 protected final void train_toURI(Link link, String URI)
1087 {
1088 expect(link.toURI()).andReturn(URI);
1089 }
1090
1091 protected final void train_createEditModel(BeanModelSource source, Class beanClass, Messages messages,
1092 BeanModel model)
1093 {
1094 expect(source.createEditModel(beanClass, messages)).andReturn(model);
1095 }
1096
1097 protected final ComponentEventResultProcessor mockComponentEventResultProcessor()
1098 {
1099 return newMock(ComponentEventResultProcessor.class);
1100 }
1101
1102 protected final void train_getFormComponentId(FormSupport formSupport, String componentId)
1103 {
1104 expect(formSupport.getFormComponentId()).andReturn(componentId).atLeastOnce();
1105 }
1106
1107 protected final void train_getFormValidationId(FormSupport formSupport, String validationId)
1108 {
1109 expect(formSupport.getFormValidationId()).andReturn(validationId).atLeastOnce();
1110 }
1111
1112 protected final void train_isAllowNull(ParameterModel model, boolean allowNull)
1113 {
1114 expect(model.isAllowNull()).andReturn(allowNull).atLeastOnce();
1115 }
1116
1117 protected final void train_isInvalidated(Session session, boolean invalidated)
1118 {
1119 expect(session.isInvalidated()).andReturn(invalidated);
1120 }
1121
1122 protected final ComponentEventRequestHandler mockComponentEventRequestHandler()
1123 {
1124 return newMock(ComponentEventRequestHandler.class);
1125 }
1126
1127 protected final ComponentRequestHandler mockComponentRequestHandler()
1128 {
1129 return newMock(ComponentRequestHandler.class);
1130 }
1131
1132 protected final Asset2 mockAsset2()
1133 {
1134 return newMock(Asset2.class);
1135 }
1136
1137 /** @since 5.2.0 */
1138 protected final RequestGlobals mockRequestGlobals()
1139 {
1140 return newMock(RequestGlobals.class);
1141 }
1142
1143 protected final PageRenderLinkSource mockPageRenderLinkSource()
1144 {
1145 return newMock(PageRenderLinkSource.class);
1146 }
1147
1148 protected final JavaScriptSupport mockJavaScriptSupport()
1149 {
1150 return newMock(JavaScriptSupport.class);
1151 }
1152
1153 protected final Asset mockAsset(String assetURL)
1154 {
1155 Asset asset = mockAsset();
1156
1157 train_toClientURL(asset, assetURL);
1158
1159 return asset;
1160 }
1161
1162 protected final Link mockLink(String absoluteURI)
1163 {
1164 Link link = mockLink();
1165
1166 expect(link.toURI()).andReturn(absoluteURI).atLeastOnce();
1167
1168 return link;
1169 }
1170 }