VulpesOS/gaia/shared/test/unit/mocks/mock_sdcard.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

126 lines
3.2 KiB
JavaScript
Executable file

'use strict';
/* global MockVCFReader */
/* exported MockSdCard */
var MockSdCard = function MockSdCard() {
var observers = {};
var mock_sdcard_vcf = 'BEGIN:VCARD\n' +
'VERSION:2.1\n' +
'N:Gump;Forrest\n' +
'FN:Forrest Gump\n' +
'ORG:Bubba Gump Shrimp Co.\n' +
'TITLE:Shrimp Man\n' +
'PHOTO;GIF:http://www.example.com/dir_photos/my_photo.gif\n' +
'TEL;WORK;VOICE:(111) 555-1212\n' +
'TEL;HOME;VOICE:(404) 555-1212\n' +
'ADR;WORK:;;100 Waters Edge;Baytown;LA;30314;United States of America\n' +
'LABEL;WORK;ENCODING=QUOTED-PRINTABLE:100 Waters Edge=0D=0ABaytown, ' +
'LA 30314=0D=0AUnited States of America\n' +
'ADR;HOME:;;42 Plantation St.;Baytown;LA;30314;United States of America\n' +
'LABEL;HOME;ENCODING=QUOTED-PRINTABLE:42 Plantation St.=0D=0ABaytown, ' +
'LA 30314=0D=0AUnited States of America\n' +
'EMAIL;PREF;INTERNET:forrestgump@example.com\n' +
'REV:20080424T195243Z\n' +
'END:VCARD';
var failOnRetrieveFiles = false;
var STATUSES = {
NOT_INITIALIZED: 0,
NOT_AVAILABLE: 1,
AVAILABLE: 2,
SHARED: 3
};
var status = STATUSES.AVAILABLE;
var updateStorageState = function updateStorageState(state) {
switch (state) {
case 'available':
status = STATUSES.AVAILABLE;
break;
case 'shared':
status = STATUSES.SHARED;
break;
case 'unavailable':
case 'deleted':
status = STATUSES.NOT_AVAILABLE;
break;
}
};
var deviceStorage = null;
var subscribeToChanges = function subscribeToChanges(name, func, force) {
if (observers[name] !== undefined && !force) {
return false;
}
observers[name] = func;
return true;
};
var unsubscribeToChanges = function unsubscribeToChanges(name) {
if (observers[name]) {
delete observers[name];
return true;
} else {
return false;
}
};
return {
NOT_INITIALIZED: STATUSES.NOT_INITIALIZED,
NOT_AVAILABLE: STATUSES.NOT_AVAILABLE,
AVAILABLE: STATUSES.AVAILABLE,
SHARED: STATUSES.SHARED,
set failOnRetrieveFiles(value) {
failOnRetrieveFiles = value;
},
getStatus: function(cb) {
cb(status);
},
get status() {
return status;
},
set status(value) {
status = value;
// Trigger the status change to any observer
Object.keys(observers).forEach(function onStatus(name) {
if (typeof(observers[name]) === 'function') {
observers[name].call(null, value);
}
});
},
get deviceStorage() {
return deviceStorage;
},
set deviceStorage(storage) {
deviceStorage = storage;
},
'updateStorageState': updateStorageState,
'checkStorageCard': function checkStorageCard() {
return status === STATUSES.AVAILABLE;
},
'retrieveFiles': function retrieveFiles(mimes, ext, cb) {
cb(failOnRetrieveFiles, [
{
name: 'vcf1.vcf',
type: 'text/vcard'
}
]);
},
'getTextFromFile': function getTextFromFile(fileArray, cb) {
return cb(mock_sdcard_vcf).then(() => {
return Promise.resolve(MockVCFReader.prototype.numDuplicated);
});
},
'subscribeToChanges': subscribeToChanges,
'unsubscribeToChanges': unsubscribeToChanges
};
}();