2014-10-28 18:02:17 +01:00
|
|
|
config = {
|
|
|
|
baseUrl: '.',
|
|
|
|
paths: {
|
|
|
|
"backbone": "components/backbone/backbone",
|
|
|
|
"backbone.browserStorage": "components/backbone.browserStorage/backbone.browserStorage",
|
|
|
|
"backbone.overview": "components/backbone.overview/backbone.overview",
|
|
|
|
"bootstrap": "components/bootstrap/dist/js/bootstrap", // XXX: Only required for https://conversejs.org website
|
|
|
|
"bootstrapJS": "components/bootstrapJS/index", // XXX: Only required for https://conversejs.org website
|
|
|
|
"converse-dependencies": "src/deps-website",
|
|
|
|
"converse-templates": "src/templates",
|
|
|
|
"eventemitter": "components/otr/build/dep/eventemitter",
|
|
|
|
"jquery": "components/jquery/dist/jquery",
|
|
|
|
"jquery-private": "src/jquery-private",
|
|
|
|
"jquery.browser": "components/jquery.browser/index",
|
|
|
|
"jquery.easing": "components/jquery-easing-original/index", // XXX: Only required for https://conversejs.org website
|
|
|
|
"moment": "components/momentjs/moment",
|
|
|
|
"strophe": "components/strophe/strophe",
|
|
|
|
"strophe.disco": "components/strophejs-plugins/disco/strophe.disco",
|
|
|
|
"strophe.muc": "components/strophe.muc/index",
|
|
|
|
"strophe.roster": "src/strophe.roster",
|
|
|
|
"strophe.vcard": "components/strophejs-plugins/vcard/strophe.vcard",
|
|
|
|
"text": 'components/requirejs-text/text',
|
|
|
|
"tpl": 'components/requirejs-tpl-jcbrand/tpl',
|
|
|
|
"typeahead": "components/typeahead.js/index",
|
|
|
|
"underscore": "components/underscore/underscore",
|
|
|
|
"utils": "src/utils",
|
|
|
|
|
|
|
|
// Off-the-record-encryption
|
|
|
|
"bigint": "src/bigint",
|
|
|
|
"crypto": "src/crypto",
|
|
|
|
"crypto.aes": "components/otr/vendor/cryptojs/aes",
|
|
|
|
"crypto.cipher-core": "components/otr/vendor/cryptojs/cipher-core",
|
|
|
|
"crypto.core": "components/otr/vendor/cryptojs/core",
|
|
|
|
"crypto.enc-base64": "components/otr/vendor/cryptojs/enc-base64",
|
|
|
|
"crypto.evpkdf": "components/crypto-js-evanvosberg/src/evpkdf",
|
|
|
|
"crypto.hmac": "components/otr/vendor/cryptojs/hmac",
|
|
|
|
"crypto.md5": "components/crypto-js-evanvosberg/src/md5",
|
|
|
|
"crypto.mode-ctr": "components/otr/vendor/cryptojs/mode-ctr",
|
|
|
|
"crypto.pad-nopadding": "components/otr/vendor/cryptojs/pad-nopadding",
|
|
|
|
"crypto.sha1": "components/otr/vendor/cryptojs/sha1",
|
|
|
|
"crypto.sha256": "components/otr/vendor/cryptojs/sha256",
|
|
|
|
"salsa20": "components/otr/build/dep/salsa20",
|
|
|
|
"otr": "src/otr",
|
|
|
|
|
|
|
|
// Locales paths
|
|
|
|
"locales": "locale/locales",
|
|
|
|
"jed": "components/jed/jed",
|
|
|
|
"af": "locale/af/LC_MESSAGES/af",
|
|
|
|
"de": "locale/de/LC_MESSAGES/de",
|
|
|
|
"en": "locale/en/LC_MESSAGES/en",
|
|
|
|
"es": "locale/es/LC_MESSAGES/es",
|
|
|
|
"fr": "locale/fr/LC_MESSAGES/fr",
|
|
|
|
"he": "locale/he/LC_MESSAGES/he",
|
|
|
|
"hu": "locale/hu/LC_MESSAGES/hu",
|
|
|
|
"id": "locale/id/LC_MESSAGES/id",
|
|
|
|
"it": "locale/it/LC_MESSAGES/it",
|
|
|
|
"ja": "locale/ja/LC_MESSAGES/ja",
|
|
|
|
"nl": "locale/nl/LC_MESSAGES/nl",
|
|
|
|
"pt_BR": "locale/pt_BR/LC_MESSAGES/pt_BR",
|
|
|
|
"ru": "locale/ru/LC_MESSAGES/ru",
|
|
|
|
"zh": "locale/zh/LC_MESSAGES/zh",
|
|
|
|
|
|
|
|
// Templates
|
|
|
|
"action": "src/templates/action",
|
|
|
|
"add_contact_dropdown": "src/templates/add_contact_dropdown",
|
|
|
|
"add_contact_form": "src/templates/add_contact_form",
|
|
|
|
"change_status_message": "src/templates/change_status_message",
|
|
|
|
"chat_status": "src/templates/chat_status",
|
|
|
|
"chatarea": "src/templates/chatarea",
|
|
|
|
"chatbox": "src/templates/chatbox",
|
|
|
|
"chatroom": "src/templates/chatroom",
|
|
|
|
"chatroom_password_form": "src/templates/chatroom_password_form",
|
|
|
|
"chatroom_sidebar": "src/templates/chatroom_sidebar",
|
|
|
|
"chatrooms_tab": "src/templates/chatrooms_tab",
|
|
|
|
"chats_panel": "src/templates/chats_panel",
|
|
|
|
"choose_status": "src/templates/choose_status",
|
|
|
|
"contacts_panel": "src/templates/contacts_panel",
|
|
|
|
"contacts_tab": "src/templates/contacts_tab",
|
|
|
|
"controlbox": "src/templates/controlbox",
|
|
|
|
"controlbox_toggle": "src/templates/controlbox_toggle",
|
|
|
|
"field": "src/templates/field",
|
|
|
|
"form_checkbox": "src/templates/form_checkbox",
|
|
|
|
"form_input": "src/templates/form_input",
|
|
|
|
"form_select": "src/templates/form_select",
|
|
|
|
"group_header": "src/templates/group_header",
|
|
|
|
"info": "src/templates/info",
|
|
|
|
"login_panel": "src/templates/login_panel",
|
|
|
|
"login_tab": "src/templates/login_tab",
|
|
|
|
"message": "src/templates/message",
|
|
|
|
"new_day": "src/templates/new_day",
|
|
|
|
"occupant": "src/templates/occupant",
|
|
|
|
"pending_contact": "src/templates/pending_contact",
|
|
|
|
"pending_contacts": "src/templates/pending_contacts",
|
|
|
|
"requesting_contact": "src/templates/requesting_contact",
|
|
|
|
"requesting_contacts": "src/templates/requesting_contacts",
|
|
|
|
"room_description": "src/templates/room_description",
|
|
|
|
"room_item": "src/templates/room_item",
|
|
|
|
"room_panel": "src/templates/room_panel",
|
|
|
|
"roster": "src/templates/roster",
|
|
|
|
"roster_item": "src/templates/roster_item",
|
|
|
|
"search_contact": "src/templates/search_contact",
|
|
|
|
"select_option": "src/templates/select_option",
|
|
|
|
"status_option": "src/templates/status_option",
|
|
|
|
"toggle_chats": "src/templates/toggle_chats",
|
|
|
|
"toolbar": "src/templates/toolbar",
|
|
|
|
"trimmed_chat": "src/templates/trimmed_chat"
|
|
|
|
},
|
|
|
|
|
|
|
|
map: {
|
|
|
|
// '*' means all modules will get 'jquery-private'
|
|
|
|
// for their 'jquery' dependency.
|
|
|
|
'*': { 'jquery': 'jquery-private' },
|
|
|
|
// 'jquery-private' wants the real jQuery module
|
|
|
|
// though. If this line was not here, there would
|
|
|
|
// be an unresolvable cyclic dependency.
|
|
|
|
'jquery-private': { 'jquery': 'jquery' }
|
|
|
|
},
|
|
|
|
|
|
|
|
tpl: {
|
|
|
|
// Configuration for requirejs-tpl
|
|
|
|
// Use Mustache style syntax for variable interpolation
|
|
|
|
templateSettings: {
|
|
|
|
evaluate : /\{\[([\s\S]+?)\]\}/g,
|
|
|
|
interpolate : /\{\{([\s\S]+?)\}\}/g
|
|
|
|
}
|
|
|
|
},
|
|
|
|
|
|
|
|
// define module dependencies for modules not using define
|
|
|
|
shim: {
|
|
|
|
'underscore': { exports: '_' },
|
|
|
|
'crypto.aes': { deps: ['crypto.cipher-core'] },
|
|
|
|
'crypto.cipher-core': { deps: ['crypto.enc-base64', 'crypto.evpkdf'] },
|
|
|
|
'crypto.enc-base64': { deps: ['crypto.core'] },
|
|
|
|
'crypto.evpkdf': { deps: ['crypto.md5'] },
|
|
|
|
'crypto.hmac': { deps: ['crypto.core'] },
|
|
|
|
'crypto.md5': { deps: ['crypto.core'] },
|
|
|
|
'crypto.mode-ctr': { deps: ['crypto.cipher-core'] },
|
|
|
|
'crypto.pad-nopadding': { deps: ['crypto.cipher-core'] },
|
|
|
|
'crypto.sha1': { deps: ['crypto.core'] },
|
|
|
|
'crypto.sha256': { deps: ['crypto.core'] },
|
|
|
|
'bigint': { deps: ['crypto'] },
|
|
|
|
'strophe': { exports: 'Strophe' },
|
|
|
|
'strophe.disco': { deps: ['strophe'] },
|
|
|
|
'strophe.muc': { deps: ['strophe'] },
|
|
|
|
'strophe.roster': { deps: ['strophe'] },
|
|
|
|
'strophe.vcard': { deps: ['strophe'] }
|
|
|
|
}
|
|
|
|
};
|
|
|
|
|
2013-12-30 20:27:57 +01:00
|
|
|
// Extra test dependencies
|
|
|
|
config.paths.mock = "tests/mock";
|
2014-08-08 22:06:01 +02:00
|
|
|
config.paths.test_utils = "tests/utils";
|
2013-12-30 20:27:57 +01:00
|
|
|
config.paths.jasmine = "components/jasmine/lib/jasmine-core/jasmine";
|
|
|
|
config.paths["jasmine-html"] = "components/jasmine/lib/jasmine-core/jasmine-html";
|
2014-04-18 17:39:45 +02:00
|
|
|
config.paths["console-runner"] = "node_modules/phantom-jasmine/lib/console-runner";
|
2013-12-30 20:27:57 +01:00
|
|
|
config.shim['jasmine-html'] = {
|
|
|
|
deps: ['jasmine'],
|
|
|
|
exports: 'jasmine'
|
|
|
|
};
|
|
|
|
require.config(config);
|
2013-07-28 21:20:36 +02:00
|
|
|
|
2013-10-03 12:35:54 +02:00
|
|
|
// Polyfill 'bind' which is not available in phantomjs < 2.0
|
|
|
|
if (!Function.prototype.bind) {
|
|
|
|
Function.prototype.bind = function (oThis) {
|
|
|
|
if (typeof this !== "function") {
|
|
|
|
// closest thing possible to the ECMAScript 5 internal IsCallable function
|
|
|
|
throw new TypeError("Function.prototype.bind - what is trying to be bound is not callable");
|
|
|
|
}
|
2014-04-18 17:39:45 +02:00
|
|
|
var aArgs = Array.prototype.slice.call(arguments, 1),
|
|
|
|
fToBind = this,
|
2013-10-03 12:35:54 +02:00
|
|
|
fNOP = function () {},
|
|
|
|
fBound = function () {
|
|
|
|
return fToBind.apply(this instanceof fNOP && oThis ? this : oThis,
|
|
|
|
aArgs.concat(Array.prototype.slice.call(arguments)));
|
|
|
|
};
|
|
|
|
fNOP.prototype = this.prototype;
|
|
|
|
fBound.prototype = new fNOP();
|
|
|
|
return fBound;
|
|
|
|
};
|
|
|
|
}
|
|
|
|
|
2013-07-28 21:20:36 +02:00
|
|
|
require([
|
|
|
|
"jquery",
|
|
|
|
"converse",
|
|
|
|
"mock",
|
2013-08-05 09:25:29 +02:00
|
|
|
"jasmine-html"
|
2013-11-02 09:56:20 +01:00
|
|
|
], function($, converse, mock, jasmine) {
|
2013-08-05 09:25:29 +02:00
|
|
|
// Set up converse.js
|
2014-02-12 11:19:12 +01:00
|
|
|
window.converse_api = converse;
|
2013-08-05 09:25:29 +02:00
|
|
|
window.localStorage.clear();
|
2014-06-30 19:55:26 +02:00
|
|
|
window.sessionStorage.clear();
|
2014-09-06 12:25:37 +02:00
|
|
|
|
2013-08-05 09:25:29 +02:00
|
|
|
converse.initialize({
|
|
|
|
prebind: false,
|
|
|
|
xhr_user_search: false,
|
|
|
|
auto_subscribe: false,
|
2013-08-24 03:10:06 +02:00
|
|
|
animate: false,
|
2013-11-02 09:56:20 +01:00
|
|
|
connection: mock.mock_connection,
|
2014-10-24 18:58:42 +02:00
|
|
|
no_trimming: true,
|
|
|
|
debug: true
|
2013-08-24 03:10:06 +02:00
|
|
|
}, function (converse) {
|
|
|
|
window.converse = converse;
|
2014-02-12 06:12:00 +01:00
|
|
|
window.crypto = {
|
|
|
|
getRandomValues: function (buf) {
|
|
|
|
var i;
|
|
|
|
for (i=0, len=buf.length; i<len; i++) {
|
|
|
|
buf[i] = Math.floor(Math.random()*256);
|
2014-04-18 17:39:45 +02:00
|
|
|
}
|
2014-02-12 06:12:00 +01:00
|
|
|
}
|
|
|
|
};
|
2013-08-24 03:10:06 +02:00
|
|
|
require([
|
2014-04-18 17:39:45 +02:00
|
|
|
"console-runner",
|
2013-12-16 18:42:46 +01:00
|
|
|
"spec/converse",
|
2014-02-12 06:12:00 +01:00
|
|
|
"spec/otr",
|
2014-02-12 01:02:25 +01:00
|
|
|
"spec/eventemitter",
|
2013-12-16 18:42:46 +01:00
|
|
|
"spec/controlbox",
|
|
|
|
"spec/chatbox",
|
2014-06-21 23:01:56 +02:00
|
|
|
"spec/chatroom",
|
2014-10-24 18:58:42 +02:00
|
|
|
"spec/minchats",
|
|
|
|
"spec/profiling"
|
2013-08-24 03:10:06 +02:00
|
|
|
], function () {
|
2013-11-03 10:38:48 +01:00
|
|
|
// Make sure this callback is only called once.
|
|
|
|
delete converse.callback;
|
2014-05-06 09:56:04 +02:00
|
|
|
// Stub the trimChat method. It causes havoc when running with
|
|
|
|
// phantomJS.
|
2014-06-14 22:03:04 +02:00
|
|
|
converse.ChatBoxViews.prototype.trimChat = function () {};
|
2013-11-03 10:38:48 +01:00
|
|
|
|
2013-08-24 03:10:06 +02:00
|
|
|
// Jasmine stuff
|
|
|
|
var jasmineEnv = jasmine.getEnv();
|
2014-04-18 17:39:45 +02:00
|
|
|
var reporter;
|
2013-08-24 03:10:06 +02:00
|
|
|
if (/PhantomJS/.test(navigator.userAgent)) {
|
2014-04-18 17:39:45 +02:00
|
|
|
reporter = new jasmine.ConsoleReporter();
|
|
|
|
window.console_reporter = reporter;
|
|
|
|
jasmineEnv.addReporter(reporter);
|
2013-08-24 03:10:06 +02:00
|
|
|
jasmineEnv.updateInterval = 0;
|
|
|
|
} else {
|
2014-04-18 17:39:45 +02:00
|
|
|
reporter = new jasmine.HtmlReporter();
|
|
|
|
jasmineEnv.addReporter(reporter);
|
2013-08-24 03:10:06 +02:00
|
|
|
jasmineEnv.specFilter = function(spec) {
|
2014-04-18 17:39:45 +02:00
|
|
|
return reporter.specFilter(spec);
|
2013-08-24 03:10:06 +02:00
|
|
|
};
|
2014-04-18 17:39:45 +02:00
|
|
|
jasmineEnv.updateInterval = 0;
|
2013-08-24 03:10:06 +02:00
|
|
|
}
|
|
|
|
jasmineEnv.execute();
|
|
|
|
});
|
2013-08-05 09:25:29 +02:00
|
|
|
});
|
2013-07-27 10:51:55 +02:00
|
|
|
}
|
2013-08-05 09:25:29 +02:00
|
|
|
);
|