vsn 0.1.23 → 0.1.27

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (172) hide show
  1. package/demo/demo.html +16 -7
  2. package/demo/vsn.js +1 -0
  3. package/dist/AST.d.ts +2 -1
  4. package/dist/AST.js +94 -4
  5. package/dist/AST.js.map +1 -1
  6. package/dist/Attribute.d.ts +1 -1
  7. package/dist/Attribute.js +3 -3
  8. package/dist/Attribute.js.map +1 -1
  9. package/dist/Configuration.d.ts +1 -1
  10. package/dist/Configuration.js +4 -4
  11. package/dist/Configuration.js.map +1 -1
  12. package/dist/Controller.d.ts +10 -5
  13. package/dist/Controller.js +21 -6
  14. package/dist/Controller.js.map +1 -1
  15. package/dist/DOM/DOMObject.d.ts +1 -1
  16. package/dist/DOM/DOMObject.js +2 -2
  17. package/dist/DOM/DOMObject.js.map +1 -1
  18. package/dist/DOM.d.ts +1 -1
  19. package/dist/DOM.js +4 -4
  20. package/dist/DOM.js.map +1 -1
  21. package/dist/EventDispatcher.d.ts +26 -0
  22. package/dist/EventDispatcher.js +117 -0
  23. package/dist/EventDispatcher.js.map +1 -0
  24. package/dist/Formats.js +2 -2
  25. package/dist/Formats.js.map +1 -1
  26. package/dist/MessageList.d.ts +14 -0
  27. package/dist/MessageList.js +88 -0
  28. package/dist/MessageList.js.map +1 -0
  29. package/dist/Model/Collection.d.ts +5 -0
  30. package/dist/Model/Collection.js +37 -0
  31. package/dist/Model/Collection.js.map +1 -0
  32. package/dist/Model/DataModel.d.ts +6 -0
  33. package/dist/Model/DataModel.js +54 -0
  34. package/dist/Model/DataModel.js.map +1 -0
  35. package/dist/Model/ModelAbstract.d.ts +20 -0
  36. package/dist/Model/ModelAbstract.js +122 -0
  37. package/dist/Model/ModelAbstract.js.map +1 -0
  38. package/dist/Model/fields/BooleanField.d.ts +5 -0
  39. package/dist/Model/fields/BooleanField.js +43 -0
  40. package/dist/Model/fields/BooleanField.js.map +1 -0
  41. package/dist/Model/fields/EmailField.d.ts +5 -0
  42. package/dist/Model/fields/EmailField.js +36 -0
  43. package/dist/Model/fields/EmailField.js.map +1 -0
  44. package/dist/Model/fields/Field.d.ts +13 -0
  45. package/dist/Model/fields/Field.js +79 -0
  46. package/dist/Model/fields/Field.js.map +1 -0
  47. package/dist/Model/fields/FloatField.d.ts +5 -0
  48. package/dist/Model/fields/FloatField.js +47 -0
  49. package/dist/Model/fields/FloatField.js.map +1 -0
  50. package/dist/Model/fields/PositiveNumberField.d.ts +5 -0
  51. package/dist/Model/fields/PositiveNumberField.js +51 -0
  52. package/dist/Model/fields/PositiveNumberField.js.map +1 -0
  53. package/dist/Model/fields/StringField.d.ts +5 -0
  54. package/dist/Model/fields/StringField.js +43 -0
  55. package/dist/Model/fields/StringField.js.map +1 -0
  56. package/dist/Model.d.ts +11 -0
  57. package/dist/Model.js +72 -0
  58. package/dist/Model.js.map +1 -0
  59. package/dist/Registry.d.ts +2 -2
  60. package/dist/Registry.js +6 -16
  61. package/dist/Registry.js.map +1 -1
  62. package/dist/Scope.d.ts +7 -10
  63. package/dist/Scope.js +40 -90
  64. package/dist/Scope.js.map +1 -1
  65. package/dist/SimplePromise.d.ts +42 -0
  66. package/dist/SimplePromise.js +217 -0
  67. package/dist/SimplePromise.js.map +1 -0
  68. package/dist/Tag.js +12 -6
  69. package/dist/Tag.js.map +1 -1
  70. package/dist/attributes/Bind.js +1 -1
  71. package/dist/attributes/Bind.js.map +1 -1
  72. package/dist/attributes/ClickRemoveClass.js +17 -5
  73. package/dist/attributes/ClickRemoveClass.js.map +1 -1
  74. package/dist/attributes/ClickToggleClass.js +17 -5
  75. package/dist/attributes/ClickToggleClass.js.map +1 -1
  76. package/dist/attributes/Exec.js +6 -0
  77. package/dist/attributes/Exec.js.map +1 -1
  78. package/dist/attributes/Format.js +3 -0
  79. package/dist/attributes/Format.js.map +1 -1
  80. package/dist/attributes/If.js +12 -0
  81. package/dist/attributes/If.js.map +1 -1
  82. package/dist/attributes/JSONAttribute.js +3 -0
  83. package/dist/attributes/JSONAttribute.js.map +1 -1
  84. package/dist/attributes/KeyAbstract.js +11 -4
  85. package/dist/attributes/KeyAbstract.js.map +1 -1
  86. package/dist/attributes/KeyDown.js +8 -2
  87. package/dist/attributes/KeyDown.js.map +1 -1
  88. package/dist/attributes/KeyUp.js +8 -2
  89. package/dist/attributes/KeyUp.js.map +1 -1
  90. package/dist/attributes/List.js +14 -5
  91. package/dist/attributes/List.js.map +1 -1
  92. package/dist/attributes/ListItem.js +3 -0
  93. package/dist/attributes/ListItem.js.map +1 -1
  94. package/dist/attributes/On.js +15 -3
  95. package/dist/attributes/On.js.map +1 -1
  96. package/dist/attributes/Radio.d.ts +2 -0
  97. package/dist/attributes/Radio.js +52 -5
  98. package/dist/attributes/Radio.js.map +1 -1
  99. package/dist/attributes/RootAttribute.js +8 -2
  100. package/dist/attributes/RootAttribute.js.map +1 -1
  101. package/dist/attributes/ScopeChange.js +7 -1
  102. package/dist/attributes/ScopeChange.js.map +1 -1
  103. package/dist/attributes/SetAttribute.js +3 -0
  104. package/dist/attributes/SetAttribute.js.map +1 -1
  105. package/dist/attributes/StandardAttribute.js +25 -7
  106. package/dist/attributes/StandardAttribute.js.map +1 -1
  107. package/dist/attributes/StyleAttribute.js +1 -1
  108. package/dist/attributes/StyleAttribute.js.map +1 -1
  109. package/dist/attributes/TypeAttribute.js +3 -0
  110. package/dist/attributes/TypeAttribute.js.map +1 -1
  111. package/dist/{Vision.d.ts → vsn.d.ts} +3 -1
  112. package/dist/{Vision.js → vsn.js} +10 -6
  113. package/dist/vsn.js.map +1 -0
  114. package/package.json +9 -13
  115. package/src/AST.ts +96 -5
  116. package/src/Attribute.ts +2 -2
  117. package/src/Configuration.ts +3 -3
  118. package/src/Controller.ts +16 -7
  119. package/src/DOM/DOMObject.ts +1 -1
  120. package/src/DOM.ts +4 -4
  121. package/src/EventDispatcher.ts +117 -0
  122. package/src/Formats.ts +2 -2
  123. package/src/MessageList.ts +81 -0
  124. package/src/Model/Collection.ts +13 -0
  125. package/src/Model/DataModel.ts +29 -0
  126. package/src/Model/ModelAbstract.ts +114 -0
  127. package/src/Model/fields/BooleanField.ts +16 -0
  128. package/src/Model/fields/EmailField.ts +12 -0
  129. package/src/Model/fields/Field.ts +65 -0
  130. package/src/Model/fields/FloatField.ts +22 -0
  131. package/src/Model/fields/PositiveNumberField.ts +24 -0
  132. package/src/Model/fields/StringField.ts +16 -0
  133. package/src/Model.ts +57 -0
  134. package/src/Registry.ts +3 -5
  135. package/src/Scope.ts +39 -90
  136. package/src/SimplePromise.ts +219 -0
  137. package/src/Tag.ts +12 -9
  138. package/src/attributes/Bind.ts +1 -1
  139. package/src/attributes/ClickRemoveClass.ts +2 -0
  140. package/src/attributes/ClickToggleClass.ts +2 -0
  141. package/src/attributes/Exec.ts +2 -0
  142. package/src/attributes/Format.ts +1 -0
  143. package/src/attributes/If.ts +4 -0
  144. package/src/attributes/JSONAttribute.ts +1 -0
  145. package/src/attributes/KeyAbstract.ts +2 -1
  146. package/src/attributes/KeyDown.ts +1 -0
  147. package/src/attributes/KeyUp.ts +1 -0
  148. package/src/attributes/List.ts +6 -3
  149. package/src/attributes/ListItem.ts +1 -0
  150. package/src/attributes/On.ts +4 -0
  151. package/src/attributes/Radio.ts +18 -3
  152. package/src/attributes/RootAttribute.ts +1 -0
  153. package/src/attributes/ScopeChange.ts +3 -1
  154. package/src/attributes/SetAttribute.ts +1 -0
  155. package/src/attributes/StandardAttribute.ts +4 -1
  156. package/src/attributes/StyleAttribute.ts +1 -1
  157. package/src/attributes/TypeAttribute.ts +1 -0
  158. package/src/{Vision.ts → vsn.ts} +4 -2
  159. package/test/AST.spec.ts +2 -1
  160. package/test/DOM.spec.ts +1 -1
  161. package/test/MessageList.spec.ts +101 -0
  162. package/test/Model/DataModel.spec.ts +141 -0
  163. package/test/Model.spec.ts +306 -0
  164. package/test/Scope.spec.ts +2 -2
  165. package/test/SimplePromise.spec.ts +271 -0
  166. package/test/attributes/Bind.spec.ts +5 -5
  167. package/test/attributes/JSONAttribute.spec.ts +1 -1
  168. package/test/attributes/ListItem.spec.ts +1 -1
  169. package/webpack.config.js +2 -2
  170. package/demo/vision.js +0 -1
  171. package/dist/Vision.js.map +0 -1
  172. package/main.py +0 -16
