summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAlon Levy <alon@pobox.com>2015-08-09 19:38:49 +0300
committerAlon Levy <alon@pobox.com>2015-08-09 19:45:06 +0300
commitaafc58c9e15143dd5239950340579efee5c95979 (patch)
tree1ae5625a7049890f54c783126a4784f4a1578fdd
parent3b0ec2629ebee58e2b49c614d8addf2e5da23e1c (diff)
initial tests based on karma + jasmine, run with karma start
-rw-r--r--README.md11
-rw-r--r--karma.conf.js69
-rw-r--r--package.json17
-rw-r--r--src/client/test-main.js53
-rw-r--r--src/client/util_test.js12
5 files changed, 161 insertions, 1 deletions
diff --git a/README.md b/README.md
index f5fb95b2..216ecc92 100644
--- a/README.md
+++ b/README.md
@@ -60,6 +60,10 @@ use pip to install all requirements
$ pip install flask
$ pip install gevent-socketio
+Use npm for javascript (client) requirements, currently for development (testing) only, all other external dependencies are part of the repository:
+
+ $ npm install
+
# Running instructions
## Running Rhizi Locally
To run Rhizi locally:
@@ -97,6 +101,11 @@ To update the css files you need [sass](http://sass-lang.com/). To rebuild the c
For dev mode(debbuging, manual file load) use `?debug=1` at end of URL: e.g. `file://rhizifolder/html.index?debug=1`
+Client testing:
+
+ $ npm install
+ $ karma start
+
## Coding Conventions - Ant Scripts
- use underscore as delimiter in var name, eg: <code>pkg_foo_bar</code>
@@ -194,4 +203,4 @@ rz-doc --list-names
creates a new doc called "All Documents" with the contents of all rzdocs in merge.file.
## API(WIP)
-[url]/api/rzdoc/[doc-title]/delete \ No newline at end of file
+[url]/api/rzdoc/[doc-title]/delete
diff --git a/karma.conf.js b/karma.conf.js
new file mode 100644
index 00000000..3f3e0c46
--- /dev/null
+++ b/karma.conf.js
@@ -0,0 +1,69 @@
+// Karma configuration
+// Generated on Sun Aug 09 2015 18:42:14 GMT+0300 (IDT)
+
+module.exports = function(config) {
+ config.set({
+
+ // base path that will be used to resolve all patterns (eg. files, exclude)
+ basePath: '',
+
+
+ // frameworks to use
+ // available frameworks: https://npmjs.org/browse/keyword/karma-adapter
+ frameworks: ['jasmine', 'requirejs'],
+
+
+ // list of files / patterns to load in the browser
+ files: [
+ 'src/client/test-main.js',
+ {pattern: 'res/client/**/*.js', included: false},
+ {pattern: 'src/client/**/*.js', included: false},
+ ],
+
+
+ // list of files to exclude
+ exclude: [
+ 'src/client/main.js',
+ 'src/client/app.js'
+ ],
+
+
+ // preprocess matching files before serving them to the browser
+ // available preprocessors: https://npmjs.org/browse/keyword/karma-preprocessor
+ preprocessors: {
+ },
+
+
+ // test results reporter to use
+ // possible values: 'dots', 'progress'
+ // available reporters: https://npmjs.org/browse/keyword/karma-reporter
+ reporters: ['progress'],
+
+
+ // web server port
+ port: 9876,
+
+
+ // enable / disable colors in the output (reporters and logs)
+ colors: true,
+
+
+ // level of logging
+ // possible values: config.LOG_DISABLE || config.LOG_ERROR || config.LOG_WARN || config.LOG_INFO || config.LOG_DEBUG
+ logLevel: config.LOG_DEBUG,
+
+
+ // enable / disable watching file and executing tests whenever any file changes
+ autoWatch: true,
+
+
+ // start these browsers
+ // available browser launchers: https://npmjs.org/browse/keyword/karma-launcher
+ browsers: ['Chrome'],
+
+
+ // Continuous Integration mode
+ // if true, Karma captures browsers, runs the tests and exits
+ singleRun: false
+ })
+}
diff --git a/package.json b/package.json
new file mode 100644
index 00000000..c5ef3137
--- /dev/null
+++ b/package.json
@@ -0,0 +1,17 @@
+{
+ "name": "Rhizi",
+ "description": "Collaborative graph editor",
+ "license": "AGPL version 3.0",
+ "repository": "https://github.com/Rhizi/rhizi.git",
+ "version": "0.0.1",
+ "dependencies": {},
+ "devDependencies": {
+ "karma": "~0.13",
+ "jasmine": "~2.3.*",
+ "jasmine-core": "~2.3.4",
+ "karma-jasmine": "~0.3.6",
+ "requirejs": "~2.1.20",
+ "karma-requirejs": "~0.2.2",
+ "karma-chrome-launcher": "~0.2.0"
+ }
+}
diff --git a/src/client/test-main.js b/src/client/test-main.js
new file mode 100644
index 00000000..c12f18b8
--- /dev/null
+++ b/src/client/test-main.js
@@ -0,0 +1,53 @@
+var allTestFiles = [];
+var TEST_REGEXP = /(spec|test)\.js$/i;
+
+// Get a list of all the test files to include
+Object.keys(window.__karma__.files).forEach(function(file) {
+ if (TEST_REGEXP.test(file)) {
+ // Normalize paths to RequireJS module names.
+ // If you require sub-dependencies of test files to be loaded as-is (requiring file extension)
+ // then do not normalize the paths
+ var normalizedTestModule = file.replace(/^\/base\/|\.js$/g, '');
+ allTestFiles.push(normalizedTestModule);
+ }
+});
+
+var lib_path = '/base/res/client/lib/';
+
+require.config({
+ // Karma serves files under /base, which is the basePath from your config file
+ baseUrl: '/base',
+
+ shim: {
+ 'socketio': { exports: 'io' },
+ 'Bacon': {
+ deps: ['jquery'],
+ exports: 'Bacon',
+ }
+ },
+
+ paths: {
+ util: '/base/src/client/util',
+ stam: '/base/src/client/stam',
+
+ // libraries paths
+ autocomplete: lib_path + 'autocomplete',
+ Bacon: lib_path + 'Bacon',
+ caret: lib_path + 'caret',
+ cola: lib_path + 'cola',
+ domain_types: 'res/local/js/domain_types',
+ d3: lib_path + 'd3/d3',
+ feedback: lib_path + 'feedback',
+ FileSaver: lib_path + 'FileSaver',
+ html2canvas: lib_path + 'html2canvas',
+ jquery: lib_path + 'jquery',
+ socketio: lib_path + 'socket.io/socket.io.min_0.9.10',
+ underscore: lib_path + 'underscore',
+ },
+
+ // dynamically load all test files
+ deps: allTestFiles,
+
+ // we have to kickoff jasmine, as it is asynchronous
+ callback: window.__karma__.start
+});
diff --git a/src/client/util_test.js b/src/client/util_test.js
new file mode 100644
index 00000000..2477aaa2
--- /dev/null
+++ b/src/client/util_test.js
@@ -0,0 +1,12 @@
+define(['util'], function(util) {
+ describe("set from object", function () {
+ it("set from object", function() {
+ expect(util.set_from_object({1:1, 2:2})).toEqual({1:1, 2:1});
+ expect(util.set_from_object({})).toEqual({});
+ });
+ it("set from array", function() {
+ expect(util.set_from_array([1, 2])).toEqual({1:1, 2:1});
+ expect(util.set_from_array([])).toEqual({});
+ });
+ });
+})