e0fca88a01689acdb7cd0f00ddcfc6aa269ea64e
[platform/framework/web/crosswalk-tizen.git] /
1 var assert = require('chai').assert;
2 var parse = require('esprima-fb').parse;
3 var originalKeys = require('./keys');
4
5 describe('works', function () {
6         var code = ['class MyClass{',
7                 'x: number;',
8                 'y: number;',
9                 'constructor(x: number, y: number){',
10                         'this.x = x;',
11                         'this.y = y;',
12                 '}',
13                 'render(){',
14                         'return <namespace:tag textAttr="value" exprAttr={expr} {...spreadAttr}><object.prop>!</object.prop>{}</namespace:tag>',
15                 '}',
16         '}'].join('\n');
17
18         var ast = parse(code);
19
20         var expectedKeys = [
21                 'ClassProperty',
22                 'TypeAnnotation',
23                 'NumberTypeAnnotation',
24                 'ClassProperty',
25                 'TypeAnnotation',
26                 'NumberTypeAnnotation',
27                 'XJSElement',
28                 'XJSOpeningElement',
29                 'XJSNamespacedName',
30                 'XJSIdentifier',
31                 'XJSIdentifier',
32                 'XJSAttribute',
33                 'XJSIdentifier',
34                 'XJSAttribute',
35                 'XJSIdentifier',
36                 'XJSExpressionContainer',
37                 'XJSSpreadAttribute',
38                 'XJSClosingElement',
39                 'XJSNamespacedName',
40                 'XJSIdentifier',
41                 'XJSIdentifier',
42                 'XJSElement',
43                 'XJSOpeningElement',
44                 'XJSMemberExpression',
45                 'XJSIdentifier',
46                 'XJSIdentifier',
47                 'XJSClosingElement',
48                 'XJSMemberExpression',
49                 'XJSIdentifier',
50                 'XJSIdentifier',
51                 'XJSExpressionContainer',
52                 'XJSEmptyExpression'
53         ];
54
55         beforeEach(function () {
56                 for (var key in require.cache) {
57                         delete require.cache[key];
58                 }
59         });
60
61         it('directly from dependency', function () {
62                 var traverse = require('./').traverse;
63                 var actualKeys = [];
64                 var actualTypeKeys = [];
65
66                 traverse(ast, {
67                         enter: function (node) {
68                                 if (originalKeys[node.type] != null) {
69                                         actualKeys.push(node.type);
70                                 }
71                         }
72                 });
73
74                 assert.deepEqual(actualKeys, expectedKeys);
75         });
76
77         it('in injected mode', function () {
78                 require('./');
79                 var traverse = require('estraverse').traverse;
80                 var actualKeys = [];
81
82                 traverse(ast, {
83                         enter: function (node) {
84                                 if (originalKeys[node.type] != null) {
85                                         actualKeys.push(node.type);
86                                 }
87                         }
88                 });
89
90                 assert.deepEqual(actualKeys, expectedKeys);
91         });
92
93         it('in single-pass mode', function () {
94                 var traverse = require('estraverse').traverse;
95                 var keys = require('./keys');
96
97                 var actualKeys = [];
98
99                 traverse(ast, {
100                         enter: function (node) {
101                                 if (originalKeys[node.type] != null) {
102                                         actualKeys.push(node.type);
103                                 }
104                         },
105                         keys: keys
106                 });
107
108                 assert.throws(function () {
109                         traverse(ast, {
110                                 enter: function () {}
111                         });
112                 });
113
114                 assert.deepEqual(actualKeys, expectedKeys);
115         });
116 });