Athena JS Library
This is a collection of commonly used utility classes and functions. It is tiny, but is separated since it is used in acorn-player
-
node and npm or in osx:
brew install nodejs
-
phantomjs or in osx:
brew install phantomjs
-
closure compiler or in osx:
brew install closure-compiler
Move (or create a symlink to) the closure compiler jar to
lib/closure/compiler.jar
. For example, in osx:
% mv ~/Downloads/compiler-latest/compiler.jar lib/closure/.
or
% ln -s /usr/local/Cellar/closure-compiler/20120917/libexec/build/compiler.jar lib/closure/.
Initialize google closure-tools submodule:
% git submodule init
% git submodule update
% npm install
The codebase is organized thus:
├── Gruntfile.coffee - the grunt task file
├── README.md - this file
├── build - the build directory, for compiled code
├── coffee - coffeescript code
│ ├── src - coffeescript source files
│ └── test - coffeescript test files
├── js - javascript code (generated from coffee/)
│ ├── deps.js - generated dependencies file (closure)
│ ├── src - javascript source files
│ └── test - javascript test files
├── lib - libraries
│ ├── bootstrap - bootstrap js/css library
│ └── closure - closure library + compiler
├── node_modules - npm installed modules
└── package.json - package info
Available tasks (ignore others):
coffee Compile CoffeeScript files (coffee/ to js/)
deps Generates file dependencies (js/deps.js)
test Runs jasmine tests in the commandline.
testserver Runs jasmine tests in a webserver.
compile Closure compiles the source (js/src/).
default Alias for "compile" task.
watch Watches coffee/ and re-runs "deps"
clean Clear files and folders (js/, build/)
Common workflow:
- write code in
coffee/src/
- write corresponding tests in
coffee/test/
- test with
grunt --config Gruntfile.coffee test
- test with
grunt --config Gruntfile.coffee testserver
- compile code with
grunt --config Gruntfile.coffee compile
Write your jasmine specs in the test
part of the source tree. Your test
directory should mirror your src
directory, with every filename.{coffee,js}
having a corresponding filename.spec.{coffee,js}
. This one-to-one test
to src
correspondence:
- makes sure you do write a
test
file for everysrc
file. - easily identifies and properly scopes spec files, for simpler debugging.
For example, in coffeescript:
coffee
├── src
│ ├── hello.coffee
│ └── main.coffee
└── test
├── hello.spec.coffee
└── main.spec.coffee
And in javascript:
js
├── deps.js
├── src
│ ├── hello.js
│ └── main.js
└── test
├── hello.spec.js
└── main.spec.js
You can run the tests from the commandline (using phantomjs):
grunt --config Gruntfile.coffee test
You can run the tests from the commandline (using phantomjs):
grunt --config Gruntfile.coffee testserver
athena.lib.js is built on top of the Saucer boilerplate. See the Saucer documentation for more details about the toolchain and build system.