GUI - Angular:: added angular-mocks.js to tp lib.
- sample code plus sample unit test, and karma configuration file.

Change-Id: I0c5d867913c88e12eacd17934c6f42226b82410f
diff --git a/web/gui/src/test/_karma/karma.conf.js b/web/gui/src/test/_karma/karma.conf.js
new file mode 100644
index 0000000..fae8b72
--- /dev/null
+++ b/web/gui/src/test/_karma/karma.conf.js
@@ -0,0 +1,68 @@
+// Karma configuration
+// Generated on Tue Dec 09 2014 10:41:03 GMT-0800 (PST)
+
+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'],
+
+
+    // list of files / patterns to load in the browser
+    files: [
+        '../../main/webapp/tp/angular.min.js',
+        '../../main/webapp/tp/angular-mocks.js',
+        '../../main/webapp/_sdh/ng-examples/js/*.js',
+        '../webapp/_sdh/ng-examples/js/*.js'
+    ],
+
+
+    // list of files to exclude
+    exclude: [
+    ],
+
+
+    // 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_INFO,
+
+
+    // 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/web/gui/src/test/webapp/_sdh/ng-examples/js/ch03-controllerSpec.js b/web/gui/src/test/webapp/_sdh/ng-examples/js/ch03-controllerSpec.js
new file mode 100644
index 0000000..b2d4947
--- /dev/null
+++ b/web/gui/src/test/webapp/_sdh/ng-examples/js/ch03-controllerSpec.js
@@ -0,0 +1,35 @@
+// Jasmine unit tests for ch03-controller.js
+
+describe('Controller: ListCtrl', function () {
+    // instantiate a new version of my module before each test
+    beforeEach(module('notesApp'));
+
+    var ctrl;
+
+    // before each unit test, instantiate a new instance of the controller
+    beforeEach(inject(function ($controller) {
+        ctrl = $controller('ListCtrl');
+    }));
+
+    it('should have items available on load', function () {
+        expect(ctrl.items).toEqual([
+            {id: 1, label: 'First', done: true},
+            {id: 2, label: 'Second', done: false}
+        ]);
+    });
+
+    it('should have highlight items based on state', function () {
+        var item = {id: 1, label: 'First', done: true};
+
+        var actualClass = ctrl.getDoneClass(item);
+        expect(actualClass.finished).toBeTruthy();
+        expect(actualClass.unfinished).toBeFalsy();
+
+        item.done = false;
+
+        actualClass = ctrl.getDoneClass(item);
+        expect(actualClass.finished).toBeFalsy();
+        expect(actualClass.unfinished).toBeTruthy();
+    });
+
+});
\ No newline at end of file