Bug 1307884 - Implement tests; r=bgrins draft
authorJan Odvarko <odvarko@gmail.com>
Mon, 22 May 2017 19:59:28 +0200
changeset 582481 1cbcc672d29b0350645f4decb18fe8c55385a331
parent 582480 31e80ce3ea2dc3734a01a83e8871607d79fa3020
child 629795 a924da23a827a0c7b4fabe0f3575eeef429550cd
push id60109
push userjodvarko@mozilla.com
push dateMon, 22 May 2017 18:06:18 +0000
reviewersbgrins
bugs1307884
milestone55.0a1
Bug 1307884 - Implement tests; r=bgrins MozReview-Commit-ID: KdYSPciSvJk
devtools/client/webconsole/new-console-output/test/helpers.js
devtools/client/webconsole/new-console-output/test/store/messages.test.js
devtools/client/webconsole/new-console-output/test/store/release-actors.test.js
--- a/devtools/client/webconsole/new-console-output/test/helpers.js
+++ b/devtools/client/webconsole/new-console-output/test/helpers.js
@@ -26,18 +26,18 @@ function setupActions() {
   };
 
   return wrappedActions;
 }
 
 /**
  * Prepare the store for use in testing.
  */
-function setupStore(input) {
-  const store = configureStore();
+function setupStore(input, hud) {
+  const store = configureStore(hud);
 
   // Add the messages from the input commands to the store.
   input.forEach((cmd) => {
     store.dispatch(actions.messageAdd(stubPackets.get(cmd)));
   });
 
   return store;
 }
--- a/devtools/client/webconsole/new-console-output/test/store/messages.test.js
+++ b/devtools/client/webconsole/new-console-output/test/store/messages.test.js
@@ -97,28 +97,74 @@ describe("Message reducer:", () => {
       ]);
 
       dispatch(actions.messagesClear());
 
       const messages = getAllMessages(getState());
       expect(messages.size).toBe(0);
     });
 
