| 
									
										
										
										
											2015-02-03 07:27:09 -08:00
										 |  |  | import {ddescribe, describe, it, iit, xit, expect, beforeEach, afterEach, | 
					
						
							| 
									
										
										
										
											2015-02-05 14:09:26 -08:00
										 |  |  |   el, queryView, dispatchEvent} from 'angular2/test_lib'; | 
					
						
							| 
									
										
										
										
											2015-02-03 07:27:09 -08:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2015-02-05 14:09:26 -08:00
										 |  |  | import {Lexer, Parser, ChangeDetector, dynamicChangeDetection} from 'angular2/change_detection'; | 
					
						
							|  |  |  | import {Compiler, CompilerCache} from 'angular2/src/core/compiler/compiler'; | 
					
						
							|  |  |  | import {DirectiveMetadataReader} from 'angular2/src/core/compiler/directive_metadata_reader'; | 
					
						
							| 
									
										
										
										
											2015-01-30 09:43:21 +01:00
										 |  |  | import {NativeShadowDomStrategy} from 'angular2/src/core/compiler/shadow_dom_strategy'; | 
					
						
							| 
									
										
										
										
											2015-02-12 14:44:59 +01:00
										 |  |  | import {TemplateLoader} from 'angular2/src/core/compiler/template_loader'; | 
					
						
							| 
									
										
										
										
											2015-02-24 16:05:45 +01:00
										 |  |  | import {ComponentUrlMapper} from 'angular2/src/core/compiler/component_url_mapper'; | 
					
						
							|  |  |  | import {UrlResolver} from 'angular2/src/core/compiler/url_resolver'; | 
					
						
							|  |  |  | import {StyleUrlResolver} from 'angular2/src/core/compiler/style_url_resolver'; | 
					
						
							| 
									
										
										
										
											2015-03-02 15:02:48 +01:00
										 |  |  | import {CssProcessor} from 'angular2/src/core/compiler/css_processor'; | 
					
						
							| 
									
										
										
										
											2015-02-24 16:05:45 +01:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2015-02-24 15:32:44 +01:00
										 |  |  | import {MockTemplateResolver} from 'angular2/src/mock/template_resolver_mock'; | 
					
						
							| 
									
										
										
										
											2015-02-12 14:44:59 +01:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2015-02-05 14:09:26 -08:00
										 |  |  | import {Injector} from 'angular2/di'; | 
					
						
							| 
									
										
										
										
											2015-02-12 14:44:59 +01:00
										 |  |  | 
 | 
					
						
							|  |  |  | import {Component, Decorator, Template} from 'angular2/core'; | 
					
						
							| 
									
										
										
										
											2015-02-24 11:59:10 -08:00
										 |  |  | import {ControlGroupDirective, ControlDirective, Control, ControlGroup, OptionalControl, | 
					
						
							| 
									
										
										
										
											2015-02-23 15:26:53 -08:00
										 |  |  |   ControlValueAccessor, RequiredValidatorDirective} from 'angular2/forms'; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | import * as validators from 'angular2/src/forms/validators'; | 
					
						
							| 
									
										
										
										
											2015-02-04 11:45:33 -08:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2015-03-06 18:12:48 +01:00
										 |  |  | import {reflector} from 'angular2/src/reflection/reflection'; | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2015-02-03 07:27:09 -08:00
										 |  |  | export function main() { | 
					
						
							|  |  |  |   function detectChanges(view) { | 
					
						
							|  |  |  |     view.changeDetector.detectChanges(); | 
					
						
							|  |  |  |   } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |   function compile(componentType, template, context, callback) { | 
					
						
							| 
									
										
										
										
											2015-02-24 15:32:44 +01:00
										 |  |  |     var tplResolver = new MockTemplateResolver(); | 
					
						
							| 
									
										
										
										
											2015-02-24 16:05:45 +01:00
										 |  |  |     var urlResolver = new UrlResolver(); | 
					
						
							| 
									
										
										
										
											2015-02-12 14:44:59 +01:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2015-02-04 11:45:33 -08:00
										 |  |  |     var compiler = new Compiler(dynamicChangeDetection, | 
					
						
							| 
									
										
										
										
											2015-02-24 16:05:45 +01:00
										 |  |  |       new TemplateLoader(null, null), | 
					
						
							| 
									
										
										
										
											2015-02-04 11:45:33 -08:00
										 |  |  |       new DirectiveMetadataReader(), | 
					
						
							|  |  |  |       new Parser(new Lexer()), | 
					
						
							|  |  |  |       new CompilerCache(), | 
					
						
							| 
									
										
										
										
											2015-02-24 16:05:45 +01:00
										 |  |  |       new NativeShadowDomStrategy(new StyleUrlResolver(urlResolver)), | 
					
						
							|  |  |  |       tplResolver, | 
					
						
							|  |  |  |       new ComponentUrlMapper(), | 
					
						
							| 
									
										
										
										
											2015-03-02 15:02:48 +01:00
										 |  |  |       urlResolver, | 
					
						
							| 
									
										
										
										
											2015-03-03 11:32:19 +01:00
										 |  |  |       new CssProcessor(null) | 
					
						
							| 
									
										
										
										
											2015-02-12 14:44:59 +01:00
										 |  |  |     ); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     tplResolver.setTemplate(componentType, new Template({ | 
					
						
							|  |  |  |       inline: template, | 
					
						
							| 
									
										
										
										
											2015-02-24 11:59:10 -08:00
										 |  |  |       directives: [ControlGroupDirective, ControlDirective, WrappedValue, RequiredValidatorDirective] | 
					
						
							| 
									
										
										
										
											2015-02-12 14:44:59 +01:00
										 |  |  |     })); | 
					
						
							| 
									
										
										
										
											2015-02-03 07:27:09 -08:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2015-02-12 14:44:59 +01:00
										 |  |  |     compiler.compile(componentType).then((pv) => { | 
					
						
							| 
									
										
										
										
											2015-03-06 18:12:48 +01:00
										 |  |  |       var view = pv.instantiate(null, null, reflector); | 
					
						
							| 
									
										
										
										
											2015-02-03 07:27:09 -08:00
										 |  |  |       view.hydrate(new Injector([]), null, context); | 
					
						
							|  |  |  |       detectChanges(view); | 
					
						
							|  |  |  |       callback(view); | 
					
						
							|  |  |  |     }); | 
					
						
							|  |  |  |   } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |   describe("integration tests", () => { | 
					
						
							|  |  |  |     it("should initialize DOM elements with the given form object", (done) => { | 
					
						
							|  |  |  |       var ctx = new MyComp(new ControlGroup({ | 
					
						
							|  |  |  |         "login": new Control("loginValue") | 
					
						
							|  |  |  |       })); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |       var t = `<div [control-group]="form">
 | 
					
						
							| 
									
										
										
										
											2015-02-23 15:26:53 -08:00
										 |  |  |                 <input type="text" control="login"> | 
					
						
							| 
									
										
										
										
											2015-02-03 07:27:09 -08:00
										 |  |  |               </div>`; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |       compile(MyComp, t, ctx, (view) => { | 
					
						
							|  |  |  |         var input = queryView(view, "input") | 
					
						
							|  |  |  |         expect(input.value).toEqual("loginValue"); | 
					
						
							|  |  |  |         done(); | 
					
						
							|  |  |  |       }); | 
					
						
							|  |  |  |     }); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     it("should update the control group values on DOM change", (done) => { | 
					
						
							|  |  |  |       var form = new ControlGroup({ | 
					
						
							|  |  |  |         "login": new Control("oldValue") | 
					
						
							|  |  |  |       }); | 
					
						
							|  |  |  |       var ctx = new MyComp(form); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |       var t = `<div [control-group]="form">
 | 
					
						
							| 
									
										
										
										
											2015-02-23 15:26:53 -08:00
										 |  |  |                 <input type="text" control="login"> | 
					
						
							| 
									
										
										
										
											2015-02-03 07:27:09 -08:00
										 |  |  |               </div>`; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |       compile(MyComp, t, ctx, (view) => { | 
					
						
							|  |  |  |         var input = queryView(view, "input") | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         input.value = "updatedValue"; | 
					
						
							|  |  |  |         dispatchEvent(input, "change"); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         expect(form.value).toEqual({"login": "updatedValue"}); | 
					
						
							|  |  |  |         done(); | 
					
						
							|  |  |  |       }); | 
					
						
							|  |  |  |     }); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     it("should update DOM elements when rebinding the control group", (done) => { | 
					
						
							|  |  |  |       var form = new ControlGroup({ | 
					
						
							|  |  |  |         "login": new Control("oldValue") | 
					
						
							|  |  |  |       }); | 
					
						
							|  |  |  |       var ctx = new MyComp(form); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |       var t = `<div [control-group]="form">
 | 
					
						
							| 
									
										
										
										
											2015-02-23 15:26:53 -08:00
										 |  |  |                 <input type="text" control="login"> | 
					
						
							| 
									
										
										
										
											2015-02-03 07:27:09 -08:00
										 |  |  |               </div>`; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |       compile(MyComp, t, ctx, (view) => { | 
					
						
							|  |  |  |         ctx.form = new ControlGroup({ | 
					
						
							|  |  |  |           "login": new Control("newValue") | 
					
						
							|  |  |  |         }); | 
					
						
							|  |  |  |         detectChanges(view); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         var input = queryView(view, "input") | 
					
						
							|  |  |  |         expect(input.value).toEqual("newValue"); | 
					
						
							|  |  |  |         done(); | 
					
						
							|  |  |  |       }); | 
					
						
							|  |  |  |     }); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     it("should update DOM element when rebinding the control name", (done) => { | 
					
						
							|  |  |  |       var ctx = new MyComp(new ControlGroup({ | 
					
						
							|  |  |  |         "one": new Control("one"), | 
					
						
							|  |  |  |         "two": new Control("two") | 
					
						
							|  |  |  |       }), "one"); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |       var t = `<div [control-group]="form">
 | 
					
						
							| 
									
										
										
										
											2015-02-23 15:26:53 -08:00
										 |  |  |                 <input type="text" [control]="name"> | 
					
						
							| 
									
										
										
										
											2015-02-03 07:27:09 -08:00
										 |  |  |               </div>`; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |       compile(MyComp, t, ctx, (view) => { | 
					
						
							|  |  |  |         var input = queryView(view, "input") | 
					
						
							|  |  |  |         expect(input.value).toEqual("one"); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         ctx.name = "two"; | 
					
						
							|  |  |  |         detectChanges(view); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         expect(input.value).toEqual("two"); | 
					
						
							|  |  |  |         done(); | 
					
						
							|  |  |  |       }); | 
					
						
							|  |  |  |     }); | 
					
						
							| 
									
										
										
										
											2015-02-04 11:45:33 -08:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2015-02-07 14:14:07 -08:00
										 |  |  |     describe("different control types", () => { | 
					
						
							|  |  |  |       it("should support type=checkbox", (done) => { | 
					
						
							|  |  |  |         var ctx = new MyComp(new ControlGroup({"checkbox": new Control(true)})); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         var t = `<div [control-group]="form">
 | 
					
						
							| 
									
										
										
										
											2015-02-23 15:26:53 -08:00
										 |  |  |                   <input type="checkbox" control="checkbox"> | 
					
						
							| 
									
										
										
										
											2015-02-07 14:14:07 -08:00
										 |  |  |                 </div>`; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         compile(MyComp, t, ctx, (view) => { | 
					
						
							|  |  |  |           var input = queryView(view, "input") | 
					
						
							|  |  |  |           expect(input.checked).toBe(true); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |           input.checked = false; | 
					
						
							|  |  |  |           dispatchEvent(input, "change"); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |           expect(ctx.form.value).toEqual({"checkbox" : false}); | 
					
						
							|  |  |  |           done(); | 
					
						
							|  |  |  |         }); | 
					
						
							|  |  |  |       }); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |       it("should support custom value accessors", (done) => { | 
					
						
							|  |  |  |         var ctx = new MyComp(new ControlGroup({"name": new Control("aa")})); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         var t = `<div [control-group]="form">
 | 
					
						
							| 
									
										
										
										
											2015-02-23 15:26:53 -08:00
										 |  |  |                   <input type="text" control="name" wrapped-value> | 
					
						
							| 
									
										
										
										
											2015-02-07 14:14:07 -08:00
										 |  |  |                 </div>`; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         compile(MyComp, t, ctx, (view) => { | 
					
						
							|  |  |  |           var input = queryView(view, "input") | 
					
						
							|  |  |  |           expect(input.value).toEqual("!aa!"); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |           input.value = "!bb!"; | 
					
						
							|  |  |  |           dispatchEvent(input, "change"); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |           expect(ctx.form.value).toEqual({"name" : "bb"}); | 
					
						
							|  |  |  |           done(); | 
					
						
							|  |  |  |         }); | 
					
						
							|  |  |  |       }); | 
					
						
							|  |  |  |     }); | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2015-02-23 15:26:53 -08:00
										 |  |  |     describe("validations", () => { | 
					
						
							|  |  |  |       it("should use validators defined in html",(done) => { | 
					
						
							|  |  |  |         var form = new ControlGroup({"login": new Control("aa")}); | 
					
						
							|  |  |  |         var ctx = new MyComp(form); | 
					
						
							| 
									
										
										
										
											2015-02-04 11:45:33 -08:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2015-02-23 15:26:53 -08:00
										 |  |  |         var t = `<div [control-group]="form">
 | 
					
						
							|  |  |  |                   <input type="text" control="login" required> | 
					
						
							|  |  |  |                  </div>`; | 
					
						
							| 
									
										
										
										
											2015-02-04 11:45:33 -08:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2015-02-23 15:26:53 -08:00
										 |  |  |         compile(MyComp, t, ctx, (view) => { | 
					
						
							|  |  |  |           expect(form.valid).toEqual(true); | 
					
						
							| 
									
										
										
										
											2015-02-04 11:45:33 -08:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2015-02-23 15:26:53 -08:00
										 |  |  |           var input = queryView(view, "input"); | 
					
						
							| 
									
										
										
										
											2015-02-04 11:45:33 -08:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2015-02-23 15:26:53 -08:00
										 |  |  |           input.value = ""; | 
					
						
							| 
									
										
										
										
											2015-02-04 11:45:33 -08:00
										 |  |  |           dispatchEvent(input, "change"); | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2015-02-23 15:26:53 -08:00
										 |  |  |           expect(form.valid).toEqual(false); | 
					
						
							| 
									
										
										
										
											2015-02-04 11:45:33 -08:00
										 |  |  |           done(); | 
					
						
							|  |  |  |         }); | 
					
						
							|  |  |  |       }); | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2015-02-23 15:26:53 -08:00
										 |  |  |       it("should use validators defined in the model",(done) => { | 
					
						
							|  |  |  |         var form = new ControlGroup({"login": new Control("aa", validators.required)}); | 
					
						
							|  |  |  |         var ctx = new MyComp(form); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         var t = `<div [control-group]="form">
 | 
					
						
							|  |  |  |                   <input type="text" control="login"> | 
					
						
							|  |  |  |                  </div>`; | 
					
						
							| 
									
										
										
										
											2015-02-11 11:10:31 -08:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2015-02-23 15:26:53 -08:00
										 |  |  |         compile(MyComp, t, ctx, (view) => { | 
					
						
							| 
									
										
										
										
											2015-02-11 11:10:31 -08:00
										 |  |  |           expect(form.valid).toEqual(true); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |           var input = queryView(view, "input"); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |           input.value = ""; | 
					
						
							|  |  |  |           dispatchEvent(input, "change"); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |           expect(form.valid).toEqual(false); | 
					
						
							|  |  |  |           done(); | 
					
						
							|  |  |  |         }); | 
					
						
							|  |  |  |       }); | 
					
						
							| 
									
										
										
										
											2015-02-04 11:45:33 -08:00
										 |  |  |     }); | 
					
						
							| 
									
										
										
										
											2015-03-03 11:32:19 +01:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2015-02-25 15:10:27 -08:00
										 |  |  |     describe("nested forms", () => { | 
					
						
							|  |  |  |       it("should init DOM with the given form object", (done) => { | 
					
						
							|  |  |  |         var form = new ControlGroup({ | 
					
						
							|  |  |  |           "nested": new ControlGroup({ | 
					
						
							|  |  |  |             "login": new Control("value") | 
					
						
							|  |  |  |           }) | 
					
						
							|  |  |  |         }); | 
					
						
							|  |  |  |         var ctx = new MyComp(form); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         var t = `<div [control-group]="form">
 | 
					
						
							|  |  |  |                     <div control-group="nested"> | 
					
						
							|  |  |  |                       <input type="text" control="login"> | 
					
						
							|  |  |  |                     </div> | 
					
						
							|  |  |  |                 </div>`; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         compile(MyComp, t, ctx, (view) => { | 
					
						
							|  |  |  |           var input = queryView(view, "input") | 
					
						
							|  |  |  |           expect(input.value).toEqual("value"); | 
					
						
							|  |  |  |           done(); | 
					
						
							|  |  |  |         }); | 
					
						
							|  |  |  |       }); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |       it("should update the control group values on DOM change", (done) => { | 
					
						
							|  |  |  |         var form = new ControlGroup({ | 
					
						
							|  |  |  |           "nested": new ControlGroup({ | 
					
						
							|  |  |  |             "login": new Control("value") | 
					
						
							|  |  |  |           }) | 
					
						
							|  |  |  |         }); | 
					
						
							|  |  |  |         var ctx = new MyComp(form); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         var t = `<div [control-group]="form">
 | 
					
						
							|  |  |  |                     <div control-group="nested"> | 
					
						
							|  |  |  |                       <input type="text" control="login"> | 
					
						
							|  |  |  |                     </div> | 
					
						
							|  |  |  |                 </div>`; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         compile(MyComp, t, ctx, (view) => { | 
					
						
							|  |  |  |           var input = queryView(view, "input") | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |           input.value = "updatedValue"; | 
					
						
							|  |  |  |           dispatchEvent(input, "change"); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |           expect(form.value).toEqual({"nested" : {"login" : "updatedValue"}}); | 
					
						
							|  |  |  |           done(); | 
					
						
							|  |  |  |         }); | 
					
						
							|  |  |  |       }); | 
					
						
							|  |  |  |     }); | 
					
						
							| 
									
										
										
										
											2015-02-03 07:27:09 -08:00
										 |  |  |   }); | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2015-02-11 11:10:31 -08:00
										 |  |  | @Component({ | 
					
						
							|  |  |  |   selector: "my-comp" | 
					
						
							|  |  |  | }) | 
					
						
							| 
									
										
										
										
											2015-02-03 07:27:09 -08:00
										 |  |  | class MyComp { | 
					
						
							|  |  |  |   form:ControlGroup; | 
					
						
							|  |  |  |   name:string; | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2015-02-04 11:45:33 -08:00
										 |  |  |   constructor(form = null, name = null) { | 
					
						
							| 
									
										
										
										
											2015-02-03 07:27:09 -08:00
										 |  |  |     this.form = form; | 
					
						
							|  |  |  |     this.name = name; | 
					
						
							|  |  |  |   } | 
					
						
							| 
									
										
										
										
											2015-01-30 09:43:21 +01:00
										 |  |  | } | 
					
						
							| 
									
										
										
										
											2015-02-07 14:14:07 -08:00
										 |  |  | 
 | 
					
						
							|  |  |  | class WrappedValueAccessor extends ControlValueAccessor { | 
					
						
							|  |  |  |   readValue(el){ | 
					
						
							|  |  |  |     return el.value.substring(1, el.value.length - 1); | 
					
						
							|  |  |  |   } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |   writeValue(el, value):void { | 
					
						
							|  |  |  |     el.value = `!${value}!`; | 
					
						
							|  |  |  |   } | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | @Decorator({ | 
					
						
							|  |  |  |   selector:'[wrapped-value]' | 
					
						
							|  |  |  | }) | 
					
						
							|  |  |  | class WrappedValue { | 
					
						
							| 
									
										
										
										
											2015-02-23 15:26:53 -08:00
										 |  |  |   constructor(cd:ControlDirective) { | 
					
						
							| 
									
										
										
										
											2015-02-07 14:14:07 -08:00
										 |  |  |     cd.valueAccessor = new WrappedValueAccessor(); | 
					
						
							|  |  |  |   } | 
					
						
							| 
									
										
										
										
											2015-02-12 14:44:59 +01:00
										 |  |  | } |