From 5b40e87ac687fc52ba86f39daf62975b169acf41 Mon Sep 17 00:00:00 2001
From: Igor Minar
Date: Fri, 22 Oct 2010 22:13:14 -0700
Subject: personalLog demo - initial version with spec
---
example/personalLog/personalLog.html | 28 +++++++
example/personalLog/personalLog.js | 60 ++++++++++++++
example/personalLog/test/personalLogSpec.js | 122 ++++++++++++++++++++++++++++
3 files changed, 210 insertions(+)
create mode 100644 example/personalLog/personalLog.html
create mode 100644 example/personalLog/personalLog.js
create mode 100644 example/personalLog/test/personalLogSpec.js
(limited to 'example')
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 @@
+
+
+
+ Personal Log
+
+
+
+
+
+
+
+
+
+
+ Logs:
+
+ -
+ {{log.at | date:'yy-MM-dd HH:mm'}} {{log.msg}}
+ [x]
+
+
+
+
+
\ 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
--
cgit v1.2.3