-    it("limits the number of messages displayed", () => {
+    it("properly limits number of messages", () => {
       const { dispatch, getState } = setupStore([]);
 
       const logLimit = 1000;
       const packet = clonePacket(stubPackets.get("console.log(undefined)"));
-      for (let i = 1; i <= logLimit + 1; i++) {
+
+      for (let i = 1; i <= logLimit + 2; i++) {
         packet.message.arguments = [`message num ${i}`];
         dispatch(actions.messageAdd(packet));
       }
 
       const messages = getAllMessages(getState());
       expect(messages.count()).toBe(logLimit);
+      expect(messages.first().parameters[0]).toBe(`message num 3`);
+      expect(messages.last().parameters[0]).toBe(`message num ${logLimit + 2}`);
+    });
+
+    it("properly limits number of groups", () => {
+      const { dispatch, getState } = setupStore([]);
+
+      const logLimit = 1000;
+
+      const packet = clonePacket(stubPackets.get("console.log(undefined)"));
+      const packetGroup = clonePacket(stubPackets.get("console.group('bar')"));
+      const packetGroupEnd = clonePacket(stubPackets.get("console.groupEnd()"));
+
+      for (let i = 0; i < logLimit + 2; i++) {
+        packet.message.arguments = [`message num ${i}`];
+        dispatch(actions.messageAdd(packetGroup));
+        dispatch(actions.messageAdd(packet));
+        dispatch(actions.messageAdd(packetGroupEnd));
+      }
+
+      const messages = getAllMessages(getState());
+      expect(messages.count()).toBe(logLimit * 2);
+      expect(messages.get(1).parameters[0]).toBe(`message num 2`);
+      expect(messages.last().parameters[0]).toBe(`message num ${logLimit + 1}`);
+    });
+
+    it("properly limits number of collapsed groups", () => {
+      const { dispatch, getState } = setupStore([]);
+
+      const logLimit = 1000;
+
+      const packet = clonePacket(stubPackets.get("console.log(undefined)"));
+      const packetGroupCollapsed = clonePacket(
+        stubPackets.get("console.groupCollapsed('foo')"));
+      const packetGroupEnd = clonePacket(stubPackets.get("console.groupEnd()"));
+
+      for (let i = 0; i < logLimit + 2; i++) {
+        packetGroupCollapsed.message.arguments = [`message num ${i}`];
+        dispatch(actions.messageAdd(packetGroupCollapsed));
+        dispatch(actions.messageAdd(packet));
+        dispatch(actions.messageAdd(packetGroupEnd));
+      }
+
+      const messages = getAllMessages(getState());
+      expect(messages.count()).toBe(logLimit);
       expect(messages.first().parameters[0]).toBe(`message num 2`);
       expect(messages.last().parameters[0]).toBe(`message num ${logLimit + 1}`);
     });
 
     it("does not add null messages to the store", () => {
       const { dispatch, getState } = setupStore([]);
 
       const message = stubPackets.get("console.time('bar')");
@@ -181,38 +227,16 @@ describe("Message reducer:", () => {
 
       dispatch(actions.messageAdd(
         stubPackets.get("console.log('foobar', 'test')")));
 
       const messages = getAllMessages(getState());
       expect(messages.size).toBe(1);
     });
 
-    it("shows the group of the first displayed message when messages are pruned", () => {
-      const { dispatch, getState } = setupStore([]);
-
-      const logLimit = 1000;
-
-      const groupMessage = stubPreparedMessages.get("console.group('bar')");
-      dispatch(actions.messageAdd(
-        stubPackets.get("console.group('bar')")));
-
-      const packet = clonePacket(stubPackets.get("console.log(undefined)"));
-      for (let i = 1; i <= logLimit + 1; i++) {
-        packet.message.arguments = [`message num ${i}`];
-        dispatch(actions.messageAdd(packet));
-      }
-
-      const messages = getAllMessages(getState());
-      expect(messages.count()).toBe(logLimit);
-      expect(messages.first().messageText).toBe(groupMessage.messageText);
-      expect(messages.get(1).parameters[0]).toBe(`message num 3`);
-      expect(messages.last().parameters[0]).toBe(`message num ${logLimit + 1}`);
-    });
-
     it("adds console.dirxml call as console.log", () => {
       const { dispatch, getState } = setupStore([]);
 
       const packet = stubPackets.get("console.dirxml(window)");
       dispatch(actions.messageAdd(packet));
 
       const messages = getAllMessages(getState());
       const dirxmlMessage = messages.last();
new file mode 100644
--- /dev/null
+++ b/devtools/client/webconsole/new-console-output/test/store/release-actors.test.js
@@ -0,0 +1,61 @@
+/* Any copyright is dedicated to the Public Domain.
+   http://creativecommons.org/publicdomain/zero/1.0/ */
+"use strict";
+
+const {
+  setupActions,
+  setupStore,
+  clonePacket
+} = require("devtools/client/webconsole/new-console-output/test/helpers");
+const { stubPackets } = require("devtools/client/webconsole/new-console-output/test/fixtures/stubs/index");
+
+const expect = require("expect");
+
+describe("Release actor enhancer:", () => {
+  let actions;
+
+  before(() => {
+    actions = setupActions();
+  });
+
+  describe("Client proxy", () => {
+    it("properly releases backend actors when limit is reached", () => {
+      let proxyExecuted = 0;
+      const { dispatch } = setupStore([], {
+        proxy: {
+          releaseActor: (actor) => {
+            proxyExecuted++;
+          }
+        }
+      });
+
+      const logCount = 1001;
+      const packet = clonePacket(stubPackets.get(
+        "console.assert(false, {message: 'foobar'})"));
+
+      for (let i = 1; i <= logCount; i++) {
+        packet.message.arguments.push(`message num ${i}`);
+        dispatch(actions.messageAdd(packet));
+      }
+
+      expect(proxyExecuted).toBe(1);
+    });
+
+    it("properly releases backend actors after clear", () => {
+      let proxyExecuted = 0;
+      const { dispatch } = setupStore([], {
+        proxy: {
+          releaseActor: (actor) => {
+            proxyExecuted++;
+          }
+        }
+      });
+
+      dispatch(actions.messageAdd(clonePacket(stubPackets.get(
+        "console.assert(false, {message: 'foobar'})"))));
+      dispatch(actions.messagesClear());
+
+      expect(proxyExecuted).toBe(1);
+    });
+  });
+});