VulpesOS/gaia/apps/calendar/test/unit/support/calendar.js
OverSu b38dea0597 Publish Vulpes Preview 15 sources for desktop, Android and Tundra
Share Gaia assets and adapters, keep private profiles and development documents local, and update both public READMEs.
2026-09-30 23:13:03 +02:00

139 lines
3.9 KiB
JavaScript
Executable file

define(function(require, exports) {
'use strict';
var Db = require('db');
var Factory = require('test/support/factory');
var MockProvider = require('test/support/mock_provider');
var app = require('app');
var core = require('core');
require('test/support/factories/all');
exports._lastEnvId = 0;
exports.core = function() {
var pendingManager = app.pendingManager;
if (pendingManager) {
// hack to ensure clean tests
pendingManager.objects.forEach(item => pendingManager.unregister(item));
}
if (core.db && core.db.isOpen) {
core.db.close();
}
app.setupCore('b2g-test-calendar');
core.providerFactory.providers.Mock = new MockProvider();
return core;
};
exports.accountEnvironment = function(accOverrides, calOverrides) {
accOverrides = accOverrides || {};
accOverrides.providerType = accOverrides.providerType || 'Mock';
calOverrides = calOverrides || {};
setup(function(done) {
var id = ++exports._lastEnvId;
accOverrides._id = id;
calOverrides.accountId = id;
var trans = core.db.transaction(['accounts', 'calendars'], 'readwrite');
trans.oncomplete = () => done();
trans.onerror = event => done(event.target.error);
var account = this.account = Factory('account', accOverrides);
var calendar = this.calendar = Factory('calendar', calOverrides);
var storeFactory = core.storeFactory;
var accountStore = storeFactory.get('Account');
var calendarStore = storeFactory.get('Calendar');
accountStore.persist(account, trans);
calendarStore.persist(calendar, trans);
});
};
exports.eventEnvironment = function(busytimeOverrides, eventOverrides) {
eventOverrides = eventOverrides || {};
eventOverrides._id = eventOverrides._id || 'one';
busytimeOverrides = busytimeOverrides || {};
setup(function(done) {
var storeFactory = core.storeFactory;
var busytimeStore = storeFactory.get('Busytime');
var eventStore = storeFactory.get('Event');
var trans = core.db.transaction(eventStore._dependentStores, 'readwrite');
trans.oncomplete = () => done();
trans.onerror = event => done(event.target.error);
eventOverrides.calendarId = this.calendar._id;
var event = this.event = Factory('event', eventOverrides);
busytimeOverrides.calendarId = this.calendar._id;
busytimeOverrides.eventId = this.event._id || eventOverrides._id;
var busytime = this.busytime = Factory('busytime', busytimeOverrides);
eventStore.persist(event, trans);
busytimeStore.persist(busytime, trans);
});
};
exports.dbFixtures = function(factory, storeName, list) {
var object = Object.create(null);
setup(function(done) {
var db = core.db;
var store = core.storeFactory.get(storeName);
var trans = db.transaction(store._dependentStores, 'readwrite');
trans.oncomplete = () => done();
trans.onerror = event => done(event.target.error);
for (var key in list) {
store.persist(
(object[key] = Factory(factory, list[key])),
trans
);
}
});
return object;
};
exports.clearStore = function(db, name, callback) {
if (typeof(name) === 'function') {
callback = name;
name = Object.keys(Db.prototype.store);
}
var trans = db.transaction(name, 'readwrite');
trans.oncomplete = () => callback();
trans.onerror = () => callback(new Error('Could not wipe accounts db'));
name = [].concat(name);
name.forEach(storeName => {
var store = trans.objectStore(storeName);
store.clear();
});
};
exports.bench = function(iter, cb) {
var start = window.performance.now();
for (var i = 0; i < iter; i++) {
cb();
}
return window.performance.now() - start;
};
exports.vs = function(iter, cmds) {
var results = {};
for (var key in cmds) {
results[key] = exports.bench(iter, cmds[key]);
}
return results;
};
exports.triggerEvent = function(element, eventType) {
var event = document.createEvent('HTMLEvents');
event.initEvent(eventType, true, true);
element.dispatchEvent(event);
};
});