测试版
This commit is contained in:
83
node_modules/store/scripts/compile-builds.js
generated
vendored
Normal file
83
node_modules/store/scripts/compile-builds.js
generated
vendored
Normal file
@@ -0,0 +1,83 @@
|
||||
#!/usr/local/bin/node
|
||||
|
||||
var fs = require('fs')
|
||||
var path = require('path')
|
||||
var browserify = require('browserify')
|
||||
var UglifyJS = require('uglify-js')
|
||||
var base = __dirname + '/..'
|
||||
|
||||
module.exports = {
|
||||
run: run,
|
||||
}
|
||||
|
||||
if (require.main === module) {
|
||||
main()
|
||||
}
|
||||
|
||||
function main() {
|
||||
run(function(err) {
|
||||
if (err) { throw err }
|
||||
})
|
||||
}
|
||||
|
||||
function run(callback) {
|
||||
var dir = base+'/dist'
|
||||
fs.readdir(dir, function(err, items) {
|
||||
next()
|
||||
function next() {
|
||||
var item = items.shift()
|
||||
if (!item) {
|
||||
return callback()
|
||||
}
|
||||
if (item[0] == '.') {
|
||||
return next()
|
||||
}
|
||||
if (item.match(/\.min\.js$/)) {
|
||||
return next()
|
||||
}
|
||||
var input = path.resolve(dir+'/'+item)
|
||||
var output = input.replace(/\.js$/, '.min.js')
|
||||
console.log('compile', input, '->', output)
|
||||
compileFile(input, output, function(err) {
|
||||
if (err) {
|
||||
return callback(err)
|
||||
}
|
||||
next()
|
||||
})
|
||||
}
|
||||
})
|
||||
}
|
||||
|
||||
function compileFile(input, output, callback) {
|
||||
var copyright = '/* store.js - Copyright (c) 2010-2017 Marcus Westin */'
|
||||
// TODO: sourcemaps - depends on https://github.com/mishoo/UglifyJS2/issues/520
|
||||
browserify([input], { standalone:'store', expose:'store' }) // TODO: sourcemaps - use `debug:true`
|
||||
.transform('babelify', { presets:['es2015'] }) // TODO: sourcemaps - use `sourceMaps:true`
|
||||
.bundle(processResult)
|
||||
|
||||
function processResult(err, buf) {
|
||||
if (err) { return callback(err) }
|
||||
var code = buf.toString()
|
||||
code = minify(code)
|
||||
var result = copyright+'\n'+code
|
||||
fs.writeFile(output, result, function(err) {
|
||||
if (err) { return callback(err) }
|
||||
var b = Buffer.byteLength(result, 'utf8')
|
||||
var k = Math.round(b/1000)
|
||||
console.log(k+'k \t('+b+')')
|
||||
callback()
|
||||
})
|
||||
}
|
||||
}
|
||||
|
||||
function minify(code) {
|
||||
var minified = UglifyJS.minify(code, {
|
||||
fromString: true,
|
||||
compress: { screw_ie8:false },
|
||||
mangle: { screw_ie8:false },
|
||||
output: { screw_ie8:false },
|
||||
// warnings: true,
|
||||
// mangleProperties: { reserved:[] },
|
||||
})
|
||||
return minified.code // TODO: sourcemaps - use `result.map`.
|
||||
}
|
||||
6
node_modules/store/scripts/create-tunnel.js
generated
vendored
Normal file
6
node_modules/store/scripts/create-tunnel.js
generated
vendored
Normal file
@@ -0,0 +1,6 @@
|
||||
var port = 9575
|
||||
var tunnel = require('./saucelabs/tunnel')
|
||||
|
||||
tunnel.setup(port, function(err, url) {
|
||||
console.log("Tunnel up and running at", url)
|
||||
})
|
||||
71
node_modules/store/scripts/release.sh
generated
vendored
Executable file
71
node_modules/store/scripts/release.sh
generated
vendored
Executable file
@@ -0,0 +1,71 @@
|
||||
#!/bin/bash
|
||||
set -e
|
||||
|
||||
cd "$( cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd )" # scripts/
|
||||
cd ../ # store.js project root
|
||||
|
||||
VERSION=$1
|
||||
if [[ ! $VERSION =~ ^[0-9]+\.[0-9]+\.[0-9]+$ ]]; then
|
||||
echo "$VERSION is not a valid semver (e.g 2.1.3)"
|
||||
exit -1
|
||||
fi
|
||||
|
||||
GIT_BRANCH=`git rev-parse --abbrev-ref HEAD`
|
||||
if [ "$GIT_BRANCH" != "master" ]; then
|
||||
echo "release.sh must be called from branch master (current: $GIT_BRANCH)"
|
||||
exit -1
|
||||
fi
|
||||
|
||||
if ! git diff-index --quiet HEAD --; then
|
||||
echo "git repo is dirty. Commit all changes before using release.sh"
|
||||
exit -1
|
||||
fi
|
||||
|
||||
echo
|
||||
echo "> Bump package.json version:"
|
||||
echo
|
||||
sed -E s/'"version"\: "[0-9]+\.[0-9]+\.[0-9]+"'/'"version"\: "'$VERSION'"'/ package.json \
|
||||
> /tmp/package.json && \
|
||||
mv /tmp/package.json package.json
|
||||
cat package.json | grep $VERSION -C 1
|
||||
|
||||
echo
|
||||
echo "> Bump store-engine.js version:"
|
||||
echo
|
||||
sed -E s/"version\: '[0-9]+\.[0-9]+\.[0-9]+'"/"version\: '$VERSION'"/ src/store-engine.js \
|
||||
> /tmp/store-engine.js && \
|
||||
mv /tmp/store-engine.js src/store-engine.js
|
||||
cat src/store-engine.js | grep $VERSION -C 1
|
||||
|
||||
if [[ ! `git diff --stat` =~ "2 files changed, 2 insertions(+), 2 deletions(-)" ]]; then
|
||||
echo "WARNING! Expected exactly 2 changes in 2 files after replacing version number. Bailing! (check git status and git diff)"
|
||||
exit -1
|
||||
fi
|
||||
|
||||
echo
|
||||
while true; do
|
||||
read -p "> Ready to build, commit, tag and release v$VERSION? (y/n): " yn
|
||||
case $yn in
|
||||
[Yy]* ) break;;
|
||||
[NnQq]* ) exit;;
|
||||
* ) echo "Please answer yes or no.";;
|
||||
esac
|
||||
done
|
||||
|
||||
echo
|
||||
echo "> Build dists"
|
||||
node scripts/compile-builds.js
|
||||
|
||||
echo
|
||||
echo "> git commit/push/tag/push --tags"
|
||||
set -x
|
||||
git add dist/* package.json src/store-engine.js
|
||||
git commit -m "v$VERSION"
|
||||
git push $ORIGIN $BRANCH
|
||||
git tag -a "v$VERSION" -m "Tag v$VERSION"
|
||||
git push --tags
|
||||
set +x
|
||||
|
||||
echo
|
||||
echo "> npm publish"
|
||||
npm publish
|
||||
12
node_modules/store/scripts/run-browser-tests-live-reload.js
generated
vendored
Normal file
12
node_modules/store/scripts/run-browser-tests-live-reload.js
generated
vendored
Normal file
@@ -0,0 +1,12 @@
|
||||
#!/usr/bin/env node
|
||||
|
||||
var budo = require('budo')
|
||||
|
||||
budo(__dirname+'/../dist/store.tests.js', {
|
||||
live: true,
|
||||
stream: process.stdout,
|
||||
port: 9966,
|
||||
debug: true,
|
||||
open: true,
|
||||
title: 'store.js browser tests',
|
||||
})
|
||||
10
node_modules/store/scripts/run-node-tests.js
generated
vendored
Normal file
10
node_modules/store/scripts/run-node-tests.js
generated
vendored
Normal file
@@ -0,0 +1,10 @@
|
||||
#!/usr/local/bin/node
|
||||
|
||||
// simulate localStorage - must be done before importing tests
|
||||
var { Global } = require('../src/util')
|
||||
Global.localStorage = require('localStorage')
|
||||
|
||||
// Import and run tests
|
||||
var tests = require('../tests/tests')
|
||||
|
||||
tests.runTests()
|
||||
66
node_modules/store/scripts/run-saucelabs-tests.js
generated
vendored
Normal file
66
node_modules/store/scripts/run-saucelabs-tests.js
generated
vendored
Normal file
@@ -0,0 +1,66 @@
|
||||
#!/usr/local/bin/node
|
||||
|
||||
var port = 9574
|
||||
var username = 'storejs'
|
||||
var password = new Buffer('ZjhjMzUyNjgtNzc2ZC00ZjlkLWEwNWUtN2FkM2Q0ZDgyNzk5', 'base64').toString('utf8')
|
||||
|
||||
// TODO: Contribute to npm-saucelabs? Create new module?
|
||||
var saucelabs = require('./saucelabs/saucelabs')
|
||||
var tunnel = require('./saucelabs/tunnel')
|
||||
|
||||
main(function(err) {
|
||||
if (err) { throw err }
|
||||
log('All done!')
|
||||
})
|
||||
|
||||
function main() {
|
||||
var platformSetNames = process.argv.slice(2)
|
||||
var platformSets = platformSetNames.map(function(platformSetName) {
|
||||
var platformSet = saucelabs.platformSets[platformSetName]
|
||||
if (!platformSet) {
|
||||
throw new Error("Unknown platform set: "+platformSetName)
|
||||
}
|
||||
return platformSet
|
||||
})
|
||||
if (platformSets.length == 0) {
|
||||
var s = saucelabs.platformSets
|
||||
var platformSets = [
|
||||
// All supported platforms:
|
||||
///////////////////////////
|
||||
s.ie,
|
||||
s.safari,
|
||||
s.firefox,
|
||||
s.chrome,
|
||||
s.android,
|
||||
s.ios,
|
||||
s.opera,
|
||||
|
||||
// Specific test targets for development:
|
||||
/////////////////////////////////////////
|
||||
// s.fast,
|
||||
// s.ie6, s.ie7, s.ie8,
|
||||
// s.ie9, s.ie10, s.ie11,
|
||||
// s.firefox4, s.firefox5,
|
||||
// s.ie10,
|
||||
]
|
||||
}
|
||||
|
||||
tunnel.setup(port, function(err, url) {
|
||||
if (err) { throw err }
|
||||
saucelabs.setAuth(username, password)
|
||||
saucelabs.runTest(url, platformSets, onDone)
|
||||
function onDone(err) {
|
||||
if (err) {
|
||||
console.log('Error', err)
|
||||
process.exit(1)
|
||||
} else {
|
||||
log('All tests passed!')
|
||||
process.exit(0)
|
||||
}
|
||||
}
|
||||
})
|
||||
}
|
||||
|
||||
function log() {
|
||||
console.log.apply(console, arguments)
|
||||
}
|
||||
13
node_modules/store/scripts/saucelabs/list-supported-browsers.js
generated
vendored
Executable file
13
node_modules/store/scripts/saucelabs/list-supported-browsers.js
generated
vendored
Executable file
@@ -0,0 +1,13 @@
|
||||
#!/usr/local/bin/node
|
||||
|
||||
var username = 'storejs'
|
||||
var password = new Buffer('ZjhjMzUyNjgtNzc2ZC00ZjlkLWEwNWUtN2FkM2Q0ZDgyNzk5', 'base64').toString('utf8')
|
||||
var saucelabs = require('./saucelabs')
|
||||
|
||||
saucelabs.setAuth(username, password)
|
||||
saucelabs.listAllSupportedPlatforms(function(err, res) {
|
||||
if (err) { throw err }
|
||||
for (var i=0; i<res.length; i++) {
|
||||
console.log(res[i])
|
||||
}
|
||||
})
|
||||
59
node_modules/store/scripts/saucelabs/saucelabs-api.js
generated
vendored
Normal file
59
node_modules/store/scripts/saucelabs/saucelabs-api.js
generated
vendored
Normal file
@@ -0,0 +1,59 @@
|
||||
var request = require('request')
|
||||
|
||||
module.exports = {
|
||||
setAuth: setAuth,
|
||||
get: get,
|
||||
post: post
|
||||
}
|
||||
|
||||
var auth = {
|
||||
user: null,
|
||||
password: null,
|
||||
}
|
||||
|
||||
function setAuth(saucelabsUsername, saucelabsToken) {
|
||||
auth.user = saucelabsUsername
|
||||
auth.password = saucelabsToken
|
||||
}
|
||||
|
||||
|
||||
function get(path, callback) {
|
||||
var params = {
|
||||
url: 'https://saucelabs.com/rest/v1/'+path,
|
||||
auth: auth
|
||||
}
|
||||
// console.log("REQ", params)
|
||||
request.get(params, function(err, res, body) {
|
||||
if (err) {
|
||||
throw err
|
||||
}
|
||||
if (res.statusCode != 200) {
|
||||
console.log(params)
|
||||
throw new Error('Non-200 status code: '+body)
|
||||
}
|
||||
// console.log("RES", params.url, body)
|
||||
callback(JSON.parse(body))
|
||||
})
|
||||
}
|
||||
|
||||
|
||||
function post(path, data, callback) {
|
||||
var params = {
|
||||
url: 'https://saucelabs.com/rest/v1/'+auth.user+'/'+path,
|
||||
auth: { user:auth.user, password:auth.password },
|
||||
json: data
|
||||
}
|
||||
// console.log("REQ", params)
|
||||
request.post(params, function(err, res, body) {
|
||||
if (err) {
|
||||
throw err
|
||||
}
|
||||
if (res.statusCode != 200) {
|
||||
throw new Error('Non-200 status code: '+body)
|
||||
}
|
||||
// console.log("RES", params.url, body)
|
||||
callback(body)
|
||||
})
|
||||
}
|
||||
|
||||
// https://wiki.saucelabs.com/display/DOCS/JavaScript+Unit+Testing+Methods#JavaScriptUnitTestingMethods-StartJSUnitTests
|
||||
71
node_modules/store/scripts/saucelabs/saucelabs-platformSets.js
generated
vendored
Normal file
71
node_modules/store/scripts/saucelabs/saucelabs-platformSets.js
generated
vendored
Normal file
@@ -0,0 +1,71 @@
|
||||
// See https://wiki.saucelabs.com/display/DOCS/Platform+Configurator?_ga=1.24059122.934400320.1451142104#/
|
||||
// See ./list-saucelabs-platforms.js
|
||||
var CURRENT_VERSION = ''
|
||||
var BETA_VERSION = 'beta'
|
||||
var CHROME_VERSIONS = ['31', CURRENT_VERSION]
|
||||
var FIREFOX_VERSIONS = ['4', '5', '6', '7', CURRENT_VERSION]
|
||||
var OPERA_VERSIONS = ['11', '12']
|
||||
|
||||
var platforms = module.exports = {
|
||||
// Fast trial runs
|
||||
//////////////////
|
||||
fast: {
|
||||
'Linux': { 'chrome': [CURRENT_VERSION] },
|
||||
},
|
||||
|
||||
// Common browser sets
|
||||
//////////////////////
|
||||
ie: {
|
||||
'Windows XP': { 'internet explorer': ['6', '7', '8'] },
|
||||
'Windows 7': { 'internet explorer': ['9'] },
|
||||
'Windows 8': { 'internet explorer': ['10'] },
|
||||
'Windows 10': { 'internet explorer': ['11'], 'microsoftedge': [CURRENT_VERSION] },
|
||||
},
|
||||
safari: {
|
||||
'Windows 7': { 'safari': ['5'] },
|
||||
'OS X 10.8': { 'safari': ['6'] },
|
||||
'OS X 10.9': { 'safari': ['7'] },
|
||||
'OS X 10.10': { 'safari': ['8'] },
|
||||
'OS X 10.11': { 'safari': ['9'] },
|
||||
'OS X 10.12': { 'safari': ['10'] },
|
||||
},
|
||||
firefox: {
|
||||
'Linux': { 'firefox': ['40'] },
|
||||
'Windows XP': { 'firefox': ['4', '5'] },
|
||||
'Windows 10': { 'firefox': [CURRENT_VERSION] },
|
||||
'Mac 10.12': { 'firefox': [CURRENT_VERSION] },
|
||||
},
|
||||
android: {
|
||||
'Linux': { 'android': ['4.4','5.0','5.1'] },
|
||||
},
|
||||
ios: {
|
||||
'Mac 10.10': {
|
||||
'ipad': ['8.4'],
|
||||
'iphone':['8.4'],
|
||||
},
|
||||
'Mac 10.11': {
|
||||
'ipad': ['9.3', '10.0'],
|
||||
'iphone':['9.3', '10.0'],
|
||||
}
|
||||
},
|
||||
chrome: {
|
||||
'Mac 10.12': { 'chrome':['27', CURRENT_VERSION] },
|
||||
'Windows 10': { 'chrome':['26', CURRENT_VERSION] },
|
||||
},
|
||||
opera: {
|
||||
'Windows XP': { 'opera':'11' },
|
||||
'Linux': { 'opera':'12' },
|
||||
},
|
||||
|
||||
// Individual browser versions
|
||||
//////////////////////////////
|
||||
ie6: { 'Windows XP': { 'internet explorer': ['6'] } },
|
||||
ie7: { 'Windows XP': { 'internet explorer': ['7'] } },
|
||||
ie8: { 'Windows XP': { 'internet explorer': ['8'] } },
|
||||
ie9: { 'Windows 7': { 'internet explorer': ['9'] } },
|
||||
ie10:{ 'Windows 8': { 'internet explorer': ['10'] } },
|
||||
ie11:{ 'Windows 10': { 'internet explorer': ['11'] } },
|
||||
|
||||
firefox4: { 'Windows XP': { 'firefox': ['4'] } },
|
||||
firefox5: { 'Windows XP': { 'firefox': ['5'] } },
|
||||
}
|
||||
154
node_modules/store/scripts/saucelabs/saucelabs.js
generated
vendored
Normal file
154
node_modules/store/scripts/saucelabs/saucelabs.js
generated
vendored
Normal file
@@ -0,0 +1,154 @@
|
||||
var _ = require('lodash')
|
||||
var api = require('./saucelabs-api')
|
||||
|
||||
module.exports = {
|
||||
setAuth: api.setAuth,
|
||||
listAllSupportedPlatforms: listAllSupportedPlatforms,
|
||||
runTest: runTest,
|
||||
platformSets: require('./saucelabs-platformSets'),
|
||||
}
|
||||
|
||||
function listAllSupportedPlatforms(callback) {
|
||||
api.get('info/platforms/webdriver', function(platformsInfo) {
|
||||
var platforms = _.map(platformsInfo, function(info) {
|
||||
return [info['os'], info['api_name'], info['short_version']]
|
||||
})
|
||||
platforms.sort(function(a, b) {
|
||||
a = a.join('-')
|
||||
b = b.join('-')
|
||||
return a < b ? -1 : b < a ? 1 : 0
|
||||
})
|
||||
callback(null, filterUniquePlatforms(platforms))
|
||||
})
|
||||
}
|
||||
|
||||
function runTests(url, platforms, callback) {
|
||||
var params = { maxDuration:1800, url:url, platforms:platforms, framework:'custom', recordVideo:false, recordScreenshots:false, recordLogs:true }
|
||||
api.post('js-tests', params, callback)
|
||||
}
|
||||
|
||||
function getPlatformId(platform) {
|
||||
return platform.join('-')
|
||||
.replace('OS X', 'Mac')
|
||||
.replace('Windows XP', 'Windows 2003')
|
||||
.replace('Windows 7', 'Windows 2008')
|
||||
.replace('Windows 8', 'Windows 2012')
|
||||
}
|
||||
|
||||
function filterUniquePlatforms(platforms) {
|
||||
var seen = {}
|
||||
return _.filter(platforms, function(platform) {
|
||||
var platformId = getPlatformId(platform)
|
||||
if (seen[platformId]) { return false }
|
||||
seen[platformId] = true
|
||||
return true
|
||||
})
|
||||
}
|
||||
|
||||
function runTest(url, platformSets, callback) {
|
||||
getPlatformsArg(platformSets, function(platforms) {
|
||||
var runTestsRes
|
||||
runTests(url, platforms, function(res) {
|
||||
runTestsRes = res
|
||||
loopCheckStatus()
|
||||
})
|
||||
function loopCheckStatus() {
|
||||
getTestsStatus(runTestsRes, function(res) {
|
||||
var pending = []
|
||||
var running = []
|
||||
var passed = []
|
||||
var failed = []
|
||||
_.each(res['js tests'], function(test) {
|
||||
var status = getTestStatus(test)
|
||||
if (status == PENDING) { pending.push(test) }
|
||||
else if (status == PASSED) { passed.push(test) }
|
||||
else if (status == RUNNING) { running.push(test) }
|
||||
else if (status == FAILED) { failed.push(test) }
|
||||
else { throw new Error('Bad status') }
|
||||
})
|
||||
_.each(_.flatten([passed, pending, running, failed]), function(test) {
|
||||
console.log(getTestStatus(test), test.id, test.platform, test.status || 'test finished')
|
||||
})
|
||||
if (pending.length == 0 && running.length == 0) {
|
||||
console.log("Test suite completed")
|
||||
callback(checkTestResults(res))
|
||||
} else if (res.completed) {
|
||||
throw new Error('No pending tests, but res.completed == true')
|
||||
} else {
|
||||
var delay = 5
|
||||
console.log("Check again in", delay, "seconds")
|
||||
setTimeout(loopCheckStatus, delay * 1000)
|
||||
}
|
||||
})
|
||||
}
|
||||
})
|
||||
}
|
||||
|
||||
function getPlatformsArg(platformSets, callback) {
|
||||
listAllSupportedPlatforms(function(err, supportedPlatforms) {
|
||||
if (err) { return callback(err) }
|
||||
var allSupportedPlatforms = {}
|
||||
_.each(supportedPlatforms, function(platform) {
|
||||
allSupportedPlatforms[getPlatformId(platform)] = true
|
||||
})
|
||||
|
||||
var platforms = _.flatten(_.flatten(_.flatten(
|
||||
_.map(platformSets, function(platformSet) {
|
||||
return _.map(platformSet, function(browserSpecs, osName) {
|
||||
return _.map(browserSpecs, function(browserVersions, browserName) {
|
||||
if (typeof browserVersions == 'string') {
|
||||
browserVersions = [browserVersions]
|
||||
}
|
||||
return _.map(browserVersions, function(browserVersion) {
|
||||
return [osName, browserName, browserVersion]
|
||||
})
|
||||
})
|
||||
})
|
||||
})
|
||||
)))
|
||||
|
||||
_.each(platforms, function(platform) {
|
||||
if (!platform[2]) { return } // Don't sanity-check CURRENT_VERSION
|
||||
var platformId = getPlatformId(platform)
|
||||
if (!allSupportedPlatforms[platformId]) {
|
||||
throw new Error('Unsupported platform: '+platform.join(', ')+' ('+platformId+')')
|
||||
}
|
||||
})
|
||||
|
||||
callback(filterUniquePlatforms(platforms))
|
||||
})
|
||||
}
|
||||
|
||||
function getTestsStatus(runTestsRes, callback) {
|
||||
api.post('js-tests/status', { 'js tests':runTestsRes['js tests'] }, function(res) {
|
||||
callback(res)
|
||||
})
|
||||
}
|
||||
|
||||
var PENDING = 'PENDING'
|
||||
var RUNNING = 'RUNNING'
|
||||
var FAILED = 'FAILED '
|
||||
var PASSED = 'PASSED '
|
||||
function getTestStatus(test) {
|
||||
if (test.status == 'test error') {
|
||||
return FAILED
|
||||
} else if (test.status == 'test session in progress') {
|
||||
return RUNNING
|
||||
} else if (test.result) {
|
||||
return (test.result.failed ? FAILED : PASSED)
|
||||
} else {
|
||||
return PENDING
|
||||
}
|
||||
}
|
||||
|
||||
function checkTestResults(res) {
|
||||
var failed = 0
|
||||
_.each(res['js tests'], function(test) {
|
||||
console.log(getTestStatus(test), test.id, test.status, test.platform, test.url)
|
||||
if (getTestStatus(test) == FAILED) {
|
||||
failed += 1
|
||||
console.log('Result:', test.result)
|
||||
}
|
||||
})
|
||||
return (failed ? failed+' tests failed' : null)
|
||||
}
|
||||
73
node_modules/store/scripts/saucelabs/tunnel.js
generated
vendored
Normal file
73
node_modules/store/scripts/saucelabs/tunnel.js
generated
vendored
Normal file
@@ -0,0 +1,73 @@
|
||||
var http = require('http')
|
||||
var fs = require('fs')
|
||||
var ngrok = require('ngrok')
|
||||
|
||||
module.exports = {
|
||||
setup: setup,
|
||||
}
|
||||
|
||||
function setup(port, callback) {
|
||||
startServer(port, function(err) {
|
||||
if (err) { return callback(err) }
|
||||
console.log("Creating tunnel - this might take a few seconds")
|
||||
startTunnel(port, function(err, url) {
|
||||
if (err) { return callback(err) }
|
||||
console.log("tunnel up at", url)
|
||||
callback(null, url)
|
||||
})
|
||||
})
|
||||
}
|
||||
|
||||
function startTunnel(port, callback) {
|
||||
// return callback(null, 'https://07f51ed4.ngrok.io')
|
||||
var authtoken = new Buffer('NTJuelB1dUpVSDNycDNjZ3pldHVEXzVnWlNObkpuMlFaR013WjZ0eUZUQw==', 'base64').toString('utf8')
|
||||
ngrok.connect({ addr:port, subdomain:'storejs-test', authtoken:authtoken }, function(err, url) {
|
||||
if (err) { return callback(err) }
|
||||
url = url.replace('https:', 'http:')
|
||||
callback(null, url)
|
||||
})
|
||||
}
|
||||
|
||||
function startServer(port, callback) {
|
||||
var server = http.createServer(handleReq)
|
||||
server.listen(port)
|
||||
server.on('listening', function(err) {
|
||||
if (err) { return callback(err) }
|
||||
console.log('local server listening on http://localhost:'+port+'/')
|
||||
callback()
|
||||
})
|
||||
|
||||
function handleReq(req, res) {
|
||||
console.log(req.url)
|
||||
if (req.url == '/') {
|
||||
res.writeHead(200, { 'Content-Type':'text/html' })
|
||||
res.end(testRunnerHTML)
|
||||
|
||||
} else if (req.url == '/store.tests.min.js') {
|
||||
var headers = {
|
||||
'Content-Type':'application/javascript',
|
||||
'Cache-Control': 'no-cache, no-store, must-revalidate',
|
||||
'Pragma': 'no-cache',
|
||||
'Expires': '0'
|
||||
}
|
||||
res.writeHead(200, headers)
|
||||
fs.createReadStream(__dirname+'/../../dist/store.tests.min.js').pipe(res)
|
||||
|
||||
} else {
|
||||
res.writeHead(404)
|
||||
res.end('Not found')
|
||||
}
|
||||
}
|
||||
|
||||
var testRunnerHTML = `
|
||||
<!doctype html>
|
||||
<head>
|
||||
<title>store.js test runner</title>
|
||||
</head>
|
||||
<body>
|
||||
<h1>store.js test runner</h1>
|
||||
<script src="/store.tests.min.js"></script>
|
||||
</body>
|
||||
</html>
|
||||
`.replace(/\n\t\t/g, '\n').replace(/^\n/, '')
|
||||
}
|
||||
Reference in New Issue
Block a user