@@ -9,7 +9,7 @@ export class Radio extends Attribute {
9
9
  protected key?: string;
10
10
  protected boundScope?: Scope;
11
11
 
12
- public async extract() {
12
+ public async setup() {
13
13
  let scopeKey: string = this.getAttributeValue() || this.tag.getRawAttributeValue('name');
14
14
  let ref: ScopeReference;
15
15
  try {
@@ -21,11 +21,25 @@ export class Radio extends Attribute {
21
21
 
22
22
  this.key = await ref.getKey();
23
23
  this.boundScope = await ref.getScope();
24
+ await super.setup();
25
+ }
26
+
27
+ public async extract() {
28
+ if (this.tag.checked)
29
+ await this.handleEvent(null);
30
+ await super.extract();
24
31
  }
25
32
 
26
33
  public async connect() {
27
- this.boundScope.bind(`change:${this.key}`, this.checkSelected, this);
34
+ this.boundScope.on(`change:${this.key}`, this.checkSelected, this);
28
35
  this.tag.addEventHandler('change', this.getAttributeModifiers(), this.handleEvent.bind(this));
36
+ await this.checkSelected();
37
+ await super.connect();
38
+ }
39
+
40
+ public async evaluate() {
41
+ await this.checkSelected();
42
+ await super.evaluate();
29
43
  }
30
44
 
31
45
  async handleEvent(e) {
@@ -33,6 +47,7 @@ export class Radio extends Attribute {
33
47
  }
34
48
 
35
49
  async checkSelected() {
36
- this.tag.checked = this.boundScope.get(this.key) === this.tag.value;
50
+ const scopeValue = this.boundScope.get(this.key);
51
+ this.tag.checked = `${scopeValue}` === this.tag.value;
37
52
  }
38
53
  }
@@ -9,5 +9,6 @@ export class RootAttribute extends Attribute {
9
9
 
10
10
  public async setup() {
11
11
  this.tag.scope.set('$mobile', VisionHelper.isMobile());
12
+ await super.setup();
12
13
  }
13
14
  }
@@ -12,12 +12,14 @@ export abstract class ScopeChange extends Attribute {
12
12
  const code: string = this.getAttributeValue();
13
13
  this.handler = new Tree(code);
14
14
  await this.handler.prepare(this.tag.scope, this.tag.dom, this.tag);
15
+ await super.compile();
15
16
  }
16
17
 
17
18
  public async connect() {
18
19
  const binding = this.getAttributeBinding();
19
20
  const ref: ScopeReference = this.tag.scope.getReference(binding, false);
20
- (await ref.getScope()).bind(`change:${await ref.getKey()}`, this.handleEvent.bind(this));
21
+ (await ref.getScope()).on(`change:${await ref.getKey()}`, this.handleEvent.bind(this));
22
+ await super.connect();
21
23
  }
22
24
 
23
25
  async handleEvent(e) {
@@ -30,6 +30,7 @@ export class SetAttribute extends Attribute {
30
30
  }
31
31
  this.key = await ref.getKey();
32
32
  this.boundScope = await ref.getScope();
33
+ await super.setup();
33
34
  }
34
35
 
35
36
  public async extract() {
@@ -13,14 +13,17 @@ export class StandardAttribute extends Attribute {
13
13
  if (StandardAttribute.magicAttributes.indexOf(this.key) === -1 && !this.tag.element.hasAttribute(this.attributeName)) {
14
14
  this.tag.element.setAttribute(this.attributeName, '');
15
15
  }
16
+ await super.setup();
16
17
  }
17
18
 
18
19
  public async extract() {
19
20
  this.updateFrom();
21
+ await super.extract();
20
22
  }
21
23
 
22
24
  public async connect() {
23
- this.tag.scope.bind(`change:${this.key}`, this.updateTo.bind(this));
25
+ this.tag.scope.on(`change:${this.key}`, this.updateTo.bind(this));
26
+ await super.connect();
24
27
  }
25
28
 
26
29
  public mutate(mutation: MutationRecord) {
@@ -28,7 +28,7 @@ export class StyleAttribute extends Attribute {
28
28
  }
29
29
 
30
30
  public async connect() {
31
- this.styleScope.bind(`change`, this.handleEvent.bind(this));
31
+ this.styleScope.on(`change`, this.handleEvent.bind(this));
32
32
  await super.connect();
33
33
  }
34
34
 
@@ -18,5 +18,6 @@ export class TypeAttribute extends Attribute {
18
18
  }
19
19
 
20
20
  (await ref.getScope()).setType(await ref.getKey(), type);
21
+ await super.extract();
21
22
  }
22
23
  }
@@ -1,7 +1,5 @@
1
1
  import {DOM} from "./DOM";
2
- import {EventDispatcher} from "simple-ts-event-dispatcher";
3
2
  import {WrappedArray} from "./Scope";
4
- import {DataModel} from "simple-ts-models";
5
3
  import {Registry} from "./Registry";
6
4
  import "./Types";
7
5
  import "./Formats";
@@ -9,6 +7,8 @@ import {Configuration} from "./Configuration";
9
7
  import {VisionHelper} from "./helpers/VisionHelper";
10
8
  import {Tree} from "./AST";
11
9
  import {Query} from "./Query";
10
+ import {EventDispatcher} from "./EventDispatcher";
11
+ import {DataModel} from "./Model/DataModel";
12
12
 
13
13
  export class Vision extends EventDispatcher {
14
14
  protected static _instance: Vision;
@@ -73,4 +73,6 @@ export * from './Attribute';
73
73
  export * from './AST';
74
74
  export {DOM} from './DOM';
75
75
  export {WrappedArray, Scope, ScopeReference} from './Scope';
76
+ export {Controller} from './Controller';
77
+ export {Tag} from './Tag';
76
78
  export const vision: Vision = Vision.instance;
package/test/AST.spec.ts CHANGED
@@ -1,7 +1,8 @@
1
- import {Promise as SimplePromise, IDeferred} from 'simple-ts-promise';
1
+
2
2
  import {Scope, WrappedArray} from "../src/Scope";
3
3
  import {Tree} from "../src/AST";
4
4
  import {DOM} from "../src/DOM";
5
+ import {IDeferred, SimplePromise} from "../src/SimplePromise";
5
6
 
6
7
  describe('Tree', () => {
7
8
  let scope: Scope = null,
package/test/DOM.spec.ts CHANGED
@@ -1,4 +1,4 @@
1
- import "../src/Vision";
1
+ import "../src/vsn";
2
2
  import {DOM} from "../src/DOM";
3
3
  import {Registry} from "../src/Registry";
4
4
 
@@ -0,0 +1,101 @@
1
+ import MessageList from "../src/MessageList";
2
+
3
+ describe('MessageList', () => {
4
+ it("should reset properly", () => {
5
+ const list = new MessageList();
6
+ list.merge({
7
+ 'foo': ['bar', 'baz']
8
+ });
9
+ console.info(list.keys);
10
+ expect(list.length).toBe(1);
11
+ expect(list['foo']).toEqual(['bar', 'baz']);
12
+
13
+ list.reset();
14
+
15
+ expect(list.length).toBe(0);
16
+ expect(list['foo']).toEqual(undefined);
17
+ });
18
+
19
+ it("should add messages", () => {
20
+ const list = new MessageList({
21
+ 'foo': ['bar', 'baz']
22
+ });
23
+
24
+ // Add list
25
+ list.add('foo', ['biz', 'blarg']);
26
+ expect(list['foo']).toEqual(['bar', 'baz', 'biz', 'blarg']);
27
+
28
+ // Add single error and replace
29
+ list.add('foo', 'replaced', true);
30
+ expect(list['foo']).toEqual(['replaced']);
31
+ });
32
+
33
+ it("should merge messages", () => {
34
+ const list = new MessageList();
35
+ list.merge({
36
+ 'foo': ['bar', 'baz'],
37
+ 'test': ['test 1', 'test 2']
38
+ });
39
+
40
+ list.merge({
41
+ 'foo': ['merged 1', 'merged 2'],
42
+ 'test': ['test 3', 'test 4'],
43
+ 'new': ['new 1', 'new 2']
44
+ });
45
+
46
+ expect(list['foo']).toEqual(['bar', 'baz', 'merged 1', 'merged 2']);
47
+ expect(list['test']).toEqual(['test 1', 'test 2', 'test 3', 'test 4']);
48
+ expect(list['new']).toEqual(['new 1', 'new 2']);
49
+ });
50
+
51
+ it("should replace messages", () => {
52
+ const list = new MessageList();
53
+ list.merge({
54
+ 'foo': ['bar', 'baz'],
55
+ 'test': ['test 1', 'test 2']
56
+ });
57
+
58
+ list.merge({
59
+ 'foo': ['merged 1', 'merged 2'],
60
+ 'test': ['test 3', 'test 4'],
61
+ 'new': ['new 1', 'new 2']
62
+ }, true);
63
+
64
+ expect(list['foo']).toEqual(['merged 1', 'merged 2']);
65
+ expect(list['test']).toEqual(['test 3', 'test 4']);
66
+ expect(list['new']).toEqual(['new 1', 'new 2']);
67
+ });
68
+
69
+ it("should return a list", () => {
70
+ const list = new MessageList(),
71
+ items = {
72
+ 'foo': ['bar', 'baz'],
73
+ 'test': ['test 1', 'test 2']
74
+ };
75
+ list.merge(items);
76
+ expect(list.list).toEqual(items);
77
+ });
78
+
79
+ it("should ignore empty additions", () => {
80
+ const list = new MessageList();
81
+ list.merge({});
82
+ list.merge(null);
83
+ expect(list.length).toEqual(0);
84
+
85
+ list.merge({
86
+ 'empty': [],
87
+ 'null': null
88
+ });
89
+ expect(list.length).toEqual(0);
90
+ });
91
+
92
+ it("should cache list getter result", () => {
93
+ const messageList = new MessageList({
94
+ 'foo': ['bar', 'baz']
95
+ }),
96
+ list = messageList.list;
97
+ expect(list).toBe(messageList.list);
98
+ messageList.add('bar', 'baz');
99
+ expect(list).not.toBe(messageList.list);
100
+ });
101
+ });
@@ -0,0 +1,141 @@
1
+ import {DataModel} from "../../src/Model/DataModel";
2
+
3
+
4
+ describe('Model', () => {
5
+ it("Should trigger a change event when any field is changed", () => {
6
+ const m = new DataModel(['foo']);
7
+ let value = null,
8
+ field = null;
9
+
10
+ m.on('change', (_field, values) => {
11
+ field = _field;
12
+ value = values.value;
13
+ });
14
+
15
+ m.foo = 'testing';
16
+
17
+ expect<string | null>(field).toBe('foo');
18
+ expect(value).toBe(m.foo);
19
+ });
20
+
21
+ it("Should create the given fields from an object", () => {
22
+ const m = new DataModel({
23
+ field_1: 1,
24
+ field_2: 'yes',
25
+ field_3: true
26
+ });
27
+ expect(m.getFields().length).toBe(3);
28
+
29
+ m.setData({field_4: 4, field_5: 5});
30
+ expect(m.getFields().length).toBe(5);
31
+ const data = m.getData();
32
+ expect(data['field_1']).toBe(1);
33
+ expect(data['field_2']).toBe('yes');
34
+ expect(data['field_3']).toBe(true);
35
+ expect(data['field_4']).toBe(4);
36
+ expect(data['field_5']).toBe(5);
37
+ });
38
+
39
+ it("Should create the given fields from an array", () => {
40
+ const m = new DataModel([
41
+ 'field_1',
42
+ 'field_2',
43
+ 'field_3'
44
+ ]);
45
+ expect(m.getFields().length).toBe(3);
46
+ });
47
+
48
+ it("Should trigger a change event when a field is changed", () => {
49
+ const m = new DataModel({
50
+ field_1: 1,
51
+ field_2: 'yes',
52
+ field_3: true
53
+ });
54
+
55
+ let oldValue = null,
56
+ oldValueCheck = null,
57
+ value = null;
58
+
59
+ m.bindToFields('change', [
60
+ 'field_2',
61
+ 'field_1'
62
+ ], (values) => {
63
+ oldValue = values.oldValue;
64
+ value = values.value;
65
+ });
66
+
67
+ // Test to make sure field_1 change event is being called
68
+ oldValueCheck = m.field_1;
69
+ m.field_1 = 2;
70
+ expect(value).toBe(m.field_1);
71
+ expect(oldValue).toBe(oldValueCheck);
72
+
73
+ // Test to make sure field_2 change event is being called
74
+ oldValueCheck = m.field_2;
75
+ m.field_2 = 'no';
76
+ expect(value).toBe(m.field_2);
77
+ expect(oldValue).toBe(oldValueCheck);
78
+
79
+ // Test to make sure fields that aren't being listened to aren't
80
+ // triggering the event
81
+ oldValueCheck = m.foo;
82
+ m.foo = false;
83
+ expect(value).not.toBe(m.foo);
84
+ expect(oldValue).not.toBe(oldValueCheck);
85
+ });
86
+
87
+ it("Should trigger a change:field event when any field is changed", () => {
88
+ const m = new DataModel(['field_1']);
89
+ let value = null;
90
+
91
+ m.on('change:field_1', (values) => {
92
+ value = values.value;
93
+ });
94
+
95
+ m.field_1 = 'testing';
96
+
97
+ expect(value).toBe(m.field_1);
98
+ });
99
+
100
+ it("should save last data and return true with is modfied if something is modified", () => {
101
+ const m = new DataModel({
102
+ field_1: 1,
103
+ field_2: 'foo'
104
+ });
105
+ m.setLastData();
106
+ expect(m.isModified()).toBe(false);
107
+ m.field_1 = 2;
108
+ m.field_2 = null;
109
+ expect(m.isModified()).toBe(true);
110
+ m.setLastData();
111
+ expect(m.isModified()).toBe(false);
112
+ m.field_2 = 'bar';
113
+ expect(m.isModified()).toBe(true);
114
+ });
115
+
116
+ it("should revert to last data correctly", () => {
117
+ const m = new DataModel({
118
+ field_1: 1,
119
+ field_2: 'bar'
120
+ });
121
+ m.setLastData();
122
+ expect(m.isModified()).toBe(false);
123
+ m.field_1 = 2;
124
+ m.field_2 = null;
125
+ expect(m.isModified()).toBe(true);
126
+ m.revert();
127
+ expect(m.isModified()).toBe(false);
128
+ expect(m.field_1).toBe(1);
129
+ expect(m.field_2).toBe('bar');
130
+ });
131
+
132
+ it("should return the field object", () => {
133
+ const m = new DataModel({
134
+ field_1: 1,
135
+ field_2: 'string field!'
136
+ }),
137
+ field = m.getField('field_2');
138
+ expect(field.value).toBe('string field!');
139
+
140
+ });
141
+ });