From 3ff32092a33efed3f89a3423cf2f6946c066422b Mon Sep 17 00:00:00 2001 From: filmaj Date: Mon, 26 Jun 2017 12:26:53 -0500 Subject: [PATCH 1/3] CB-12954 :knife: remove jshint leftovers --- .jshintignore | 3 --- .jshintrc | 10 ---------- bin/templates/cordova/.jshintrc | 10 ---------- spec/.jshintrc | 11 ----------- 4 files changed, 34 deletions(-) delete mode 100644 .jshintignore delete mode 100644 .jshintrc delete mode 100644 bin/templates/cordova/.jshintrc delete mode 100644 spec/.jshintrc diff --git a/.jshintignore b/.jshintignore deleted file mode 100644 index dc77ccc1..00000000 --- a/.jshintignore +++ /dev/null @@ -1,3 +0,0 @@ -bin/node_modules/* -bin/templates/project/* -spec/fixtures/* diff --git a/.jshintrc b/.jshintrc deleted file mode 100644 index 89a121cf..00000000 --- a/.jshintrc +++ /dev/null @@ -1,10 +0,0 @@ -{ - "node": true - , "bitwise": true - , "undef": true - , "trailing": true - , "quotmark": true - , "indent": 4 - , "unused": "vars" - , "latedef": "nofunc" -} diff --git a/bin/templates/cordova/.jshintrc b/bin/templates/cordova/.jshintrc deleted file mode 100644 index 89a121cf..00000000 --- a/bin/templates/cordova/.jshintrc +++ /dev/null @@ -1,10 +0,0 @@ -{ - "node": true - , "bitwise": true - , "undef": true - , "trailing": true - , "quotmark": true - , "indent": 4 - , "unused": "vars" - , "latedef": "nofunc" -} diff --git a/spec/.jshintrc b/spec/.jshintrc deleted file mode 100644 index 17eae32c..00000000 --- a/spec/.jshintrc +++ /dev/null @@ -1,11 +0,0 @@ -{ - "node": true - , "bitwise": true - , "undef": true - , "trailing": true - , "quotmark": true - , "indent": 4 - , "unused": "vars" - , "latedef": "nofunc" - , "jasmine": true -} From 540929c6a0ced3d186ce9b1efea03c32403b89d1 Mon Sep 17 00:00:00 2001 From: Nikita Matrosov Date: Mon, 26 Jun 2017 20:55:14 +0300 Subject: [PATCH 2/3] CB-9971: Suppressed unwanted java stderr output when running gradle wrapper this closes #388 --- .../cordova/lib/builders/GradleBuilder.js | 68 +++++++++++-------- spec/unit/builders/GradleBuilder.spec.js | 4 +- 2 files changed, 41 insertions(+), 31 deletions(-) diff --git a/bin/templates/cordova/lib/builders/GradleBuilder.js b/bin/templates/cordova/lib/builders/GradleBuilder.js index c006c658..a0fb2a6c 100644 --- a/bin/templates/cordova/lib/builders/GradleBuilder.js +++ b/bin/templates/cordova/lib/builders/GradleBuilder.js @@ -37,7 +37,7 @@ var TEMPLATE = function GradleBuilder (projectRoot) { GenericBuilder.call(this, projectRoot); - this.binDirs = {gradle: this.binDirs.gradle}; + this.binDirs = { gradle: this.binDirs.gradle }; } util.inherits(GradleBuilder, GenericBuilder); @@ -73,9 +73,12 @@ GradleBuilder.prototype.runGradleWrapper = function (gradle_cmd) { var gradlePath = path.join(this.root, 'gradlew'); var wrapperGradle = path.join(this.root, 'wrapper.gradle'); if (fs.existsSync(gradlePath)) { - // Literally do nothing, for some reason this works, while !fs.existsSync didn't on Windows + // Literally do nothing, for some reason this works, while !fs.existsSync didn't on Windows } else { - return superspawn.spawn(gradle_cmd, ['-p', this.root, 'wrapper', '-b', wrapperGradle], {stdio: 'inherit'}); + return superspawn.spawn(gradle_cmd, ['-p', this.root, 'wrapper', '-b', wrapperGradle], { stdio: 'pipe' }) + .progress(function (stdio) { + suppressJavaOptionsInfo(stdio); + }); } }; @@ -219,33 +222,19 @@ GradleBuilder.prototype.build = function (opts) { var wrapper = path.join(this.root, 'gradlew'); var args = this.getArgs(opts.buildType === 'debug' ? 'debug' : 'release', opts); - return superspawn.spawn(wrapper, args, {stdio: 'pipe'}).progress(function (stdio) { - if (stdio.stderr) { - /* - * Workaround for the issue with Java printing some unwanted information to - * stderr instead of stdout. - * This function suppresses 'Picked up _JAVA_OPTIONS' message from being - * printed to stderr. See https://issues.apache.org/jira/browse/CB-9971 for - * explanation. - */ - var suppressThisLine = /^Picked up _JAVA_OPTIONS: /i.test(stdio.stderr.toString()); - if (suppressThisLine) { - return; + return superspawn.spawn(wrapper, args, { stdio: 'pipe' }) + .progress(function (stdio) { + suppressJavaOptionsInfo(stdio); + }).catch(function (error) { + if (error.toString().indexOf('failed to find target with hash string') >= 0) { + return check_reqs.check_android_target(error).then(function () { + // If due to some odd reason - check_android_target succeeds + // we should still fail here. + return Q.reject(error); + }); } - process.stderr.write(stdio.stderr); - } else { - process.stdout.write(stdio.stdout); - } - }).catch(function (error) { - if (error.toString().indexOf('failed to find target with hash string') >= 0) { - return check_reqs.check_android_target(error).then(function () { - // If due to some odd reason - check_android_target succeeds - // we should still fail here. - return Q.reject(error); - }); - } - return Q.reject(error); - }); + return Q.reject(error); + }); }; GradleBuilder.prototype.clean = function (opts) { @@ -253,7 +242,7 @@ GradleBuilder.prototype.clean = function (opts) { var wrapper = path.join(this.root, 'gradlew'); var args = builder.getArgs('clean', opts); return Q().then(function () { - return superspawn.spawn(wrapper, args, {stdio: 'inherit'}); + return superspawn.spawn(wrapper, args, { stdio: 'inherit' }); }).then(function () { shell.rm('-rf', path.join(builder.root, 'out')); @@ -268,6 +257,25 @@ GradleBuilder.prototype.clean = function (opts) { module.exports = GradleBuilder; +function suppressJavaOptionsInfo (stdio) { + if (stdio.stderr) { + /* + * Workaround for the issue with Java printing some unwanted information to + * stderr instead of stdout. + * This function suppresses 'Picked up _JAVA_OPTIONS' message from being + * printed to stderr. See https://issues.apache.org/jira/browse/CB-9971 for + * explanation. + */ + var suppressThisLine = /^Picked up _JAVA_OPTIONS: /i.test(stdio.stderr.toString()); + if (suppressThisLine) { + return; + } + process.stderr.write(stdio.stderr); + } else { + process.stdout.write(stdio.stdout); + } +} + function isAutoGenerated (file) { return fs.existsSync(file) && fs.readFileSync(file, 'utf8').indexOf(MARKER) > 0; } diff --git a/spec/unit/builders/GradleBuilder.spec.js b/spec/unit/builders/GradleBuilder.spec.js index bae5a796..f8ad1a4f 100644 --- a/spec/unit/builders/GradleBuilder.spec.js +++ b/spec/unit/builders/GradleBuilder.spec.js @@ -1,6 +1,7 @@ var Gradle_builder = require('../../../bin/templates/cordova/lib/builders/GradleBuilder.js'); var fs = require('fs'); +var Q = require('q'); var superspawn = require('cordova-common').superspawn; var builder; @@ -8,7 +9,8 @@ describe('Gradle Builder', function () { beforeEach(function () { spyOn(fs, 'existsSync').and.returnValue(true); builder = new Gradle_builder('/root'); - spyOn(superspawn, 'spawn'); + var deferred = Q.defer(); + spyOn(superspawn, 'spawn').and.returnValue(deferred.promise); }); describe('runGradleWrapper method', function () { From 90053eb9dfc03c6cdab31aab665324556c3358be Mon Sep 17 00:00:00 2001 From: filmaj Date: Tue, 27 Jun 2017 12:02:38 -0500 Subject: [PATCH 3/3] CB-12950: lots of tweaks for end-to-end test runs, especially on CI: - rename npm tasks to reflect what they do (npm run unit-tests, npm run e2e-tests). main `npm test` runs linter, unit tests and e2e tests now. - locked jasmine down to ~2.6.0. - consolidate gitignores. - updated travis to run `npm test`. add android sdk installation to appveyor ci run.align android dpendencies across travis and appveyor. have appveyor install gradle. force gradle to version 3.4.1 in appveyor, as that seems to be the only version choco has. explicitly invoke sdkmanager to move license accepting process along. --- .gitignore | 36 +++++++++++++++-------------- .travis.yml | 6 ++--- appveyor.yml | 25 ++++++++++++++++---- package.json | 9 ++++---- spec/e2e/jasmine.json | 8 +++++++ spec/{support => unit}/jasmine.json | 2 +- test/.gitignore | 9 -------- 7 files changed, 56 insertions(+), 39 deletions(-) create mode 100644 spec/e2e/jasmine.json rename spec/{support => unit}/jasmine.json (86%) delete mode 100644 test/.gitignore diff --git a/.gitignore b/.gitignore index ae640387..3be9ebd9 100644 --- a/.gitignore +++ b/.gitignore @@ -1,11 +1,21 @@ .DS_Store +.gradle +.metadata +Thumbs.db +Desktop.ini +*.tmp +*.bak +*.swp +*.class +*.jar default.properties gen assets/www/cordova.js local.properties proguard.cfg -proguard.cfg proguard-project.txt +example +/coverage /framework/lib /framework/build /framework/bin @@ -15,30 +25,23 @@ proguard-project.txt /framework/libs /framework/javadoc-public /framework/javadoc-private -/test/libs -example -/test/bin -/test/assets/www/.tmp* -/test/assets/www/cordova.js +/test/.externalNativeBuild +/test/build.gradle /test/gradle /test/gradlew /test/gradlew.bat +/test/assets/www/.tmp* +/test/assets/www/cordova.js +/test/bin /test/build -.gradle +/test/captures +/test/libs tmp/** -.metadata tmp/**/* -Thumbs.db -Desktop.ini -*.tmp -*.bak -*.swp -*.class -*.jar !/spec/fixtures/org.test.plugins.dummyplugin/src/android/TestLib.jar # IntelliJ IDEA files +**/.idea/**/* *.iml -.idea npm-debug.log node_modules/jshint node_modules/promise-matchers @@ -130,4 +133,3 @@ node_modules/wordwrap/ node_modules/yargs/ node_modules/jasmine-core/ node_modules/fs.realpath/ -/coverage diff --git a/.travis.yml b/.travis.yml index 7ad8eeae..f4734d14 100644 --- a/.travis.yml +++ b/.travis.yml @@ -9,14 +9,12 @@ before_install: install: - npm install - npm install -g codecov - - echo y | android update sdk -u --filter android-22,android-23,android-24,android-25 + - echo y | android --silent update sdk --no-ui --all --filter platform-tools,tools,build-tools-26.0.0,android-26,android-25,extra-google-m2repository,extra-android-m2repository android: components: - tools - - tools script: - - npm run eslint + - npm test - npm run cover - - npm run test-build after_script: - codecov diff --git a/appveyor.yml b/appveyor.yml index 24ea88a7..f8bef7ed 100644 --- a/appveyor.yml +++ b/appveyor.yml @@ -1,11 +1,29 @@ environment: + ANDROID_HOME: "C:\\android" matrix: - nodejs_version: "4" - nodejs_version: "6" +init: + - mkdir "%ANDROID_HOME% + - cd "%ANDROID_HOME%" + - appveyor DownloadFile "https://dl.google.com/android/repository/tools_r25.2.3-windows.zip" + - 7z x "tools_r25.2.3-windows.zip" > nul + - cd "C:\projects\cordova-android" + install: -# - cinst android-sdk -# - echo y | android update sdk -u --filter android-22,android-23 + - choco install gradle -version 3.4.1 + - gradle -version + - echo y | "%ANDROID_HOME%\tools\android.bat" --silent update sdk --no-ui --all --filter platform-tools,tools,build-tools-26.0.0,android-26,android-25,extra-google-m2repository,extra-android-m2repository + # on windows we need to accept sublicenses for the new tooling, wee. 30 is an arbitrary number, + # but should be the maximum number of licenses we explicitly need to type "Y ENTER" for. + # also, the sdkmanager in all its glory leaks a bit of output to stderr, and powershell + # and appveyor interpret that as errors, and blows up. so, when piping in our "Y ENTER" + # responses, we invoke cmd so we can redirect stderr to stdout, and tell it to --update itself. + - ps: for($i=0;$i -lt 30;$i++) { $response += "y`n"}; $response | cmd /c 'C:\android\tools\bin\sdkmanager.bat 2>&1' --update + - cd test + - gradle :wrapper -b build.gradle + - cd .. - ps: Install-Product node $env:nodejs_version - npm install @@ -14,5 +32,4 @@ build: off test_script: - node --version - npm --version - - npm run test -# - npm run test-build + - npm test diff --git a/package.json b/package.json index 5b78eb7e..574de80c 100644 --- a/package.json +++ b/package.json @@ -19,9 +19,10 @@ "apache" ], "scripts": { - "test": "npm run eslint && jasmine", - "cover": "istanbul cover --root bin/templates/cordova --print detail jasmine", - "test-build": "jasmine --captureExceptions --color spec/e2e/*.spec.js", + "test": "npm run eslint && npm run unit-tests && npm run e2e-tests", + "unit-tests": "jasmine --config=spec/unit/jasmine.json", + "cover": "istanbul cover --root bin/templates/cordova --print detail jasmine -- --config=spec/unit/jasmine.json", + "e2e-tests": "jasmine --config=spec/e2e/jasmine.json", "eslint": "eslint bin && eslint spec" }, "author": "Apache Software Foundation", @@ -51,7 +52,7 @@ "eslint-plugin-promise": "^3.5.0", "eslint-plugin-standard": "^3.0.1", "istanbul": "^0.4.2", - "jasmine": "^2.5.2", + "jasmine": "~2.6.0", "promise-matchers": "~0", "rewire": "^2.1.3" }, diff --git a/spec/e2e/jasmine.json b/spec/e2e/jasmine.json new file mode 100644 index 00000000..49c40b2c --- /dev/null +++ b/spec/e2e/jasmine.json @@ -0,0 +1,8 @@ +{ + "spec_dir": "spec", + "spec_files": [ + "e2e/**/*[sS]pec.js" + ], + "stopSpecOnExpectationFailure": false, + "random": false +} diff --git a/spec/support/jasmine.json b/spec/unit/jasmine.json similarity index 86% rename from spec/support/jasmine.json rename to spec/unit/jasmine.json index e04f8140..4fe01a65 100644 --- a/spec/support/jasmine.json +++ b/spec/unit/jasmine.json @@ -4,5 +4,5 @@ "unit/**/*[sS]pec.js" ], "stopSpecOnExpectationFailure": false, - "random": false + "random": true } diff --git a/test/.gitignore b/test/.gitignore deleted file mode 100644 index 39fb081a..00000000 --- a/test/.gitignore +++ /dev/null @@ -1,9 +0,0 @@ -*.iml -.gradle -/local.properties -/.idea/workspace.xml -/.idea/libraries -.DS_Store -/build -/captures -.externalNativeBuild