7
7
* of patent rights can be found in the PATENTS file in the same directory.
8
8
*/
9
9
10
+ using System ;
11
+ using System . Collections . Generic ;
10
12
using Moq ;
11
13
using NUnit . Framework ;
12
14
using React . Exceptions ;
@@ -16,59 +18,138 @@ namespace React.Tests.Core
16
18
[ TestFixture ]
17
19
public class JsxTransformerTests
18
20
{
21
+ private Mock < IReactEnvironment > _environment ;
22
+ private Mock < ICache > _cache ;
23
+ private Mock < IFileSystem > _fileSystem ;
24
+ private JsxTransformer _jsxTransformer ;
25
+
26
+ [ SetUp ]
27
+ public void SetUp ( )
28
+ {
29
+ _environment = new Mock < IReactEnvironment > ( ) ;
30
+ _environment . Setup ( x => x . EngineSupportsJsxTransformer ) . Returns ( true ) ;
31
+
32
+ _cache = new Mock < ICache > ( ) ;
33
+ _fileSystem = new Mock < IFileSystem > ( ) ;
34
+ _fileSystem . Setup ( x => x . MapPath ( It . IsAny < string > ( ) ) ) . Returns < string > ( x => x ) ;
35
+
36
+ _jsxTransformer = new JsxTransformer (
37
+ _environment . Object ,
38
+ _cache . Object ,
39
+ _fileSystem . Object
40
+ ) ;
41
+ }
42
+
19
43
[ Test ]
20
44
public void ShouldNotTransformJsxIfNoAnnotationPresent ( )
21
45
{
22
- var environment = new Mock < IReactEnvironment > ( ) ;
23
- var cache = new Mock < ICache > ( ) ;
24
- var fileSystem = new Mock < IFileSystem > ( ) ;
25
- var jsxTransformer = new JsxTransformer (
26
- environment . Object ,
27
- cache . Object ,
28
- fileSystem . Object
29
- ) ;
30
46
const string input = "<div>Hello World</div>" ;
31
47
32
- var output = jsxTransformer . TransformJsx ( input ) ;
48
+ var output = _jsxTransformer . TransformJsx ( input ) ;
33
49
Assert . AreEqual ( input , output ) ;
34
50
}
35
51
36
52
[ Test ]
37
53
public void ShouldTransformJsxIfAnnotationPresent ( )
38
54
{
39
- var environment = new Mock < IReactEnvironment > ( ) ;
40
- var cache = new Mock < ICache > ( ) ;
41
- var fileSystem = new Mock < IFileSystem > ( ) ;
42
- var jsxTransformer = new JsxTransformer (
43
- environment . Object ,
44
- cache . Object ,
45
- fileSystem . Object
46
- ) ;
47
- environment . Setup ( x => x . EngineSupportsJsxTransformer ) . Returns ( true ) ;
48
55
const string input = "/** @jsx React.DOM */ <div>Hello World</div>" ;
49
- jsxTransformer . TransformJsx ( input ) ;
56
+ _jsxTransformer . TransformJsx ( input ) ;
50
57
51
- environment . Verify ( x => x . ExecuteWithLargerStackIfRequired < string > (
58
+ _environment . Verify ( x => x . ExecuteWithLargerStackIfRequired < string > (
52
59
@"global.JSXTransformer.transform(""/** @jsx React.DOM */ <div>Hello World</div>"").code"
53
60
) ) ;
54
61
}
55
62
63
+ [ Test ]
64
+ public void ShouldWrapExceptionsInJsxExeption ( )
65
+ {
66
+ _environment . Setup ( x => x . ExecuteWithLargerStackIfRequired < string > (
67
+ @"global.JSXTransformer.transform(""/** @jsx React.DOM */ <div>Hello World</div>"").code"
68
+ ) ) . Throws ( new Exception ( "Something broke..." ) ) ;
69
+
70
+ const string input = "/** @jsx React.DOM */ <div>Hello World</div>" ;
71
+ Assert . Throws < JsxException > ( ( ) => _jsxTransformer . TransformJsx ( input ) ) ;
72
+ }
73
+
74
+ [ Test ]
56
75
public void ShouldThrowIfEngineNotSupported ( )
57
76
{
58
- var environment = new Mock < IReactEnvironment > ( ) ;
59
- var cache = new Mock < ICache > ( ) ;
60
- var fileSystem = new Mock < IFileSystem > ( ) ;
61
- var jsxTransformer = new JsxTransformer (
62
- environment . Object ,
63
- cache . Object ,
64
- fileSystem . Object
65
- ) ;
66
- environment . Setup ( x => x . EngineSupportsJsxTransformer ) . Returns ( false ) ;
77
+ _environment . Setup ( x => x . EngineSupportsJsxTransformer ) . Returns ( false ) ;
67
78
68
79
Assert . Throws < JsxUnsupportedEngineException > ( ( ) =>
69
80
{
70
- jsxTransformer . TransformJsx ( "/** @jsx React.DOM */ <div>Hello world</div>" ) ;
81
+ _jsxTransformer . TransformJsx ( "/** @jsx React.DOM */ <div>Hello world</div>" ) ;
71
82
} ) ;
72
83
}
84
+
85
+ [ Test ]
86
+ public void ShouldUseCacheProvider ( )
87
+ {
88
+ _cache . Setup ( x => x . GetOrInsert (
89
+ /*key*/ "JSX_foo.jsx" ,
90
+ /*slidingExpiration*/ It . IsAny < TimeSpan > ( ) ,
91
+ /*getData*/ It . IsAny < Func < string > > ( ) ,
92
+ /*cacheDependencyKeys*/ It . IsAny < IEnumerable < string > > ( ) ,
93
+ /*cacheDependencyFiles*/ It . IsAny < IEnumerable < string > > ( )
94
+ ) ) . Returns ( "/* cached */" ) ;
95
+
96
+ var result = _jsxTransformer . TransformJsxFile ( "foo.jsx" ) ;
97
+ Assert . AreEqual ( "/* cached */" , result ) ;
98
+ }
99
+
100
+ [ Test ]
101
+ public void ShouldUseFileSystemCache ( )
102
+ {
103
+ SetUpEmptyCache ( ) ;
104
+ _fileSystem . Setup ( x => x . FileExists ( "foo.generated.js" ) ) . Returns ( true ) ;
105
+ _fileSystem . Setup ( x => x . ReadAsString ( "foo.generated.js" ) ) . Returns ( "/* filesystem cached */" ) ;
106
+
107
+ var result = _jsxTransformer . TransformJsxFile ( "foo.jsx" ) ;
108
+ Assert . AreEqual ( "/* filesystem cached */" , result ) ;
109
+ }
110
+
111
+ [ Test ]
112
+ public void ShouldTransformJsxIfNoCache ( )
113
+ {
114
+ SetUpEmptyCache ( ) ;
115
+ _fileSystem . Setup ( x => x . FileExists ( "foo.generated.js" ) ) . Returns ( false ) ;
116
+ _fileSystem . Setup ( x => x . ReadAsString ( "foo.jsx" ) ) . Returns ( "/** @jsx React.DOM */ <div>Hello World</div>" ) ;
117
+
118
+ _jsxTransformer . TransformJsxFile ( "foo.jsx" ) ;
119
+ _environment . Verify ( x => x . ExecuteWithLargerStackIfRequired < string > (
120
+ @"global.JSXTransformer.transform(""/** @jsx React.DOM */ <div>Hello World</div>"").code"
121
+ ) ) ;
122
+ }
123
+
124
+ [ Test ]
125
+ public void ShouldSaveTransformationResult ( )
126
+ {
127
+ _fileSystem . Setup ( x => x . ReadAsString ( "foo.jsx" ) ) . Returns ( "/** @jsx React.DOM */ <div>Hello World</div>" ) ;
128
+ _environment . Setup ( x => x . ExecuteWithLargerStackIfRequired < string > (
129
+ @"global.JSXTransformer.transform(""/** @jsx React.DOM */ <div>Hello World</div>"").code"
130
+ ) ) . Returns ( "React.DOM.div('Hello World')" ) ;
131
+
132
+ var result = _jsxTransformer . TransformAndSaveJsxFile ( "foo.jsx" ) ;
133
+ Assert . AreEqual ( "foo.generated.js" , result ) ;
134
+ _fileSystem . Verify ( x => x . WriteAsString ( "foo.generated.js" , "React.DOM.div('Hello World')" ) ) ;
135
+ }
136
+
137
+ private void SetUpEmptyCache ( )
138
+ {
139
+ _cache . Setup ( x => x . GetOrInsert (
140
+ /*key*/ "JSX_foo.jsx" ,
141
+ /*slidingExpiration*/ It . IsAny < TimeSpan > ( ) ,
142
+ /*getData*/ It . IsAny < Func < string > > ( ) ,
143
+ /*cacheDependencyKeys*/ It . IsAny < IEnumerable < string > > ( ) ,
144
+ /*cacheDependencyFiles*/ It . IsAny < IEnumerable < string > > ( )
145
+ ) )
146
+ . Returns ( (
147
+ string key ,
148
+ TimeSpan slidingExpiration ,
149
+ Func < string > getData ,
150
+ IEnumerable < string > cacheDependencyFiles ,
151
+ IEnumerable < string > cacheDependencyKeys
152
+ ) => getData ( ) ) ;
153
+ }
73
154
}
74
155
}
0 commit comments