Pārlūkot izejas kodu

Test refactoring /cc @arturi @hedgerh

- Move failing multipart dir into a v0.0.5 directory
- Add a passing dummy i18n acceptance test
- Move acceptance tests into own dir, just like unit tests
- Make acceptance test run the same way as as unit tests, via an
index.js
- Remove bash requirement to run acceptance tests
Kevin van Zonneveld 9 gadi atpakaļ
vecāks
revīzija
7256fb1113

+ 27 - 0
bin/bootandkill-servers

@@ -44,6 +44,22 @@ function cleanup_servers () {
   kill -9 ${tailPid}
 }
 
+function waitForPortOpen () {
+  local port="${1}"
+  local limit="${2:-60}"
+  local attempts=0
+  echo "[${__base}] waiting on port ${port} to open... "
+  while ! echo exit | nc localhost ${port}; do
+    let "attempts = attempts + 1"
+    echo "[${__base}] still waiting on port ${port} to open... (${attempts} / ${limit}) "
+    sleep 1
+    if [ "${attempts}" -ge "${limit}" ]; then
+      echo "[${__base}] --> Port did not open for ${limit} seconds. Aborting. "
+      exit 1
+    fi
+  done
+}
+
 echo "[${__base}] --> Killing any server listening on port 4000"
 killProcessListeningOnPort 4000 || true
 echo "[${__base}] --> Killing any server listening on port 8080"
@@ -58,6 +74,17 @@ tailPid=${!}
 
 trap cleanup_servers EXIT
 
+
+
+echo "[${__base}] --> Wait for hexo webserver to be online"
+waitForPortOpen 4000
+
+echo "[${__base}] --> Wait for uppy-server to be online"
+waitForPortOpen 8080
+
+echo "[${__base}] --> Running acceptance tests"
+
+
 echo "[${__base}] --> Sleeping 20s, because the port may be open, but Hexo may still be injecting/building stuff"
 echo "[${__base}] --> and I don't know yet how to check for that"
 sleep 20

+ 0 - 56
bin/test-acceptance

@@ -1,56 +0,0 @@
-#!/usr/bin/env bash
-# How to run:
-#
-#  ./bootandkill-servers ./test-acceptance
-#
-# this will boot hexo & uppy-server, run the acceptance tests,
-# and tear down the servers.
-#
-# To run just the acceptance tests:
-#
-#  ./test-acceptance
-#
-
-
-set -o pipefail
-set -o errexit
-set -o nounset
-# set -o xtrace
-
-# Set magic variables for current file & dir
-__dir="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
-__file="${__dir}/$(basename "${BASH_SOURCE[0]}")"
-__base="$(basename ${__file} .sh)"
-__root="$(cd "$(dirname "${__dir}")" && pwd)"
-
-
-function waitForPortOpen () {
-  local port="${1}"
-  local limit="${2:-60}"
-  local attempts=0
-  echo "[${__base}] waiting on port ${port} to open... "
-  while ! echo exit | nc localhost ${port}; do
-    let "attempts = attempts + 1"
-    echo "[${__base}] still waiting on port ${port} to open... (${attempts} / ${limit}) "
-    sleep 1
-    if [ "${attempts}" -ge "${limit}" ]; then
-      echo "[${__base}] --> Port did not open for ${limit} seconds. Aborting. "
-      exit 1
-    fi
-  done
-}
-
-echo "[${__base}] --> Wait for hexo webserver to be online"
-waitForPortOpen 4000
-
-echo "[${__base}] --> Wait for uppy-server to be online"
-waitForPortOpen 8080
-
-echo "[${__base}] --> Running acceptance tests"
-
-pushd test
-  for file in $(ls *.spec.js); do
-    echo "[${__base}] --> Running acceptance test: ${file}"
-    node "${file}"
-  done
-popd

+ 3 - 3
package.json

@@ -22,9 +22,9 @@
     "release": "npm version ${SEMANTIC:-patch} -m \"Release %s\" && git push && git push --tags && npm publish",
     "start:server": "uppy-server --port 8080",
     "start": "parallelshell 'npm run watch' 'npm run start:server' 'npm run web:preview'",
-    "test:acceptance:handleservers": "bin/bootandkill-servers bin/test-acceptance",
-    "test:acceptance": "bin/test-acceptance",
-    "test:unit": "node test/index.js",
+    "test:acceptance:handleservers": "bin/bootandkill-servers node test/acceptance/index.js",
+    "test:acceptance": "node test/acceptance/index.js",
+    "test:unit": "node test/unit/index.js",
     "test": "npm run lint && npm run test:unit",
     "travis:deletecache": "travis cache --delete",
     "watch:css": "nodemon --watch src --ext scss -x 'npm run build:css && node website/update.js'",

