diff options
Diffstat (limited to 'example')
| -rw-r--r-- | example/personalLog/personalLog.html | 28 | ||||
| -rw-r--r-- | example/personalLog/personalLog.js | 60 | ||||
| -rw-r--r-- | example/personalLog/test/personalLogSpec.js | 122 | 
3 files changed, 210 insertions, 0 deletions
| diff --git a/example/personalLog/personalLog.html b/example/personalLog/personalLog.html new file mode 100644 index 00000000..85a177e9 --- /dev/null +++ b/example/personalLog/personalLog.html @@ -0,0 +1,28 @@ +<!doctype html> +<html xmlns:ng="http://angularjs.org"> +  <head> +    <title>Personal Log</title> +    <script type="text/javascript" src="../../src/angular-bootstrap.js" ng:autobind></script> +    <script type="text/javascript" src="personalLog.js"></script> +  </head> + +   +  <body ng:controller="example.personalLog.LogCtrl"> + +    <form action="" ng:submit="addLog(newMsg)"> +      <input type="text" name="newMsg" /> +      <input type="submit" value="add" /> +      <input type="button" value="remove all" ng:click="rmLogs()" /> +    </form> + +    <hr/> +    <h2>Logs:</h2> +    <ul> +      <li ng:repeat="log in logs"> +        {{log.at | date:'yy-MM-dd HH:mm'}} {{log.msg}} +        [<a href="" ng:click="rmLog($index)">x</a>] +      </li> +    </ul> + +  </body> +</html>
\ No newline at end of file diff --git a/example/personalLog/personalLog.js b/example/personalLog/personalLog.js new file mode 100644 index 00000000..dbd0956f --- /dev/null +++ b/example/personalLog/personalLog.js @@ -0,0 +1,60 @@ +//app namespace +var example = {}; +example.personalLog = {}; + + +//name space isolating closure +(function() { + +var LOGS = 'logs'; + +/** + * The controller for the personal log app. + */ +function LogCtrl($cookieStore) { +  var self = this, +      logs = self.logs = $cookieStore.get(LOGS) || []; + + +  /** +   * Adds newMsg to the logs array as a log, persists it and clears newMsg. +   */ +  this.addLog = function(msg) { +    var newMsg = msg || self.newMsg; +    if (!newMsg) return; +    var log = { +      at: new Date().getTime(), +      msg: newMsg +    } + +    logs.push(log); +    $cookieStore.put(LOGS, logs); +    self.newMsg = ''; +  } + + +  /** +   * Persistently removes a log from logs. +   * @param {number} msgIdx Index of the log to remove. +   */ +  this.rmLog = function(msgIdx) { +    logs.splice(msgIdx,1); +    $cookieStore.put(LOGS, logs); +  } + + +  /** +   * Persistently removes all logs. +   */ +  this.rmLogs = function() { +    logs.splice(0); +    $cookieStore.remove(LOGS); +  } +} + +//inject +LogCtrl.$inject = ['$cookieStore']; + +//export +example.personalLog.LogCtrl = LogCtrl; +})();
\ No newline at end of file diff --git a/example/personalLog/test/personalLogSpec.js b/example/personalLog/test/personalLogSpec.js new file mode 100644 index 00000000..f111aba4 --- /dev/null +++ b/example/personalLog/test/personalLogSpec.js @@ -0,0 +1,122 @@ +describe('example.personalLog.LogCtrl', function() { +  var logCtrl; + +  function createNotesCtrl() { +    var scope = angular.scope(); +    return scope.$new(example.personalLog.LogCtrl); +  } + + +  beforeEach(function() { +    logCtrl = createNotesCtrl(); +  }); +   + +  it('should initialize notes with an empty array', function() { +    expect(logCtrl.logs).toEqual([]); +  }); + + +  describe('addLog', function() { + +    beforeEach(function() { +      expect(logCtrl.logs).toEqual([]); +    }); + + +    it('should add newMsg to logs as a log entry', function() { +      logCtrl.newMsg = 'first log message'; +      logCtrl.addLog(); +       +      expect(logCtrl.logs.length).toBe(1); +      expect(logCtrl.logs[0].msg).toBe('first log message'); + +      //one more msg, this time passed in as param +      logCtrl.addLog('second log message'); + +      expect(logCtrl.logs.length).toBe(2); +      expect(logCtrl.logs[0].msg).toBe('first log message'); +      expect(logCtrl.logs[1].msg).toBe('second log message'); +    }); + + +    it('should clear newMsg when log entry is persisted', function() { +      logCtrl.addLog('first log message'); +      expect(logCtrl.newMsg).toBe(''); +    }); + + +    it('should store logs in the logs cookie', function() { +      expect(logCtrl.$cookies.logs).not.toBeDefined(); +      logCtrl.addLog('first log message'); +      expect(logCtrl.$cookies.logs).toBeTruthy(); +    }); + + +    it('should do nothing if newMsg is empty', function() { +      logCtrl.addLog(''); +      expect(logCtrl.logs.length).toBe(0); +    }); +  }); + + +  describe('rmLog', function() { + +    beforeEach(function() { +      logCtrl.addLog('message1'); +      logCtrl.addLog('message2'); +      logCtrl.addLog('message3'); +      logCtrl.addLog('message4'); +      expect(logCtrl.logs.length).toBe(4); +    }); + + +    it('should delete a message identified by index', function() { +      logCtrl.rmLog(1); +      expect(logCtrl.logs.length).toBe(3); + +      logCtrl.rmLog(2); +      expect(logCtrl.logs.length).toBe(2); +      expect(logCtrl.logs[0].msg).toBe('message1'); +      expect(logCtrl.logs[1].msg).toBe('message3'); +    }); + + +    it('should update cookies when a log is deleted', function() { +      expect(logCtrl.$cookies.logs).toMatch(/\[\{.*?\}(,\{.*?\}){3}\]/); + +      logCtrl.rmLog(1); +      expect(logCtrl.$cookies.logs).toMatch(/\[\{.*?\}(,\{.*?\}){2}\]/); + +      logCtrl.rmLog(0); +      logCtrl.rmLog(0); +      logCtrl.rmLog(0); +      expect(logCtrl.$cookies.logs).toMatch(/\[\]/); +    }); +  }); + + +  describe('rmLogs', function() { + +    beforeEach(function() { +      logCtrl.addLog('message1'); +      logCtrl.addLog('message2'); +      logCtrl.addLog('message3'); +      logCtrl.addLog('message4'); +      expect(logCtrl.logs.length).toBe(4); +    }); + + +    it('should remove all logs', function() { +      logCtrl.rmLogs(); +      expect(logCtrl.logs).toEqual([]); +    }); + + +    it('should remove logs cookie', function() { +      expect(logCtrl.$cookies.logs).toBeTruthy(); +      logCtrl.rmLogs(); +      expect(logCtrl.$cookies.logs).not.toBeDefined(); +    }); +  }); +});
\ No newline at end of file | 
