From 247e02ccb212942b6a8e742771b922165fc84a97 Mon Sep 17 00:00:00 2001 From: Aliaksandr Autayeu Date: Sat, 14 Dec 2013 21:21:08 +0100 Subject: [PATCH 1/6] more platform-independent build --- Cakefile | 72 ++++++++++++++++++++++++++++++++++++++++++-------------- 1 file changed, 54 insertions(+), 18 deletions(-) diff --git a/Cakefile b/Cakefile index ecc1a09e..548c307b 100644 --- a/Cakefile +++ b/Cakefile @@ -1,7 +1,7 @@ fs = require 'fs' -path = require 'path' {exec} = require 'child_process' less = require 'less' +ncp = require 'ncp' sourceFiles = [ 'SwaggerUi' @@ -20,12 +20,12 @@ sourceFiles = [ task 'clean', 'Removes distribution', -> console.log 'Clearing dist...' - exec 'rm -rf dist' + rmDir('dist') if fs.existsSync('dist') task 'dist', 'Build a distribution', -> console.log "Build distribution in ./dist" - fs.mkdirSync('dist') if not path.existsSync('dist') - fs.mkdirSync('dist/lib') if not path.existsSync('dist/lib') + fs.mkdirSync('dist') if not fs.existsSync('dist') + fs.mkdirSync('dist/lib') if not fs.existsSync('dist/lib') appContents = new Array remaining = sourceFiles.length for file, index in sourceFiles then do (file, index) -> @@ -65,14 +65,13 @@ task 'dist', 'Build a distribution', -> throw err if err fs.unlink 'dist/_swagger-ui.coffee' console.log ' : Combining with javascript...' - exec 'cat src/main/javascript/doc.js dist/_swagger-ui-templates.js dist/_swagger-ui.js > dist/swagger-ui.js', (err, stdout, stderr) -> + cat "dist/swagger-ui.js", ["src/main/javascript/doc.js", "dist/_swagger-ui-templates.js", "dist/_swagger-ui.js"] + fs.unlink 'dist/_swagger-ui.js' + fs.unlink 'dist/_swagger-ui-templates.js' + console.log ' : Minifying all...' + exec 'java -jar "./bin/yuicompressor-2.4.7.jar" --type js -o ' + 'dist/swagger-ui.min.js ' + 'dist/swagger-ui.js', (err, stdout, stderr) -> throw err if err - fs.unlink 'dist/_swagger-ui.js' - fs.unlink 'dist/_swagger-ui-templates.js' - console.log ' : Minifying all...' - exec 'java -jar "./bin/yuicompressor-2.4.7.jar" --type js -o ' + 'dist/swagger-ui.min.js ' + 'dist/swagger-ui.js', (err, stdout, stderr) -> - throw err if err - lessc() + lessc() lessc = -> # Someone who knows CoffeeScript should make this more Coffee-licious @@ -85,13 +84,16 @@ task 'dist', 'Build a distribution', -> pack = -> console.log ' : Packaging...' - exec 'cp -r lib dist' - console.log ' : Copied swagger-ui libs' - exec 'cp -r node_modules/swagger-client/lib/swagger.js dist/lib' - console.log ' : Copied swagger dependencies' - exec 'cp -r src/main/html/* dist' - console.log ' : Copied html dependencies' - console.log ' !' + ncp.ncp 'lib', 'dist/lib', (err) -> + reportNcpErrors err + console.log ' : Copied swagger-ui libs' + fs.mkdirSync('dist/lib') if not fs.existsSync('dist/lib') + fs.createReadStream('node_modules/swagger-client/lib/swagger.js').pipe(fs.createWriteStream('dist/lib/swagger.js')); + console.log ' : Copied swagger dependencies' + ncp.ncp 'src/main/html', 'dist', (err) -> + reportNcpErrors err + console.log ' : Copied html dependencies' + console.log ' !' task 'spec', "Run the test suite", -> exec "open spec.html", (err, stdout, stderr) -> @@ -130,3 +132,37 @@ notify = (message) -> # title: 'CoffeeScript' # image: 'bin/CoffeeScript.png' # try require('growl') message, options + +cat = (dest, files) -> + for file in files + body = fs.readFileSync(file); + fs.appendFileSync(dest, body); + fs.appendFileSync(dest, "\n"); + +rmDir = (dirPath) -> + try + files = fs.readdirSync(dirPath) + catch e + return + if files.length > 0 + i = 0 + + while i < files.length + filePath = dirPath + "/" + files[i] + if fs.statSync(filePath).isFile() + fs.unlinkSync filePath + else + rmDir filePath + i++ + fs.rmdirSync dirPath + +reportNcpErrors = (err) -> + if Array.isArray(err) + console.error "There were errors during the copy." + err.forEach (err) -> + console.error err.stack or err.message + process.exit 1 + else if err + console.error "An error has occurred." + console.error err.stack or err.message + process.exit 1 From 14ffedf509e3006782a111f19d23c8733f3af3c9 Mon Sep 17 00:00:00 2001 From: Mohsen Azimi Date: Wed, 28 Jan 2015 14:48:12 -0800 Subject: [PATCH 2/6] Add travis yaml --- .travis.yml | 3 +++ package.json | 2 +- 2 files changed, 4 insertions(+), 1 deletion(-) create mode 100644 .travis.yml diff --git a/.travis.yml b/.travis.yml new file mode 100644 index 00000000..244b7e88 --- /dev/null +++ b/.travis.yml @@ -0,0 +1,3 @@ +language: node_js +node_js: + - '0.10' diff --git a/package.json b/package.json index 56529725..22b37336 100644 --- a/package.json +++ b/package.json @@ -4,7 +4,7 @@ "description": "Swagger UI is a dependency-free collection of HTML, Javascript, and CSS assets that dynamically generate beautiful documentation from a Swagger-compliant API", "scripts": { "build": "PATH=$PATH:./node_modules/.bin cake dist", - "test": "echo \"Error: no test specified\" && exit 1" + "test": "./node_modules/coffee-script/bin/cake dist" }, "repository": { "type": "git", From f3b856c1df896eef0d99a39ccc79fd45c2eb2a71 Mon Sep 17 00:00:00 2001 From: Mohsen Azimi Date: Wed, 28 Jan 2015 15:38:27 -0800 Subject: [PATCH 3/6] Add e2e tests --- .travis.yml | 4 +++ package.json | 10 +++++--- src/test/e2e/index.js | 58 +++++++++++++++++++++++++++++++++++++++++++ 3 files changed, 69 insertions(+), 3 deletions(-) create mode 100644 src/test/e2e/index.js diff --git a/.travis.yml b/.travis.yml index 244b7e88..e275ba28 100644 --- a/.travis.yml +++ b/.travis.yml @@ -1,3 +1,7 @@ language: node_js node_js: - '0.10' +install: + - export DISPLAY=:99.0 + - sh -e /etc/init.d/xvfb start + - npm install \ No newline at end of file diff --git a/package.json b/package.json index 22b37336..5c2c32de 100644 --- a/package.json +++ b/package.json @@ -4,7 +4,7 @@ "description": "Swagger UI is a dependency-free collection of HTML, Javascript, and CSS assets that dynamically generate beautiful documentation from a Swagger-compliant API", "scripts": { "build": "PATH=$PATH:./node_modules/.bin cake dist", - "test": "./node_modules/coffee-script/bin/cake dist" + "test": "./node_modules/coffee-script/bin/cake dist; ./node_modules/mocha/bin/mocha src/test/e2e/index.js" }, "repository": { "type": "git", @@ -24,8 +24,12 @@ "less": "~1.4.2" }, "devDependencies": { - "express": "3.x", + "chai": "^1.10.0", + "cors": "2.1.1", "docco": "0.4.x", - "cors": "2.1.1" + "express": "3.x", + "http-server": "^0.7.4", + "mocha": "^2.1.0", + "selenium-webdriver": "^2.44.0" } } diff --git a/src/test/e2e/index.js b/src/test/e2e/index.js new file mode 100644 index 00000000..100e8d2a --- /dev/null +++ b/src/test/e2e/index.js @@ -0,0 +1,58 @@ +var webdriver = require('selenium-webdriver'); +var createServer = require('http-server').createServer; +var path = require('path'); +var dist = path.join(__dirname, '..', '..', '..', 'dist'); +var PORT = 8080; + +console.log('started static server from', dist, 'at port', PORT); + +var server = createServer({ + root: dist, + headers: { + 'Access-Control-Allow-Origin': '*', + 'Access-Control-Allow-Headers': 'Origin, X-Requested-With, Content-Type, Accept' + } +}); + +server.listen(PORT); + +var driver = new webdriver.Builder(). + withCapabilities(webdriver.Capabilities.firefox()). + build(); + + +describe('basics', function () { + + this.timeout(10 * 1000); + + beforeEach(function () { + driver.get('http://localhost:' + PORT); + }); + + it('should have "Swagger UI" in title', function (done) { + + driver.wait(function() { + return driver.getTitle().then(function(title) { + var hasTitle = title.indexOf('Swagger UI') > -1; + + if (hasTitle) { done(); } + + return hasTitle; + }); + }, 1000); + }); +}); + +describe('cleanup', function () { + + it('kills the static server', function () { + server.close(); + }); + + it('quit the webdriver', function () { + driver.quit(); + }); +}) + + + From 49fc73fa802203e0ce0740e800091062d2d3f9e3 Mon Sep 17 00:00:00 2001 From: Mohsen Azimi Date: Wed, 28 Jan 2015 15:41:58 -0800 Subject: [PATCH 4/6] Add chai --- src/test/e2e/index.js | 9 +++++++-- 1 file changed, 7 insertions(+), 2 deletions(-) diff --git a/src/test/e2e/index.js b/src/test/e2e/index.js index 100e8d2a..8101dbc9 100644 --- a/src/test/e2e/index.js +++ b/src/test/e2e/index.js @@ -1,6 +1,8 @@ var webdriver = require('selenium-webdriver'); var createServer = require('http-server').createServer; -var path = require('path'); +var expect = require('chai').expect; +var path = require('path') + var dist = path.join(__dirname, '..', '..', '..', 'dist'); var PORT = 8080; @@ -35,7 +37,10 @@ describe('basics', function () { return driver.getTitle().then(function(title) { var hasTitle = title.indexOf('Swagger UI') > -1; - if (hasTitle) { done(); } + if (hasTitle) { + expect(title).to.contain('Swagger UI'); + done(); + } return hasTitle; }); From 63945884573d483d362cd0b48256a401a2145ca1 Mon Sep 17 00:00:00 2001 From: Mohsen Azimi Date: Wed, 28 Jan 2015 16:19:00 -0800 Subject: [PATCH 5/6] Add build badge MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 💄 --- README.md | 2 ++ 1 file changed, 2 insertions(+) diff --git a/README.md b/README.md index 0a8b123f..53f07805 100644 --- a/README.md +++ b/README.md @@ -1,5 +1,7 @@ # Swagger UI +[![Build Status](https://travis-ci.org/swagger-api/swagger-ui.svg?branch=develop_2.0)](https://travis-ci.org/swagger-api/swagger-ui) + Swagger UI is part of the Swagger project. The Swagger project allows you to produce, visualize and consume your OWN RESTful services. No proxy or 3rd party services required. Do it your own way. Swagger UI is a dependency-free collection of HTML, Javascript, and CSS assets that dynamically From 5851bc491a4dd389b6e91df8cf7210888c29817f Mon Sep 17 00:00:00 2001 From: Mohsen Azimi Date: Wed, 28 Jan 2015 16:48:39 -0800 Subject: [PATCH 6/6] Add ncp to npm dependencie --- package.json | 1 + 1 file changed, 1 insertion(+) diff --git a/package.json b/package.json index 5c2c32de..22dca07e 100644 --- a/package.json +++ b/package.json @@ -30,6 +30,7 @@ "express": "3.x", "http-server": "^0.7.4", "mocha": "^2.1.0", + "ncp": "^1.0.1", "selenium-webdriver": "^2.44.0" } }