UNPKG

2.55 kBJavaScriptView Raw
1import './setup';
2import { metadata } from 'aurelia-metadata';
3import { bindingMode } from 'aurelia-binding';
4import { customAttribute, customElement, resource, view } from '../src/decorators';
5
6describe('@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
37describe('@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
60describe('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
77function getBehaviorMetadata (decorator) {
78 let target = {};
79 decorator(target);
80 return metadata.get(metadata.resource, target);
81}