Initial commit
This commit is contained in:
commit
543123040c
|
@ -0,0 +1,2 @@
|
|||
/node_modules/
|
||||
npm-debug.log
|
|
@ -0,0 +1,14 @@
|
|||
{
|
||||
"curly": true,
|
||||
"eqeqeq": true,
|
||||
"immed": true,
|
||||
"latedef": true,
|
||||
"newcap": true,
|
||||
"noarg": true,
|
||||
"sub": true,
|
||||
"undef": true,
|
||||
"unused": true,
|
||||
"boss": true,
|
||||
"eqnull": true,
|
||||
"node": true
|
||||
}
|
|
@ -0,0 +1,4 @@
|
|||
language: node_js
|
||||
node_js:
|
||||
- '0.10'
|
||||
- '0.8'
|
|
@ -0,0 +1,157 @@
|
|||
'use strict';
|
||||
|
||||
module.exports = function (grunt) {
|
||||
// load all grunt tasks
|
||||
require('matchdep').filterDev('grunt-*').forEach(function(contrib) {
|
||||
grunt.log.ok([contrib + " is loaded"]);
|
||||
grunt.loadNpmTasks(contrib);
|
||||
});
|
||||
|
||||
var config = {
|
||||
dist: 'dist',
|
||||
src: 'src',
|
||||
distTest: 'test/dist',
|
||||
srcTest: 'test/src'
|
||||
};
|
||||
|
||||
// Project configuration.
|
||||
grunt.initConfig({
|
||||
config: config,
|
||||
clean: {
|
||||
dist: {
|
||||
files: [
|
||||
{
|
||||
dot: true,
|
||||
src: [
|
||||
'<%= config.dist %>/*',
|
||||
'<%= config.distTest %>/*',
|
||||
'!<%= config.dist %>/.git*'
|
||||
]
|
||||
}
|
||||
]
|
||||
},
|
||||
},
|
||||
coffee: {
|
||||
dist: {
|
||||
files: [{
|
||||
expand: true,
|
||||
cwd: '<%= config.src %>',
|
||||
src: '{,*/}*.coffee',
|
||||
dest: '<%= config.dist %>',
|
||||
ext: '.js'
|
||||
}]
|
||||
},
|
||||
test: {
|
||||
files: [{
|
||||
expand: true,
|
||||
cwd: '<%= config.srcTest %>',
|
||||
src: '{,*/}*.spec.coffee',
|
||||
dest: '<%= config.distTest %>',
|
||||
ext: '.spec.js'
|
||||
}]
|
||||
}
|
||||
},
|
||||
jshint: {
|
||||
options: {
|
||||
jshintrc: '.jshintrc'
|
||||
},
|
||||
gruntfile: {
|
||||
src: 'Gruntfile.js'
|
||||
},
|
||||
},
|
||||
watch: {
|
||||
gruntfile: {
|
||||
files: '<%= jshint.gruntfile.src %>',
|
||||
tasks: ['jshint:gruntfile']
|
||||
},
|
||||
dist: {
|
||||
files: '<%= config.src %>/*',
|
||||
tasks: ['coffee:dist', 'simplemocha:backend']
|
||||
},
|
||||
test: {
|
||||
files: '<%= config.srcTest %>/specs/*',
|
||||
tasks: ['coffee:test', 'simplemocha:backend']
|
||||
}
|
||||
},
|
||||
simplemocha: {
|
||||
options: {
|
||||
globals: [
|
||||
'sinon',
|
||||
'chai',
|
||||
'should',
|
||||
'expect',
|
||||
'assert',
|
||||
'AssertionError',
|
||||
],
|
||||
timeout: 3000,
|
||||
ignoreLeaks: false,
|
||||
// grep: '*.spec',
|
||||
ui: 'bdd',
|
||||
reporter: 'spec'
|
||||
},
|
||||
backend: {
|
||||
src: [
|
||||
// add chai and sinon globally
|
||||
'test/support/globals.js',
|
||||
|
||||
// tests
|
||||
'test/dist/**/*.spec.js',
|
||||
],
|
||||
},
|
||||
},
|
||||
});
|
||||
|
||||
grunt.registerTask('coverageBackend', 'Test backend files as well as code coverage.', function () {
|
||||
var done = this.async();
|
||||
|
||||
var path = './test/support/runner.js';
|
||||
|
||||
var options = {
|
||||
cmd: 'istanbul',
|
||||
grunt: false,
|
||||
args: [
|
||||
'cover',
|
||||
'--default-excludes',
|
||||
'-x', 'app/**',
|
||||
'--report', 'lcov',
|
||||
'--dir', './coverage/backend',
|
||||
path
|
||||
],
|
||||
opts: {
|
||||
// preserve colors for stdout in terminal
|
||||
stdio: 'inherit',
|
||||
},
|
||||
};
|
||||
|
||||
function doneFunction(error, result) {
|
||||
if (result && result.stderr) {
|
||||
process.stderr.write(result.stderr);
|
||||
}
|
||||
|
||||
if (result && result.stdout) {
|
||||
grunt.log.writeln(result.stdout);
|
||||
}
|
||||
|
||||
// abort tasks in queue if there's an error
|
||||
done(error);
|
||||
}
|
||||
|
||||
grunt.util.spawn(options, doneFunction);
|
||||
});
|
||||
|
||||
|
||||
// Default task.
|
||||
grunt.registerTask('default', ['coffee', 'jshint']);
|
||||
|
||||
grunt.registerTask('test', [
|
||||
'clean',
|
||||
'coffee',
|
||||
'simplemocha:backend',
|
||||
]);
|
||||
|
||||
grunt.registerTask('coverage', [
|
||||
'clean',
|
||||
'coffee',
|
||||
'coverageBackend'
|
||||
])
|
||||
};
|
|
@ -0,0 +1,31 @@
|
|||
# cylon [![Build Status](https://secure.travis-ci.org/deadprogram/cylon.png?branch=master)](http://travis-ci.org/deadprogram/cylon)
|
||||
|
||||
A small robotics framework based on nactor
|
||||
|
||||
## Getting Started
|
||||
Install the module with: `npm install cylon`
|
||||
|
||||
```javascript
|
||||
var cylon = require('cylon');
|
||||
cylon.awesome(); // "awesome"
|
||||
```
|
||||
|
||||
```coffee-script
|
||||
cylon = require 'cylon'
|
||||
cylon.awesome() // "awesome"
|
||||
```
|
||||
|
||||
## Documentation
|
||||
_(Coming soon)_
|
||||
|
||||
## Examples
|
||||
_(Coming soon)_
|
||||
|
||||
## Contributing
|
||||
In lieu of a formal styleguide, take care to maintain the existing coding style. Add unit tests for any new or changed functionality. Lint and test your code using [Grunt](http://gruntjs.com/).
|
||||
|
||||
## Release History
|
||||
_(Nothing yet)_
|
||||
|
||||
## License
|
||||
Copyright (c) 2013 Ron Evans. Licensed under the Apache 2.0 license.
|
|
@ -0,0 +1,34 @@
|
|||
{
|
||||
"name": "cylon",
|
||||
"version": "0.0.0",
|
||||
"main": "lib/cylon.js",
|
||||
"description": "A small robotics framework based on nactor",
|
||||
"homepage": "cylonjs.com",
|
||||
"bugs": "https://github.com/deadprogram/cylon/issues",
|
||||
"author": {
|
||||
"name": "Ron Evans",
|
||||
"email": "",
|
||||
"url": "http://hybridgroup.com"
|
||||
},
|
||||
"repository": {
|
||||
"type": "git",
|
||||
"url": "https://github.com/deadprogram/cylon"
|
||||
},
|
||||
"licenses": [
|
||||
{
|
||||
"type": "Apache 2.0"
|
||||
}
|
||||
],
|
||||
"devDependencies": {
|
||||
"matchdep": "~0.1.1",
|
||||
"grunt-contrib-jshint": "~0.6.0",
|
||||
"grunt-contrib-watch": "~0.5.0",
|
||||
"grunt-contrib-coffee": "~0.7.0",
|
||||
"grunt-simple-mocha": "~0.4.0",
|
||||
"grunt-contrib-clean": "~0.5.0",
|
||||
"sinon-chai": "~2.4.0",
|
||||
"chai": "~1.7.2",
|
||||
"mocha": "~1.12.1",
|
||||
"sinon": "~1.7.3"
|
||||
}
|
||||
}
|
|
@ -0,0 +1,12 @@
|
|||
###
|
||||
* cylon
|
||||
* cylonjs.com
|
||||
*
|
||||
* Copyright (c) 2013 Ron Evans
|
||||
* Licensed under the Apache 2.0 license.
|
||||
###
|
||||
|
||||
'use strict';
|
||||
|
||||
exports.awesome = ->
|
||||
'awesome'
|
|
@ -0,0 +1,36 @@
|
|||
'use strict';
|
||||
|
||||
cylon = source("cylon")
|
||||
|
||||
describe "basic tests", ->
|
||||
it "standard async test", (done) ->
|
||||
bool = false
|
||||
bool.should.be.false
|
||||
|
||||
setTimeout ->
|
||||
bool.should.be.false
|
||||
bool = true
|
||||
bool.should.be.true
|
||||
150
|
||||
|
||||
setTimeout ->
|
||||
bool.should.be.true
|
||||
done()
|
||||
300
|
||||
|
||||
it "standard sync test", ->
|
||||
data = []
|
||||
obj = id: 5, name: 'test'
|
||||
data.should.be.empty
|
||||
data.push obj
|
||||
data.should.have.length 1
|
||||
# soft equal
|
||||
data[0].should.be.eql obj
|
||||
# hard equal
|
||||
data[0].should.be.equal obj
|
||||
|
||||
# Now on to a `real` test
|
||||
it "cylon should be awesome", ->
|
||||
cylon.should.have.keys 'awesome'
|
||||
cylon.awesome.should.be.a 'function'
|
||||
cylon.awesome().should.be.equal 'awesome'
|
|
@ -0,0 +1,44 @@
|
|||
'use strict';
|
||||
|
||||
// allow production modules to expose internal
|
||||
// functions and properties for testing
|
||||
process.env.NODE_ENV = 'test';
|
||||
|
||||
var path = require('path');
|
||||
var chai = require('chai');
|
||||
var sinonChai = require('sinon-chai');
|
||||
|
||||
global.chai = chai;
|
||||
global.should = chai.should();
|
||||
global.expect = chai.expect;
|
||||
global.assert = chai.assert;
|
||||
global.AssertionError = chai.AssertionError;
|
||||
global.sinon = require('sinon');
|
||||
|
||||
// can be used by test modules to require production modules,
|
||||
// relative to the base path (where the Gruntfile.js also lives)
|
||||
global.source = function (src) {
|
||||
console.log('source loading: ' + src)
|
||||
var resource = path.normalize('../../dist/' + src);
|
||||
|
||||
return require(resource);
|
||||
};
|
||||
|
||||
// can be used when you expect a function to throw an error
|
||||
global.err = function (fn, msg) {
|
||||
try {
|
||||
fn();
|
||||
throw new chai.AssertionError({ message: 'Expected an error' });
|
||||
} catch (err) {
|
||||
if ('string' === typeof msg) {
|
||||
chai.expect(err.message).to.equal(msg);
|
||||
} else {
|
||||
chai.expect(err.message).to.match(msg);
|
||||
}
|
||||
}
|
||||
};
|
||||
|
||||
chai.use(sinonChai);
|
||||
|
||||
// if you want a detailed error stack output
|
||||
// chai.Assertion.includeStack = true;
|
|
@ -0,0 +1,25 @@
|
|||
'use strict';
|
||||
|
||||
require('./globals');
|
||||
|
||||
var grunt = require('grunt');
|
||||
var Mocha = require('mocha');
|
||||
|
||||
var mocha = new Mocha({ reporter: 'spec', ui: 'bdd'});
|
||||
|
||||
function run(cb) {
|
||||
var files = grunt.file.expand(__dirname + '/../dist/**/*.spec.js');
|
||||
console.log(files)
|
||||
files.forEach(function (file) {
|
||||
mocha.addFile(file);
|
||||
});
|
||||
|
||||
cb();
|
||||
}
|
||||
|
||||
run(function (err) {
|
||||
if (err) { throw err; }
|
||||
mocha.run(function (failures) {
|
||||
process.exit(failures);
|
||||
});
|
||||
});
|
Loading…
Reference in New Issue