diff options
| author | cainus <[email protected]> | 2013-03-14 20:18:19 -0700 |
|---|---|---|
| committer | cainus <[email protected]> | 2013-03-14 20:18:19 -0700 |
| commit | d56cccc4e37b2b57d813f74772fd864f9f69abd6 (patch) | |
| tree | 1f99f42179f9712c43deed1cdbcb8d2d74331acb /index.js | |
| parent | 5eaec7e76af0743f9764e617472ef434f283a195 (diff) | |
| download | node-coveralls-d56cccc4e37b2b57d813f74772fd864f9f69abd6.tar.xz node-coveralls-d56cccc4e37b2b57d813f74772fd864f9f69abd6.zip | |
prototype work in progress.
Diffstat (limited to 'index.js')
| -rw-r--r-- | index.js | 184 |
1 files changed, 184 insertions, 0 deletions
diff --git a/index.js b/index.js new file mode 100644 index 0000000..66fbc95 --- /dev/null +++ b/index.js @@ -0,0 +1,184 @@ +var http = require('http'); +var request = require('request'); +var FormData = require('form-data'); + +process.stdin.resume(); +process.stdin.setEncoding('utf8'); + +var inJson = ''; + +process.stdin.on('data', function(chunk) { + inJson += chunk; +}); + +process.stdin.on('end', function() { + reportToCoveralls(inJson); +}); + +// cleans off any leading / trailing non-json garbage +var trimToJson = function(inJson){ + inJson = inJson.replace(/^[^\{]*/, ''); + return inJson.replace(/\}[^\}]*$/, '}'); +}; + +var convertCoverageValue = function(val){ + if (val === ""){ + return null; + } + if (val > 0){ + return 1; + } + return 0; +}; + +var convertFileObject = function(file){ + var source = ''; + var coverage = []; + for (var lineNumber in file.source){ + source += file.source[lineNumber].source + "\n"; + coverage.push(convertCoverageValue( + file.source[lineNumber].coverage)); + } + return { name : file.filename, + source : source, + coverage : coverage }; +}; + +var convertJsonCovToCoveralls = function(data){ + var files = data.files; + var postJson = { + service_name : "travis-ci", + source_files : [] + }; + files.forEach(function(file){ + postJson.source_files.push(convertFileObject(file)); + }); + return postJson; +}; + +var makeLocalWebServer = function(cb){ + var srv = http.createServer(function (req, res) { + console.log(req.headers); + console.log(req.url); + console.log(req.method); + req.pipe(process.stdout); + req.on('end', function(){ + res.writeHead(200, {'Content-Type': 'text/plain'}); + res.end(); + srv.close(); + }); + }).listen(9090, cb); + +}; + +var sendToCoveralls = function(postJson){ + var str = JSON.stringify(postJson); + var done = function(error, response, body) { + console.log("done"); + if (error){ + throw error; + } + console.log("response body: ", body); + }; + var url = 'https://coveralls.io/api/v1/jobs'; + //url = 'http://localhost:9090'; + + //var r = request.post(url, done); + var form = new FormData(); + //r.form(); + + form.append('json_file', str); + form.submit(url, function(err, res){ + var body = ''; + + res.on('data', function(chunk) { + body += chunk; + }); + + res.on('end', function(chunk) { + if (chunk) body += chunk; + done(err, res, body); + }); + + + }); +}; + + +var reportToCoveralls = function(inJson){ + inJson = trimToJson(inJson); + var data = JSON.parse(inJson); + console.log("successfully read json from json-cov"); + postJson = convertJsonCovToCoveralls(data); + //console.log(JSON.stringify(postJson)); + console.log("successfully converted input json to coveralls format"); + //makeLocalWebServer(function(){ + sendToCoveralls(postJson); + //}); + + +}; + + +/* example coveralls json file + + +{ + "service_job_id": "1234567890", + "service_name": "travis-ci", + "source_files": [ + { + "name": "example.rb", + "source": "def four\n 4\nend", + "coverage": [null, 1, null] + }, + { + "name": "two.rb", + "source": "def seven\n eight\n nine\nend", + "coverage": [null, 1, 0, null] + } + ] +} + + +*/ + +/* example json-cov file + +{ + "filename": "CRUDCollection.js", + "coverage": 94.20289855072464, + "hits": 65, + "misses": 4, + "sloc": 69, + "source": { + "1": { + "source": "var JSV = require('JSV').JSV;", + "coverage": 1 + }, + "2": { + "source": "var _ = require('underscore');", + "coverage": 1 + }, + "3": { + "source": "", + "coverage": "" + }, + "4": { + "source": "var CRUDCollection = function(options){", + "coverage": 1 + }, + "5": { + "source": "", + "coverage": "" + }, + "6": { + "source": " if (!options || (!options.list && !options.collectionGET)){", + "coverage": 24 + }, + + + + + +*/ |
