diff --git a/local-cli/__tests__/generator-android-test.js b/local-cli/__tests__/generator-android-test.js deleted file mode 100644 index 748f163cc..000000000 --- a/local-cli/__tests__/generator-android-test.js +++ /dev/null @@ -1,88 +0,0 @@ -'use strict'; - -jest.autoMockOff(); - -var path = require('path'); - -describe('react:android', function () { - var assert; - - beforeEach(function (done) { - // A deep dependency of yeoman spams console.log with giant json objects. - // yeoman-generator/node_modules/ - // download/node_modules/ - // caw/node_modules/ - // get-proxy/node_modules/ - // rc/index.js - var log = console.log; - console.log = function() {}; - assert = require('yeoman-generator').assert; - var helpers = require('yeoman-generator').test; - console.log = log; - - var generated = false; - - runs(function() { - helpers.run(path.resolve(__dirname, '..', 'generator-android')) - .withArguments(['TestAppAndroid']) - .withOptions({ - 'package': 'com.reactnative.test', - }) - .on('end', function() { - generated = true; - }); - }); - - waitsFor(function() { - jest.runAllTicks(); - jest.runOnlyPendingTimers(); - return generated; - }, "generation", 750); - }); - - it('creates files', function () { - assert.file([ - path.join('android', 'build.gradle'), - path.join('android', 'gradle.properties'), - path.join('android', 'gradlew.bat'), - path.join('android', 'gradlew'), - path.join('android', 'settings.gradle'), - path.join('android', 'app', 'build.gradle'), - path.join('android', 'app', 'proguard-rules.pro'), - path.join('android', 'app', 'src', 'main', 'AndroidManifest.xml'), - path.join('android', 'app', 'src', 'main', 'java', 'com', 'reactnative', 'test', 'MainActivity.java'), - path.join('android', 'app', 'src', 'main', 'res', 'mipmap-hdpi', 'ic_launcher.png'), - path.join('android', 'app', 'src', 'main', 'res', 'mipmap-mdpi', 'ic_launcher.png'), - path.join('android', 'app', 'src', 'main', 'res', 'mipmap-xhdpi', 'ic_launcher.png'), - path.join('android', 'app', 'src', 'main', 'res', 'mipmap-xxhdpi', 'ic_launcher.png'), - path.join('android', 'app', 'src', 'main', 'res', 'values', 'strings.xml'), - path.join('android', 'app', 'src', 'main', 'res', 'values', 'styles.xml'), - path.join('android', 'gradle', 'wrapper', 'gradle-wrapper.jar'), - path.join('android', 'gradle', 'wrapper', 'gradle-wrapper.properties') - ]); - }); - - it('replaces variables', function() { - assert.fileContent(path.join('android', 'app', 'build.gradle'), 'applicationId "com.reactnative.test"'); - assert.fileContent( - path.join('android', 'app', 'src', 'main', 'AndroidManifest.xml'), - 'package="com.reactnative.test"' - ); - assert.fileContent( - path.join('android', 'app', 'src', 'main', 'AndroidManifest.xml'), - 'name=".MainActivity"' - ); - assert.fileContent( - path.join('android', 'app', 'src', 'main', 'java', 'com', 'reactnative', 'test', 'MainActivity.java'), - 'package com.reactnative.test;' - ); - assert.fileContent( - path.join('android', 'app', 'src', 'main', 'java', 'com', 'reactnative', 'test', 'MainActivity.java'), - 'mReactRootView.startReactApplication(mReactInstanceManager, "TestAppAndroid", null);' - ); - assert.fileContent( - path.join('android', 'app', 'src', 'main', 'res', 'values', 'strings.xml'), - 'TestAppAndroid' - ); - }); -}); diff --git a/local-cli/__tests__/generator-ios-test.js b/local-cli/__tests__/generator-ios-test.js deleted file mode 100644 index be46409fb..000000000 --- a/local-cli/__tests__/generator-ios-test.js +++ /dev/null @@ -1,98 +0,0 @@ -'use strict'; - -jest.autoMockOff(); - -var path = require('path'); - -describe('react:ios', function() { - var assert; - - beforeEach(function() { - // A deep dependency of yeoman spams console.log with giant json objects. - // yeoman-generator/node_modules/ - // download/node_modules/ - // caw/node_modules/ - // get-proxy/node_modules/ - // rc/index.js - var log = console.log; - console.log = function() {}; - assert = require('yeoman-generator').assert; - var helpers = require('yeoman-generator').test; - console.log = log; - - var generated = false; - - runs(function() { - helpers.run(path.resolve(__dirname, '../generator-ios')) - .withArguments(['TestAppIOS']) - .on('end', function() { - generated = true; - }); - }); - - waitsFor(function() { - jest.runAllTicks(); - jest.runOnlyPendingTimers(); - return generated; - }, "generation", 750); - }); - - it('creates files', function() { - assert.file([ - 'ios/main.jsbundle', - 'ios/TestAppIOS/AppDelegate.h', - 'ios/TestAppIOS/AppDelegate.m', - 'ios/TestAppIOS/Base.lproj/LaunchScreen.xib', - 'ios/TestAppIOS/Images.xcassets/AppIcon.appiconset/Contents.json', - 'ios/TestAppIOS/Info.plist', - 'ios/TestAppIOS/main.m', - 'ios/TestAppIOS.xcodeproj/project.pbxproj', - 'ios/TestAppIOS.xcodeproj/xcshareddata/xcschemes/TestAppIOS.xcscheme', - 'ios/TestAppIOSTests/TestAppIOSTests.m', - 'ios/TestAppIOSTests/Info.plist' - ]); - }); - - it('replaces vars in AppDelegate.m', function() { - var appDelegate = 'ios/TestAppIOS/AppDelegate.m'; - - assert.fileContent(appDelegate, 'moduleName:@"TestAppIOS"'); - assert.noFileContent(appDelegate, 'SampleApp'); - }); - - it('replaces vars in LaunchScreen.xib', function() { - var launchScreen = 'ios/TestAppIOS/Base.lproj/LaunchScreen.xib'; - - assert.fileContent(launchScreen, 'text="TestAppIOS"'); - assert.noFileContent(launchScreen, 'SampleApp'); - }); - - it('replaces vars in TestAppIOSTests.m', function() { - var tests = 'ios/TestAppIOSTests/TestAppIOSTests.m'; - - assert.fileContent(tests, '@interface TestAppIOSTests : XCTestCase'); - assert.fileContent(tests, '@implementation TestAppIOSTests'); - assert.noFileContent(tests, 'SampleApp'); - }); - - it('replaces vars in project.pbxproj', function() { - var pbxproj = 'ios/TestAppIOS.xcodeproj/project.pbxproj'; - assert.fileContent(pbxproj, '"TestAppIOS"'); - assert.fileContent(pbxproj, '"TestAppIOSTests"'); - assert.fileContent(pbxproj, 'TestAppIOS.app'); - assert.fileContent(pbxproj, 'TestAppIOSTests.xctest'); - - assert.noFileContent(pbxproj, 'SampleApp'); - }); - - it('replaces vars in xcscheme', function() { - var xcscheme = 'ios/TestAppIOS.xcodeproj/xcshareddata/xcschemes/TestAppIOS.xcscheme'; - assert.fileContent(xcscheme, '"TestAppIOS"'); - assert.fileContent(xcscheme, '"TestAppIOS.app"'); - assert.fileContent(xcscheme, 'TestAppIOS.xcodeproj'); - assert.fileContent(xcscheme, '"TestAppIOSTests.xctest"'); - assert.fileContent(xcscheme, '"TestAppIOSTests"'); - - assert.noFileContent(xcscheme, 'SampleApp'); - }); -}); diff --git a/local-cli/__tests__/generator-test.js b/local-cli/__tests__/generator-test.js deleted file mode 100644 index a7c60bead..000000000 --- a/local-cli/__tests__/generator-test.js +++ /dev/null @@ -1,82 +0,0 @@ -'use strict'; - -jest.autoMockOff(); - -var path = require('path'); -var fs = require('fs'); - -describe('react:react', function() { - var assert; - - beforeEach(function() { - // A deep dependency of yeoman spams console.log with giant json objects. - // yeoman-generator/node_modules/ - // download/node_modules/ - // caw/node_modules/ - // get-proxy/node_modules/ - // rc/index.js - var log = console.log; - console.log = function() {}; - assert = require('yeoman-generator').assert; - var helpers = require('yeoman-generator').test; - console.log = log; - - var generated = false; - - runs(function() { - helpers.run(path.resolve(__dirname, '../generator')) - .withArguments(['TestApp']) - .on('end', function() { - generated = true; - }); - }); - - waitsFor(function() { - jest.runAllTicks(); - jest.runOnlyPendingTimers(); - return generated; - }, "generation", 750); - }); - - it('creates files', function() { - assert.file([ - '.flowconfig', - '.gitignore', - '.watchmanconfig', - 'index.ios.js', - 'index.android.js' - ]); - }); - - it('replaces vars in index.ios.js', function() { - assert.fileContent('index.ios.js', 'var TestApp = React.createClass({'); - assert.fileContent( - 'index.ios.js', - 'AppRegistry.registerComponent(\'TestApp\', () => TestApp);' - ); - - assert.noFileContent('index.ios.js', 'SampleApp'); - }); - - it('replaces vars in index.android.js', function() { - assert.fileContent('index.android.js', 'var TestApp = React.createClass({'); - assert.fileContent( - 'index.android.js', - 'AppRegistry.registerComponent(\'TestApp\', () => TestApp);' - ); - - assert.noFileContent('index.ios.js', 'SampleApp'); - }); - - it('composes with ios generator', function() { - var stat = fs.statSync('ios'); - - expect(stat.isDirectory()).toBe(true); - }); - - it('composes with android generator', function() { - var stat = fs.statSync('android'); - - expect(stat.isDirectory()).toBe(true); - }) -}); diff --git a/local-cli/__tests__/generators-test.js b/local-cli/__tests__/generators-test.js new file mode 100644 index 000000000..8a982fcd5 --- /dev/null +++ b/local-cli/__tests__/generators-test.js @@ -0,0 +1,260 @@ +'use strict'; + +jest.autoMockOff(); + +var path = require('path'); +var fs = require('fs'); + +describe('React Yeoman Generators', function() { + describe('react:react', function() { + var assert; + + beforeEach(function() { + // A deep dependency of yeoman spams console.log with giant json objects. + // yeoman-generator/node_modules/ + // download/node_modules/ + // caw/node_modules/ + // get-proxy/node_modules/ + // rc/index.js + var log = console.log; + console.log = function() {}; + assert = require('yeoman-generator').assert; + var helpers = require('yeoman-generator').test; + console.log = log; + + var generated = false; + + runs(function() { + helpers.run(path.resolve(__dirname, '../generator')) + .withArguments(['TestApp']) + .on('end', function() { + generated = true; + }); + }); + + waitsFor(function() { + jest.runAllTicks(); + jest.runOnlyPendingTimers(); + return generated; + }, "generation", 750); + }); + + it('creates files', function() { + assert.file([ + '.flowconfig', + '.gitignore', + '.watchmanconfig', + 'index.ios.js', + 'index.android.js' + ]); + }); + + it('replaces vars in index.ios.js', function() { + assert.fileContent('index.ios.js', 'var TestApp = React.createClass({'); + assert.fileContent( + 'index.ios.js', + 'AppRegistry.registerComponent(\'TestApp\', () => TestApp);' + ); + + assert.noFileContent('index.ios.js', 'SampleApp'); + }); + + it('replaces vars in index.android.js', function() { + assert.fileContent('index.android.js', 'var TestApp = React.createClass({'); + assert.fileContent( + 'index.android.js', + 'AppRegistry.registerComponent(\'TestApp\', () => TestApp);' + ); + + assert.noFileContent('index.ios.js', 'SampleApp'); + }); + + it('composes with ios generator', function() { + var stat = fs.statSync('ios'); + + expect(stat.isDirectory()).toBe(true); + }); + + it('composes with android generator', function() { + var stat = fs.statSync('android'); + + expect(stat.isDirectory()).toBe(true); + }) + }); + + describe('react:android', function () { + var assert; + + beforeEach(function (done) { + // A deep dependency of yeoman spams console.log with giant json objects. + // yeoman-generator/node_modules/ + // download/node_modules/ + // caw/node_modules/ + // get-proxy/node_modules/ + // rc/index.js + var log = console.log; + console.log = function() {}; + assert = require('yeoman-generator').assert; + var helpers = require('yeoman-generator').test; + console.log = log; + + var generated = false; + + runs(function() { + helpers.run(path.resolve(__dirname, '..', 'generator-android')) + .withArguments(['TestAppAndroid']) + .withOptions({ + 'package': 'com.reactnative.test', + }) + .on('end', function() { + generated = true; + }); + }); + + waitsFor(function() { + jest.runAllTicks(); + jest.runOnlyPendingTimers(); + return generated; + }, "generation", 750); + }); + + it('creates files', function () { + assert.file([ + path.join('android', 'build.gradle'), + path.join('android', 'gradle.properties'), + path.join('android', 'gradlew.bat'), + path.join('android', 'gradlew'), + path.join('android', 'settings.gradle'), + path.join('android', 'app', 'build.gradle'), + path.join('android', 'app', 'proguard-rules.pro'), + path.join('android', 'app', 'src', 'main', 'AndroidManifest.xml'), + path.join('android', 'app', 'src', 'main', 'java', 'com', 'reactnative', 'test', 'MainActivity.java'), + path.join('android', 'app', 'src', 'main', 'res', 'mipmap-hdpi', 'ic_launcher.png'), + path.join('android', 'app', 'src', 'main', 'res', 'mipmap-mdpi', 'ic_launcher.png'), + path.join('android', 'app', 'src', 'main', 'res', 'mipmap-xhdpi', 'ic_launcher.png'), + path.join('android', 'app', 'src', 'main', 'res', 'mipmap-xxhdpi', 'ic_launcher.png'), + path.join('android', 'app', 'src', 'main', 'res', 'values', 'strings.xml'), + path.join('android', 'app', 'src', 'main', 'res', 'values', 'styles.xml'), + path.join('android', 'gradle', 'wrapper', 'gradle-wrapper.jar'), + path.join('android', 'gradle', 'wrapper', 'gradle-wrapper.properties') + ]); + }); + + it('replaces variables', function() { + assert.fileContent(path.join('android', 'app', 'build.gradle'), 'applicationId "com.reactnative.test"'); + assert.fileContent( + path.join('android', 'app', 'src', 'main', 'AndroidManifest.xml'), + 'package="com.reactnative.test"' + ); + assert.fileContent( + path.join('android', 'app', 'src', 'main', 'AndroidManifest.xml'), + 'name=".MainActivity"' + ); + assert.fileContent( + path.join('android', 'app', 'src', 'main', 'java', 'com', 'reactnative', 'test', 'MainActivity.java'), + 'package com.reactnative.test;' + ); + assert.fileContent( + path.join('android', 'app', 'src', 'main', 'java', 'com', 'reactnative', 'test', 'MainActivity.java'), + 'mReactRootView.startReactApplication(mReactInstanceManager, "TestAppAndroid", null);' + ); + assert.fileContent( + path.join('android', 'app', 'src', 'main', 'res', 'values', 'strings.xml'), + 'TestAppAndroid' + ); + }); + }); + + describe('react:ios', function() { + var assert; + + beforeEach(function() { + // A deep dependency of yeoman spams console.log with giant json objects. + // yeoman-generator/node_modules/ + // download/node_modules/ + // caw/node_modules/ + // get-proxy/node_modules/ + // rc/index.js + var log = console.log; + console.log = function() {}; + assert = require('yeoman-generator').assert; + var helpers = require('yeoman-generator').test; + console.log = log; + + var generated = false; + + runs(function() { + helpers.run(path.resolve(__dirname, '../generator-ios')) + .withArguments(['TestAppIOS']) + .on('end', function() { + generated = true; + }); + }); + + waitsFor(function() { + jest.runAllTicks(); + jest.runOnlyPendingTimers(); + return generated; + }, "generation", 750); + }); + + it('creates files', function() { + assert.file([ + 'ios/main.jsbundle', + 'ios/TestAppIOS/AppDelegate.h', + 'ios/TestAppIOS/AppDelegate.m', + 'ios/TestAppIOS/Base.lproj/LaunchScreen.xib', + 'ios/TestAppIOS/Images.xcassets/AppIcon.appiconset/Contents.json', + 'ios/TestAppIOS/Info.plist', + 'ios/TestAppIOS/main.m', + 'ios/TestAppIOS.xcodeproj/project.pbxproj', + 'ios/TestAppIOS.xcodeproj/xcshareddata/xcschemes/TestAppIOS.xcscheme', + 'ios/TestAppIOSTests/TestAppIOSTests.m', + 'ios/TestAppIOSTests/Info.plist' + ]); + }); + + it('replaces vars in AppDelegate.m', function() { + var appDelegate = 'ios/TestAppIOS/AppDelegate.m'; + + assert.fileContent(appDelegate, 'moduleName:@"TestAppIOS"'); + assert.noFileContent(appDelegate, 'SampleApp'); + }); + + it('replaces vars in LaunchScreen.xib', function() { + var launchScreen = 'ios/TestAppIOS/Base.lproj/LaunchScreen.xib'; + + assert.fileContent(launchScreen, 'text="TestAppIOS"'); + assert.noFileContent(launchScreen, 'SampleApp'); + }); + + it('replaces vars in TestAppIOSTests.m', function() { + var tests = 'ios/TestAppIOSTests/TestAppIOSTests.m'; + + assert.fileContent(tests, '@interface TestAppIOSTests : XCTestCase'); + assert.fileContent(tests, '@implementation TestAppIOSTests'); + assert.noFileContent(tests, 'SampleApp'); + }); + + it('replaces vars in project.pbxproj', function() { + var pbxproj = 'ios/TestAppIOS.xcodeproj/project.pbxproj'; + assert.fileContent(pbxproj, '"TestAppIOS"'); + assert.fileContent(pbxproj, '"TestAppIOSTests"'); + assert.fileContent(pbxproj, 'TestAppIOS.app'); + assert.fileContent(pbxproj, 'TestAppIOSTests.xctest'); + + assert.noFileContent(pbxproj, 'SampleApp'); + }); + + it('replaces vars in xcscheme', function() { + var xcscheme = 'ios/TestAppIOS.xcodeproj/xcshareddata/xcschemes/TestAppIOS.xcscheme'; + assert.fileContent(xcscheme, '"TestAppIOS"'); + assert.fileContent(xcscheme, '"TestAppIOS.app"'); + assert.fileContent(xcscheme, 'TestAppIOS.xcodeproj'); + assert.fileContent(xcscheme, '"TestAppIOSTests.xctest"'); + assert.fileContent(xcscheme, '"TestAppIOSTests"'); + + assert.noFileContent(xcscheme, 'SampleApp'); + }); + }); +});