mirror of
https://github.com/Hopiu/postal.js.git
synced 2026-03-16 22:20:23 +00:00
Adding more tests
This commit is contained in:
parent
8c9ab450dc
commit
e5d08bac53
12 changed files with 250 additions and 63 deletions
|
|
@ -174,15 +174,6 @@ SubscriptionDefinition.prototype = {
|
|||
}
|
||||
var fn = this.callback;
|
||||
this.callback = _.debounce(fn, milliseconds);
|
||||
/*this.callback = (function(){
|
||||
var debounced;
|
||||
return function(data) {
|
||||
if(!debounced) {
|
||||
debounced = _.debounce(function() { fn(data); }, milliseconds);
|
||||
}
|
||||
debounced();
|
||||
};
|
||||
})();*/
|
||||
return this;
|
||||
},
|
||||
|
||||
|
|
|
|||
|
|
@ -174,15 +174,6 @@ SubscriptionDefinition.prototype = {
|
|||
}
|
||||
var fn = this.callback;
|
||||
this.callback = _.debounce(fn, milliseconds);
|
||||
/*this.callback = (function(){
|
||||
var debounced;
|
||||
return function(data) {
|
||||
if(!debounced) {
|
||||
debounced = _.debounce(function() { fn(data); }, milliseconds);
|
||||
}
|
||||
debounced();
|
||||
};
|
||||
})();*/
|
||||
return this;
|
||||
},
|
||||
|
||||
|
|
|
|||
Binary file not shown.
|
|
@ -174,15 +174,6 @@ SubscriptionDefinition.prototype = {
|
|||
}
|
||||
var fn = this.callback;
|
||||
this.callback = _.debounce(fn, milliseconds);
|
||||
/*this.callback = (function(){
|
||||
var debounced;
|
||||
return function(data) {
|
||||
if(!debounced) {
|
||||
debounced = _.debounce(function() { fn(data); }, milliseconds);
|
||||
}
|
||||
debounced();
|
||||
};
|
||||
})();*/
|
||||
return this;
|
||||
},
|
||||
|
||||
|
|
|
|||
Binary file not shown.
|
|
@ -164,15 +164,6 @@ SubscriptionDefinition.prototype = {
|
|||
}
|
||||
var fn = this.callback;
|
||||
this.callback = _.debounce(fn, milliseconds);
|
||||
/*this.callback = (function(){
|
||||
var debounced;
|
||||
return function(data) {
|
||||
if(!debounced) {
|
||||
debounced = _.debounce(function() { fn(data); }, milliseconds);
|
||||
}
|
||||
debounced();
|
||||
};
|
||||
})();*/
|
||||
return this;
|
||||
},
|
||||
|
||||
|
|
|
|||
|
|
@ -2,7 +2,7 @@
|
|||
"author": "Jim Cowart <jim@ifandelse.com> (http://ifandelse.com)",
|
||||
"name": "postal",
|
||||
"description": "Pub/Sub library providing wildcard subscriptions, complex message handling, etc. Works server and client-side.",
|
||||
"version": "0.4.0",
|
||||
"version": "0.6.0",
|
||||
"homepage": "http://github.com/ifandelse/postal.js",
|
||||
"repository": {
|
||||
"type": "git",
|
||||
|
|
|
|||
|
|
@ -16,5 +16,15 @@ QUnit.specify("postal.js", function(){
|
|||
assert(sub instanceof SubscriptionDefinition).isTrue();
|
||||
});
|
||||
});
|
||||
describe("When calling topic", function() {
|
||||
var ch = new ChannelDefinition("TestChannel", "TestTopic"),
|
||||
ch2 = ch.topic("TestTopic2");
|
||||
it("new channel should be of type ChannelDefinition", function(){
|
||||
assert(ch2 instanceof ChannelDefinition).isTrue();
|
||||
});
|
||||
it("new channel should have topic of TestTopic2", function(){
|
||||
assert(ch2._topic).equals("TestTopic2");
|
||||
});
|
||||
});
|
||||
});
|
||||
});
|
||||
|
|
@ -6,7 +6,7 @@ QUnit.specify("postal.js", function(){
|
|||
caughtSubscribeEvent = false,
|
||||
caughtUnsubscribeEvent = false;
|
||||
|
||||
describe("when creating basic subscription", function() {
|
||||
describe("When creating basic subscription", function() {
|
||||
var systemSubscription = {};
|
||||
before(function(){
|
||||
systemSubscription = postal.subscribe({
|
||||
|
|
@ -57,7 +57,7 @@ QUnit.specify("postal.js", function(){
|
|||
assert(caughtSubscribeEvent).isTrue();
|
||||
});
|
||||
});
|
||||
describe("when unsubscribing", function() {
|
||||
describe("When unsubscribing", function() {
|
||||
var subExistsBefore = false,
|
||||
subExistsAfter = true;
|
||||
var systemSubscription = {};
|
||||
|
|
@ -270,7 +270,7 @@ QUnit.specify("postal.js", function(){
|
|||
it("should have met expected results", function() {
|
||||
channel.publish("Testing123");
|
||||
results.push("first");
|
||||
wait(500, function(){
|
||||
wait(1, function(){
|
||||
assert(results[0]).equals("first");
|
||||
assert(results[1]).equals("second");
|
||||
});
|
||||
|
|
@ -340,7 +340,6 @@ QUnit.specify("postal.js", function(){
|
|||
}, 1500);
|
||||
}));
|
||||
});
|
||||
|
||||
describe("When subscribing with a hierarchical binding, no wildcards", function(){
|
||||
var count = 0, channelB, channelC;
|
||||
before(function(){
|
||||
|
|
@ -424,18 +423,22 @@ QUnit.specify("postal.js", function(){
|
|||
assert(count).equals(2);
|
||||
});
|
||||
});
|
||||
describe("When using shortcut publish api", function(){
|
||||
describe("When using global publish api", function(){
|
||||
var msgReceivedCnt = 0,
|
||||
msgData;
|
||||
before(function(){
|
||||
channel = postal.channel({ channel: "MyChannel", topic: "MyTopic" });
|
||||
channel = postal.channel({ channel: "MyGlobalChannel", topic: "MyTopic" });
|
||||
subscription = channel.subscribe(function(data) { msgReceivedCnt++; msgData = data;});
|
||||
postal.publish("MyChannel", "MyTopic", "Testing123");
|
||||
postal.publish("MyGlobalChannel", "MyTopic", "Testing123");
|
||||
subscription.unsubscribe();
|
||||
postal.publish("MyChannel", "MyTopic", "Testing123");
|
||||
postal.publish("MyGlobalChannel", "MyTopic", "Testing123");
|
||||
});
|
||||
after(function(){
|
||||
postal.reset();
|
||||
msgReceivedCnt = 0;
|
||||
});
|
||||
it("channel should be of type ChannelDefinition", function(){
|
||||
assert(channel instanceof ChannelDefinition).isTrue();
|
||||
});
|
||||
it("subscription callback should be invoked once", function(){
|
||||
assert(msgReceivedCnt).equals(1);
|
||||
|
|
@ -444,7 +447,7 @@ QUnit.specify("postal.js", function(){
|
|||
assert(msgData).equals("Testing123");
|
||||
});
|
||||
});
|
||||
describe("When using shortcut subscribe api", function(){
|
||||
describe("When using global subscribe api", function(){
|
||||
before(function(){
|
||||
subscription = postal.subscribe({
|
||||
channel: "MyChannel",
|
||||
|
|
@ -456,6 +459,9 @@ QUnit.specify("postal.js", function(){
|
|||
after(function(){
|
||||
postal.reset();
|
||||
});
|
||||
it("subscription should be of type SubscriptionDefinition", function(){
|
||||
assert(subscription instanceof SubscriptionDefinition).isTrue();
|
||||
});
|
||||
it("should create an channel called MyChannel", function(){
|
||||
assert(postal.configuration.bus.subscriptions["MyChannel"] !== undefined).isTrue();
|
||||
});
|
||||
|
|
@ -481,7 +487,82 @@ QUnit.specify("postal.js", function(){
|
|||
assert(sub.context).isNull();
|
||||
});
|
||||
});
|
||||
describe("when subscribing and unsubscribing a wire tap", function() {
|
||||
describe("When using global channel api", function(){
|
||||
var gch;
|
||||
describe("With no channel name provided", function(){
|
||||
describe("Using string argument", function(){
|
||||
before(function(){
|
||||
gch = postal.channel("SomeTopic");
|
||||
});
|
||||
after(function(){
|
||||
gch = undefined;
|
||||
});
|
||||
it("channel should be of type ChannelDefinition", function(){
|
||||
assert(gch instanceof ChannelDefinition).isTrue();
|
||||
});
|
||||
it("should set channel name to DEFAULT_CHANNEL", function(){
|
||||
assert(gch.channel).equals(DEFAULT_CHANNEL);
|
||||
});
|
||||
it("should set topic to SomeTopic", function(){
|
||||
assert(gch._topic).equals("SomeTopic");
|
||||
});
|
||||
});
|
||||
describe("Using options (object) argument", function(){
|
||||
before(function(){
|
||||
gch = postal.channel({ topic: "SomeTopic" });
|
||||
});
|
||||
after(function(){
|
||||
gch = undefined;
|
||||
});
|
||||
it("channel should be of type ChannelDefinition", function(){
|
||||
assert(gch instanceof ChannelDefinition).isTrue();
|
||||
});
|
||||
it("should set channel name to DEFAULT_CHANNEL", function(){
|
||||
assert(gch.channel).equals(DEFAULT_CHANNEL);
|
||||
});
|
||||
it("should set topic to SomeTopic", function(){
|
||||
assert(gch._topic).equals("SomeTopic");
|
||||
});
|
||||
});
|
||||
});
|
||||
describe("With channel name provided", function(){
|
||||
describe("Using string arguments", function() {
|
||||
before(function(){
|
||||
gch = postal.channel("SomeChannel", "SomeTopic");
|
||||
});
|
||||
after(function(){
|
||||
gch = undefined;
|
||||
});
|
||||
it("channel should be of type ChannelDefinition", function(){
|
||||
assert(gch instanceof ChannelDefinition).isTrue();
|
||||
});
|
||||
it("should set channel name to SomeChannel", function(){
|
||||
assert(gch.channel).equals("SomeChannel");
|
||||
});
|
||||
it("should set topic to SomeTopic", function(){
|
||||
assert(gch._topic).equals("SomeTopic");
|
||||
});
|
||||
});
|
||||
describe("Using options (object) argument", function() {
|
||||
before(function(){
|
||||
gch = postal.channel({ channel: "SomeChannel", topic: "SomeTopic" });
|
||||
});
|
||||
after(function(){
|
||||
gch = undefined;
|
||||
});
|
||||
it("channel should be of type ChannelDefinition", function(){
|
||||
assert(gch instanceof ChannelDefinition).isTrue();
|
||||
});
|
||||
it("should set channel name to SomeChannel", function(){
|
||||
assert(gch.channel).equals("SomeChannel");
|
||||
});
|
||||
it("should set topic to SomeTopic", function(){
|
||||
assert(gch._topic).equals("SomeTopic");
|
||||
});
|
||||
});
|
||||
});
|
||||
});
|
||||
describe("When subscribing and unsubscribing a wire tap", function() {
|
||||
var wireTapData,
|
||||
wireTapEnvelope,
|
||||
wiretap;
|
||||
|
|
@ -512,7 +593,7 @@ QUnit.specify("postal.js", function(){
|
|||
assert(wireTapEnvelope[0].topic).equals("Oh.Hai.There");
|
||||
});
|
||||
});
|
||||
describe("when binding channel - one source to one destination", function(){
|
||||
describe("When binding channel - one source to one destination", function(){
|
||||
describe("with only channel values provided", function(){
|
||||
var destData = [],
|
||||
destEnv = [],
|
||||
|
|
@ -601,5 +682,36 @@ QUnit.specify("postal.js", function(){
|
|||
});
|
||||
});
|
||||
});
|
||||
describe("When calling postal.reset", function(){
|
||||
var resolver;
|
||||
before(function(){
|
||||
postal.reset();
|
||||
subscription = postal.channel({ channel: "MyChannel", topic: "MyTopic" }).subscribe(function() { });
|
||||
postal.channel({ channel: "MyChannel", topic: "MyTopic" }).publish("Oh Hai!");
|
||||
sub = postal.configuration.bus.subscriptions.MyChannel.MyTopic[0];
|
||||
resolver = postal.configuration.resolver.cache["MyTopic"];
|
||||
postal.reset();
|
||||
});
|
||||
after(function(){
|
||||
});
|
||||
it("should have created a subscription definition", function() {
|
||||
assert(sub.channel).equals("MyChannel");
|
||||
assert(sub.topic).equals("MyTopic");
|
||||
assert(sub.priority).equals(50);
|
||||
assert(sub.constraints.length).equals(0);
|
||||
assert(sub.maxCalls).equals(0);
|
||||
assert(sub.context).isNull();
|
||||
});
|
||||
it("should have created a resolver cache entry", function(){
|
||||
assert(_.isEmpty(resolver)).isFalse();
|
||||
assert(resolver["MyTopic"]).isTrue();
|
||||
});
|
||||
it("subscriptions cache should now be empty", function() {
|
||||
assert(_.isEmpty(postal.configuration.bus.subscriptions)).isTrue();
|
||||
});
|
||||
it("resolver cache should now be empty", function() {
|
||||
assert(_.isEmpty(postal.configuration.resolver.cache)).isTrue();
|
||||
});
|
||||
});
|
||||
});
|
||||
});
|
||||
|
|
@ -1,12 +1,34 @@
|
|||
QUnit.specify("postal.js", function(){
|
||||
describe("SubscriptionDefinition", function(){
|
||||
describe("When initializing SubscriptionDefinition", function() {
|
||||
var sDef = new SubscriptionDefinition("TestChannel", "TestTopic", NO_OP);
|
||||
it("should set the channel to TestChannel", function() {
|
||||
assert(sDef.channel).equals("TestChannel");
|
||||
var sDef,
|
||||
caughtSubscribeEvent,
|
||||
systemSubscription;
|
||||
before(function() {
|
||||
systemSubscription = postal.subscribe({
|
||||
channel: "postal",
|
||||
topic: "subscription.created",
|
||||
callback: function(data, envelope){
|
||||
if( data.event &&
|
||||
data.event == "subscription.created" &&
|
||||
data.channel == "SubDefTestChannel" &&
|
||||
data.topic == "SubDefTestTopic") {
|
||||
caughtSubscribeEvent = true;
|
||||
}
|
||||
}
|
||||
});
|
||||
sDef = new SubscriptionDefinition("SubDefTestChannel", "SubDefTestTopic", NO_OP);
|
||||
});
|
||||
it("should set the topic to TestTopic", function() {
|
||||
assert(sDef.topic).equals("TestTopic");
|
||||
after(function(){
|
||||
sDef.unsubscribe();
|
||||
systemSubscription.unsubscribe();
|
||||
caughtSubscribeEvent = false;
|
||||
});
|
||||
it("should set the channel to SubDefTestChannel", function() {
|
||||
assert(sDef.channel).equals("SubDefTestChannel");
|
||||
});
|
||||
it("should set the topic to SubDefTestTopic", function() {
|
||||
assert(sDef.topic).equals("SubDefTestTopic");
|
||||
});
|
||||
it("should set the callback", function() {
|
||||
assert(sDef.callback).equals(NO_OP);
|
||||
|
|
@ -20,12 +42,15 @@ QUnit.specify("postal.js", function(){
|
|||
it("should default the maxCalls", function() {
|
||||
assert(sDef.maxCalls).equals(0);
|
||||
});
|
||||
it("should default the onHandled", function() {
|
||||
it("should default the onHandled callback", function() {
|
||||
assert(sDef.onHandled).equals(NO_OP);
|
||||
});
|
||||
it("should default the context", function() {
|
||||
assert(sDef.context).isNull();
|
||||
});
|
||||
it("should fire the subscription.created message", function() {
|
||||
assert(caughtSubscribeEvent).equals(true);
|
||||
});
|
||||
});
|
||||
|
||||
describe("When setting ignoreDuplicates", function(){
|
||||
|
|
@ -68,5 +93,89 @@ QUnit.specify("postal.js", function(){
|
|||
assert(sDefe.priority).equals(10);
|
||||
});
|
||||
});
|
||||
|
||||
describe("When calling subscribe to set the callback", function(){
|
||||
var sDefe = new SubscriptionDefinition("TestChannel", "TestTopic", NO_OP),
|
||||
fn = function() {};
|
||||
sDefe.subscribe(fn);
|
||||
|
||||
it("Should set the callback", function() {
|
||||
assert(sDefe.callback).equals(fn);
|
||||
});
|
||||
});
|
||||
|
||||
describe("When deferring the callback", function(){
|
||||
var results = [],
|
||||
sDefe = new SubscriptionDefinition("TestChannel", "TestTopic", function(data) {
|
||||
results.push(data);
|
||||
}).defer();
|
||||
sDefe.callback("second");
|
||||
results.push("first");
|
||||
|
||||
it("Should defer the callback", function() {
|
||||
wait(1, function(){
|
||||
assert(results[0]).equals("first");
|
||||
assert(results[1]).equals("second");
|
||||
});
|
||||
});
|
||||
});
|
||||
|
||||
describe("When delaying the callback", function(){
|
||||
var results = [],
|
||||
sDefe = new SubscriptionDefinition("TestChannel", "TestTopic", function(data) {
|
||||
results.push(data);
|
||||
}).withDelay(200);
|
||||
sDefe.callback("second");
|
||||
results.push("first");
|
||||
|
||||
it("Should delay the callback", function() {
|
||||
wait(300, function(){
|
||||
assert(results[0]).equals("first");
|
||||
assert(results[1]).equals("second");
|
||||
});
|
||||
});
|
||||
});
|
||||
|
||||
describe("When debouncing the callback", function(){
|
||||
var results = [],
|
||||
sDefe = new SubscriptionDefinition("TestChannel", "TestTopic", function(data) {
|
||||
results.push(data);
|
||||
}).withDebounce(800);
|
||||
|
||||
it("should have only invoked debounced callback once", async(function() {
|
||||
sDefe.callback(1); // starts the two second clock on debounce
|
||||
setTimeout(function() { sDefe.callback(2); }, 20); // should not invoke callback
|
||||
setTimeout(function() { sDefe.callback(3); }, 80); // should not invoke callback
|
||||
setTimeout(function() { sDefe.callback(4); }, 250); // should not invoke callback
|
||||
setTimeout(function() { sDefe.callback(5); }, 500); // should not invoke callback
|
||||
setTimeout(function() { sDefe.callback(6); }, 1000); // should invoke callback
|
||||
setTimeout(function() {
|
||||
assert(results[0]).equals(6);
|
||||
assert(results.length).equals(1);
|
||||
resume();
|
||||
}, 2400);
|
||||
}));
|
||||
});
|
||||
|
||||
describe("When throttling the callback", function(){
|
||||
var results = [],
|
||||
sDefe = new SubscriptionDefinition("TestChannel", "TestTopic", function(data) {
|
||||
results.push(data);
|
||||
}).withThrottle(500);
|
||||
|
||||
it("should have only invoked throttled callback twice", async(function() {
|
||||
sDefe.callback(1); // starts the two second clock on debounce
|
||||
setTimeout(function() { sDefe.callback(800); }, 800); // should invoke callback
|
||||
for(var i = 0; i < 20; i++) {
|
||||
(function(x) { sDefe.callback(x); })(i);
|
||||
}
|
||||
setTimeout(function() {
|
||||
assert(results[0]).equals(1);
|
||||
assert(results[1]).equals(800);
|
||||
assert(results.length).equals(2);
|
||||
resume();
|
||||
}, 1500);
|
||||
}));
|
||||
});
|
||||
});
|
||||
});
|
||||
|
|
|
|||
|
|
@ -19,6 +19,7 @@
|
|||
<script type="text/javascript" src="SubscriptionDefinition.spec.js"></script>
|
||||
<script type="text/javascript" src="BindingsResolver.spec.js"></script>
|
||||
<script type="text/javascript" src="Postal.spec.js"></script>
|
||||
<!--<script type="text/javascript" src="../lib/browser/postal.diagnostics.js"></script>-->
|
||||
<link rel="stylesheet" href="../ext/qunit.css" type="text/css" media="screen" />
|
||||
</head>
|
||||
<body>
|
||||
|
|
|
|||
|
|
@ -94,15 +94,6 @@ SubscriptionDefinition.prototype = {
|
|||
}
|
||||
var fn = this.callback;
|
||||
this.callback = _.debounce(fn, milliseconds);
|
||||
/*this.callback = (function(){
|
||||
var debounced;
|
||||
return function(data) {
|
||||
if(!debounced) {
|
||||
debounced = _.debounce(function() { fn(data); }, milliseconds);
|
||||
}
|
||||
debounced();
|
||||
};
|
||||
})();*/
|
||||
return this;
|
||||
},
|
||||
|
||||
|
|
|
|||
Loading…
Reference in a new issue