@@ -21,6 +21,7 @@ public class JsxTransformerTests
2121 private Mock < IReactEnvironment > _environment ;
2222 private Mock < ICache > _cache ;
2323 private Mock < IFileSystem > _fileSystem ;
24+ private Mock < IFileCacheHash > _fileCacheHash ;
2425 private JsxTransformer _jsxTransformer ;
2526
2627 [ SetUp ]
@@ -33,10 +34,13 @@ public void SetUp()
3334 _fileSystem = new Mock < IFileSystem > ( ) ;
3435 _fileSystem . Setup ( x => x . MapPath ( It . IsAny < string > ( ) ) ) . Returns < string > ( x => x ) ;
3536
37+ _fileCacheHash = new Mock < IFileCacheHash > ( ) ;
38+
3639 _jsxTransformer = new JsxTransformer (
3740 _environment . Object ,
3841 _cache . Object ,
39- _fileSystem . Object
42+ _fileSystem . Object ,
43+ _fileCacheHash . Object
4044 ) ;
4145 }
4246
@@ -98,17 +102,32 @@ public void ShouldUseCacheProvider()
98102 }
99103
100104 [ Test ]
101- [ Ignore ( "Needs to be fixed" ) ]
102- public void ShouldUseFileSystemCache ( )
105+ public void ShouldUseFileSystemCacheIfHashValid ( )
103106 {
104107 SetUpEmptyCache ( ) ;
105108 _fileSystem . Setup ( x => x . FileExists ( "foo.generated.js" ) ) . Returns ( true ) ;
106109 _fileSystem . Setup ( x => x . ReadAsString ( "foo.generated.js" ) ) . Returns ( "/* filesystem cached */" ) ;
110+ _fileCacheHash . Setup ( x => x . ValidateHash ( It . IsAny < string > ( ) , It . IsAny < string > ( ) ) ) . Returns ( true ) ;
107111
108112 var result = _jsxTransformer . TransformJsxFile ( "foo.jsx" ) ;
109113 Assert . AreEqual ( "/* filesystem cached */" , result ) ;
110114 }
111115
116+ [ Test ]
117+ public void ShouldTransformJsxIfFileCacheHashInvalid ( )
118+ {
119+ SetUpEmptyCache ( ) ;
120+ _fileSystem . Setup ( x => x . FileExists ( "foo.generated.js" ) ) . Returns ( true ) ;
121+ _fileSystem . Setup ( x => x . ReadAsString ( "foo.generated.js" ) ) . Returns ( "/* filesystem cached invalid */" ) ;
122+ _fileSystem . Setup ( x => x . ReadAsString ( "foo.jsx" ) ) . Returns ( "/** @jsx React.DOM */ <div>Hello World</div>" ) ;
123+ _fileCacheHash . Setup ( x => x . ValidateHash ( It . IsAny < string > ( ) , It . IsAny < string > ( ) ) ) . Returns ( false ) ;
124+
125+ _jsxTransformer . TransformJsxFile ( "foo.jsx" ) ;
126+ _environment . Verify ( x => x . ExecuteWithLargerStackIfRequired < string > (
127+ @"global.JSXTransformer.transform(""/** @jsx React.DOM */ <div>Hello World</div>"").code"
128+ ) ) ;
129+ }
130+
112131 [ Test ]
113132 public void ShouldTransformJsxIfNoCache ( )
114133 {
@@ -123,17 +142,21 @@ public void ShouldTransformJsxIfNoCache()
123142 }
124143
125144 [ Test ]
126- [ Ignore ( "Needs to be fixed" ) ]
127145 public void ShouldSaveTransformationResult ( )
128146 {
129147 _fileSystem . Setup ( x => x . ReadAsString ( "foo.jsx" ) ) . Returns ( "/** @jsx React.DOM */ <div>Hello World</div>" ) ;
130148 _environment . Setup ( x => x . ExecuteWithLargerStackIfRequired < string > (
131149 @"global.JSXTransformer.transform(""/** @jsx React.DOM */ <div>Hello World</div>"").code"
132150 ) ) . Returns ( "React.DOM.div('Hello World')" ) ;
133151
134- var result = _jsxTransformer . TransformAndSaveJsxFile ( "foo.jsx" ) ;
135- Assert . AreEqual ( "foo.generated.js" , result ) ;
136- _fileSystem . Verify ( x => x . WriteAsString ( "foo.generated.js" , "React.DOM.div('Hello World')" ) ) ;
152+ string result = null ;
153+ _fileSystem . Setup ( x => x . WriteAsString ( "foo.generated.js" , It . IsAny < string > ( ) ) ) . Callback (
154+ ( string filename , string contents ) => result = contents
155+ ) ;
156+
157+ var resultFilename = _jsxTransformer . TransformAndSaveJsxFile ( "foo.jsx" ) ;
158+ Assert . AreEqual ( "foo.generated.js" , resultFilename ) ;
159+ StringAssert . EndsWith ( "React.DOM.div('Hello World')" , result ) ;
137160 }
138161
139162 private void SetUpEmptyCache ( )
0 commit comments