Merge branch 'master' into anon_login

This commit is contained in:
JC Brand 2015-04-04 11:32:22 +02:00
commit df0c55ed4d
3 changed files with 33 additions and 8 deletions

View File

@ -1260,12 +1260,11 @@
* (string) state - The chat state (consts ACTIVE, COMPOSING, PAUSED, INACTIVE, GONE) * (string) state - The chat state (consts ACTIVE, COMPOSING, PAUSED, INACTIVE, GONE)
* (no_save) no_save - Just do the cleanup or setup but don't actually save the state. * (no_save) no_save - Just do the cleanup or setup but don't actually save the state.
*/ */
if (_.contains([ACTIVE, INACTIVE, GONE], state)) {
if (typeof this.chat_state_timeout !== 'undefined') { if (typeof this.chat_state_timeout !== 'undefined') {
clearTimeout(this.chat_state_timeout); clearTimeout(this.chat_state_timeout);
delete this.chat_state_timeout; delete this.chat_state_timeout;
} }
} else if (state === COMPOSING) { if (state === COMPOSING) {
this.chat_state_timeout = setTimeout( this.chat_state_timeout = setTimeout(
$.proxy(this.setChatState, this), converse.TIMEOUTS.PAUSED, PAUSED); $.proxy(this.setChatState, this), converse.TIMEOUTS.PAUSED, PAUSED);
} else if (state === PAUSED) { } else if (state === PAUSED) {

View File

@ -10,6 +10,7 @@ Changelog
* #356 Fix the plugin extend function. [floriancargoet] * #356 Fix the plugin extend function. [floriancargoet]
* #357 Fix the known bug where a state notification reopens a chat box. [floriancargoet] * #357 Fix the known bug where a state notification reopens a chat box. [floriancargoet]
* #358 Bugfix. Chat rooms show the same occupants bug. [floriancargoet] * #358 Bugfix. Chat rooms show the same occupants bug. [floriancargoet]
* #359 Fix a timeout bug in chat state notifications. [floriancargoet]
0.9.1 (2015-03-26) 0.9.1 (2015-03-26)
------------------ ------------------

View File

@ -781,6 +781,8 @@
var contact_jid = mock.cur_names[0].replace(/ /g,'.').toLowerCase() + '@localhost'; var contact_jid = mock.cur_names[0].replace(/ /g,'.').toLowerCase() + '@localhost';
test_utils.openChatBoxFor(contact_jid); test_utils.openChatBoxFor(contact_jid);
var view = this.chatboxviews.get(contact_jid); var view = this.chatboxviews.get(contact_jid);
spyOn(converse.connection, 'send');
spyOn(view, 'setChatState').andCallThrough();
runs(function () { runs(function () {
expect(view.model.get('chat_state')).toBe('active'); expect(view.model.get('chat_state')).toBe('active');
view.keyPressed({ view.keyPressed({
@ -788,16 +790,39 @@
keyCode: 1 keyCode: 1
}); });
expect(view.model.get('chat_state')).toBe('composing'); expect(view.model.get('chat_state')).toBe('composing');
spyOn(converse.connection, 'send'); expect(converse.connection.send).toHaveBeenCalled();
var $stanza = $(converse.connection.send.argsForCall[0][0].tree());
expect($stanza.children().prop('tagName')).toBe('composing');
}); });
waits(250); waits(250);
runs(function () { runs(function () {
expect(view.model.get('chat_state')).toBe('paused'); expect(view.model.get('chat_state')).toBe('paused');
expect(converse.connection.send).toHaveBeenCalled(); expect(converse.connection.send).toHaveBeenCalled();
var $stanza = $(converse.connection.send.argsForCall[0][0].tree()); var $stanza = $(converse.connection.send.argsForCall[1][0].tree());
expect($stanza.attr('to')).toBe(contact_jid); expect($stanza.attr('to')).toBe(contact_jid);
expect($stanza.children().length).toBe(1); expect($stanza.children().length).toBe(1);
expect($stanza.children().prop('tagName')).toBe('paused'); expect($stanza.children().prop('tagName')).toBe('paused');
// Test #359. A paused notification should not be sent
// out if the user simply types longer than the
// timeout.
view.keyPressed({
target: view.$el.find('textarea.chat-textarea'),
keyCode: 1
});
expect(view.setChatState).toHaveBeenCalled();
expect(view.model.get('chat_state')).toBe('composing');
});
waits(100);
runs(function () {
view.keyPressed({
target: view.$el.find('textarea.chat-textarea'),
keyCode: 1
});
expect(view.model.get('chat_state')).toBe('composing');
});
waits(150);
runs(function () {
expect(view.model.get('chat_state')).toBe('composing');
}); });
}, converse)); }, converse));