+ 54 - 0
test/acceptance/i18n.spec.js

@@ -0,0 +1,54 @@
+var test = require('tape')
+// var path = require('path')
+var webdriver = require('selenium-webdriver')
+var By = webdriver.By
+
+test('upload two files', function (t) {
+  // Create a new webdriver instance
+  var driver = new webdriver.Builder()
+    .withCapabilities(webdriver.Capabilities.firefox())
+    .build()
+
+  driver.get('http://localhost:4000/examples/i18n/')
+
+  // Our success/fail message will be logged in the console element
+  var consoleElement = driver.findElement(By.id('console-log'))
+
+  // Wait for our upload message to be logged
+  driver.wait(isLoaded.bind(this, consoleElement))
+
+  // Get the result of our upload and test it
+  getElementValue(consoleElement)
+    .then(function (value) {
+      var result = value.split('\n')[0]
+      t.equal(result, '--> Uppy Bundled version with Tus10 & Russian language pack has loaded')
+    })
+
+  driver.quit()
+
+  t.end()
+
+  /**
+   * Check if uploading is finished by looking for a result message
+   * in the example's console output element.
+   * @return {Boolean} If uploading is complete
+   */
+  function isLoaded (consoleElement) {
+    return getElementValue(consoleElement)
+      .then(function (value) {
+        return value.indexOf('-->') !== -1
+      })
+  }
+
+  /**
+   * Get value attribute of element
+   * @param  {webdriver.WebElement} element Selenium element object
+   * @return {webdriver.promise} Promise resolving to element value
+   */
+  function getElementValue (element) {
+    return element.getAttribute('value')
+      .then(function (value) {
+        return value
+      })
+  }
+})

+ 0 - 0
test/image.jpg → test/acceptance/image.jpg


+ 0 - 0
test/image2.jpg → test/acceptance/image2.jpg


+ 5 - 0
test/acceptance/index.js

@@ -0,0 +1,5 @@
+require('babel/register')({
+  stage: 0
+})
+
+require('./i18n.spec.js')

+ 0 - 0
test/SpecRunner.html → test/unit/SpecRunner.html


+ 1 - 1
test/core.spec.js → test/unit/core.spec.js

@@ -1,5 +1,5 @@
 var test = require('tape')
-var Uppy = require('../src/core/Core.js')
+var Uppy = require('../../src/core/Core.js')
 
 test('core', function (t) {
   const uppy = new Uppy()

+ 0 - 0
test/index.js → test/unit/index.js


+ 1 - 1
test/mocks/plugin-acquirer1.js → test/unit/mocks/plugin-acquirer1.js

@@ -1,4 +1,4 @@
-const Plugin = require('../../src/plugins/Plugin.js')
+const Plugin = require('../../../src/plugins/Plugin.js')
 
 export default class TestSelector1 extends Plugin {
   constructor (core, opts) {

+ 1 - 1
test/mocks/plugin-acquirer2.js → test/unit/mocks/plugin-acquirer2.js

@@ -1,4 +1,4 @@
-const Plugin = require('../../src/plugins/Plugin.js')
+const Plugin = require('../../../src/plugins/Plugin.js')
 
 export default class TestSelector2 extends Plugin {
   constructor (core, opts) {

+ 0 - 0
test/spec/fakeBlob.js → test/unit/spec/fakeBlob.js


+ 0 - 0
test/spec/uppy.js → test/unit/spec/uppy.js


+ 4 - 4
test/translator.spec.js → test/unit/translator.spec.js

@@ -1,8 +1,8 @@
 var test = require('tape')
-var Core = require('../src/core/index.js')
+var Core = require('../../src/core/index.js')
 
 test('translation', function (t) {
-  const russian = require('../src/locales/ru_RU.js')
+  const russian = require('../../src/locales/ru_RU.js')
   const core = new Core({locales: russian})
 
   t.equal(
@@ -15,7 +15,7 @@ test('translation', function (t) {
 })
 
 test('interpolation', function (t) {
-  const english = require('../src/locales/en_US.js')
+  const english = require('../../src/locales/en_US.js')
   const core = new Core({locales: english})
 
   t.equal(
@@ -28,7 +28,7 @@ test('interpolation', function (t) {
 })
 
 test('pluralization', function (t) {
-  const russian = require('../src/locales/ru_RU.js')
+  const russian = require('../../src/locales/ru_RU.js')
   const core = new Core({locales: russian})
 
   t.equal(

+ 0 - 0
test/multipart.spec.js → v0.5.0/multipart.spec.js