1 | import './setup';
|
2 | import { metadata } from 'aurelia-metadata';
|
3 | import { bindingMode } from 'aurelia-binding';
|
4 | import { customAttribute, customElement, resource, view } from '../src/decorators';
|
5 |
|
6 | describe('@customAttribute', () => {
|
7 | it('should leave resource attributeDefaultBindingMode as undefined when unspecified', () => {
|
8 | var target = {};
|
9 |
|
10 | var decorator = customAttribute('test');
|
11 | decorator(target);
|
12 |
|
13 | var resource = metadata.get(metadata.resource, target);
|
14 | expect(resource.attributeName).toBe('test');
|
15 | expect(resource.attributeDefaultBindingMode).toBeUndefined();
|
16 | });
|
17 |
|
18 | it('should set resource attributeDefaultBindingMode when specified', () => {
|
19 | var target = {};
|
20 |
|
21 | var decorator = customAttribute('test', bindingMode.twoWay);
|
22 | decorator(target);
|
23 |
|
24 | var resource = metadata.get(metadata.resource, target);
|
25 | expect(resource.attributeName).toBe('test');
|
26 | expect(resource.attributeDefaultBindingMode).toBe(bindingMode.twoWay);
|
27 | });
|
28 |
|
29 | it('should validate behavior names', () => {
|
30 | expect(getBehaviorMetadata(customAttribute('fooBar')).attributeName).toBe('foo-bar');
|
31 | expect(getBehaviorMetadata(customElement('fooBar')).elementName).toBe('foo-bar');
|
32 | expect(getBehaviorMetadata(customAttribute('foo')).attributeName).toBe('foo');
|
33 | expect(getBehaviorMetadata(customAttribute('foo-bar')).attributeName).toBe('foo-bar');
|
34 | });
|
35 | });
|
36 |
|
37 | describe('@resources', () => {
|
38 | it('should config when using a string', () => {
|
39 | @resource('el')
|
40 | class El {}
|
41 | expect(El.$resource).toBe('el');
|
42 | });
|
43 |
|
44 | it('should config using a plain object', () => {
|
45 | let config = {};
|
46 | @resource(config)
|
47 | class El {}
|
48 | expect(El.$resource).toBe(config);
|
49 | });
|
50 |
|
51 | it('should define metadata using something else', () => {
|
52 | let behaviorResource = new class FakeResource{}();
|
53 | @resource(behaviorResource)
|
54 | class El {}
|
55 | expect(El.$resource).toBe(undefined);
|
56 | expect(metadata.getOwn(metadata.resource, El)).toBe(behaviorResource);
|
57 | });
|
58 | });
|
59 |
|
60 | describe('view strategy decorators', () => {
|
61 | let baseTemplate = '<template></template>';
|
62 | describe('@view', () => {
|
63 | it('should creates static view field on target', () => {
|
64 | @view(baseTemplate)
|
65 | class El {}
|
66 |
|
67 | expect(El.$view).toBe(baseTemplate);
|
68 |
|
69 | class El2 {}
|
70 | let config = {template: baseTemplate};
|
71 | view(config)(El2);
|
72 | expect(El2.$view).toBe(config);
|
73 | });
|
74 | })
|
75 | });
|
76 |
|
77 | function getBehaviorMetadata (decorator) {
|
78 | let target = {};
|
79 | decorator(target);
|
80 | return metadata.get(metadata.resource, target);
|
81 | }
|