describe("whiteboard", function() {
  var _ = whiteboard;
  describe("events", function() {
    describe("#on", function() {
      it("binds a function to an event", function() {
        var called = false;
        _.on("StrokeAction.focus.complete", function(){
          called = true;
        });
        _.emit('StrokeAction.focus.complete');
        expect(called).to.be(true);
      });
      it("allows wildcard event registration", function() {
        var called = false;
        _.on("StrokeAction.*.complete", function() {
          called = true;
        });
        _.emit('StrokeAction.asdfasdf.complete');
        expect(called).to.be(true);
      });
    });

    describe("#off", function() {
      it("unbinds a funtion from an event", function() {
        var called = false;
        function myFun(){
          called = true;
        };
        _.on("StrokeAction.focus.complete", myFun);
        _.emit('StrokeAction.focus.complete');
        expect(called).to.be(true);
        called = false;
        _.off("StrokeAction.focus.complete", myFun);
        _.emit("StrokeAction.focus.complete");
        expect(called).to.be(false);
      });
    });
  });

  describe("attributes", function() {
    describe("activeCanvas", function() {
      it("stores a reference to the canvas that is currently being manipulated", function() {
        _.hasOwnProperty("activeCanvas");
        //TODO: flesh out this concept
      });
      
      it("listens for new brush strokes to add to the active canvas", function() {
        
      });
    });
  });

});

@@ -77,32 +77,63 @@
 %22, function() %7B%0A
+    var stroke = %7Bid: %22hey%22%7D;%0A%0A
     describe(%22#o
@@ -360,32 +360,50 @@
 .focus.complete'
+, %7Bstroke: stroke%7D
 );%0A        expec
@@ -431,24 +431,25 @@
 ;%0A      %7D);%0A
+%0A
       it(%22al
@@ -653,32 +653,50 @@
 dfasdf.complete'
+, %7Bstroke: stroke%7D
 );%0A        expec
@@ -719,32 +719,422 @@
 true);%0A      %7D);
+%0A%0A      it(%22allows OR regex conditions%22, function() %7B%0A        var called = false;%0A        _.on(%22(this%7Cthat).*.complete%22, function() %7B%0A          called = true;%0A        %7D);%0A%0A        _.emit(%22this.what.complete%22, %7Bstroke: stroke%7D);%0A        expect(called).to.be(true);%0A%0A        called = false;%0A        _.emit(%22that.why.complete%22, %7Bstroke: stroke%7D);%0A        expect(called).to.be(true);%0A%0A      %7D);
 %0A    %7D);%0A%0A    de
@@ -1404,16 +1404,34 @@
 omplete'
+, %7Bstroke: stroke%7D
 );%0A     
@@ -1582,16 +1582,34 @@
 omplete%22
+, %7Bstroke: stroke%7D
 );%0A     
@@ -1681,17 +1681,16 @@
 be(%22
-attribute
+function
 s%22, 
@@ -1716,27 +1716,29 @@
 scribe(%22
-activeCanva
+initSubmodule
 s%22, func
@@ -1760,281 +1760,295 @@
 it(%22
-stores a reference to the canvas that is currently being manipulated%22, function() %7B%0A        _.hasOwnProperty(%22activeCanvas%22);%0A        //TODO: flesh out this concept%0A      %7D);
+calls init for each submodule%22, function() %7B%0A        var called = false,%0A        module = %7B%0A          Submodule: %7B%0A            init: function() %7B%0A              called = true;%0A            %7D
 %0A      
+    %7D
 %0A      
-it(%22listens for new brush strokes to add to the active canvas%22, function() %7B%0A        
+  %7D;%0A        _.initSubmodules.apply(module);%0A        expect(called).to.be(true);
 %0A   

add stroke mock to whiteboard test, also test event regex OR case