Remove adapters (src, tests, docs), fix providers for node
This commit is contained in:
parent
375719b49b
commit
d9ed65602a
27
README.md
27
README.md
|
@ -161,33 +161,6 @@ if( Filer.FileSystem.providers.WebSQL.isSupported() ) {
|
|||
|
||||
You can also write your own provider if you need a different backend. See the code in `src/providers` for details.
|
||||
|
||||
####Filer.FileSystem.adapters - Adapters for Storage Providers
|
||||
|
||||
Filer based file systems can acquire new functionality by using adapters. These wrapper objects extend the abilities
|
||||
of storage providers without altering them in anway. An adapter can be used with any provider, and multiple
|
||||
adapters can be used together in order to compose complex functionality on top of a provider.
|
||||
|
||||
There are currently 2 adapters available:
|
||||
|
||||
* `FileSystem.adapters.Compression(provider)` - a compression adapter that uses [Zlib](https://github.com/imaya/zlib.js)
|
||||
* `FileSystem.adapters.Encryption(passphrase, provider)` - an encryption adapter that uses [AES encryption](http://code.google.com/p/crypto-js/#AES)
|
||||
|
||||
```javascript
|
||||
var FileSystem = Filer.FileSystem;
|
||||
var providers = FileSystem.providers;
|
||||
var adapters = FileSystem.adapters;
|
||||
|
||||
// Create a WebSQL-based, Encrypted, Compressed File System by
|
||||
// composing a provider and adatpers.
|
||||
var webSQLProvider = new providers.WebSQL();
|
||||
var encryptionAdatper = new adapters.Encryption('super-secret-passphrase', webSQLProvider);
|
||||
var compressionAdatper = new adatpers.Compression(encryptionAdapter);
|
||||
var fs = new FileSystem({ provider: compressionAdapter });
|
||||
```
|
||||
|
||||
You can also write your own adapter if you need to add new capabilities to the providers. Adapters share the same
|
||||
interface as providers. See the code in `src/providers` and `src/adapters` for many examples.
|
||||
|
||||
####Filer.Path<a name="FilerPath"></a>
|
||||
|
||||
The node.js [path module](http://nodejs.org/api/path.html) is available via the `Filer.Path` object. It is
|
||||
|
|
|
@ -1,8 +0,0 @@
|
|||
define(function(require) {
|
||||
|
||||
return {
|
||||
Compression: require('src/adapters/zlib'),
|
||||
Encryption: require('src/adapters/crypto')
|
||||
};
|
||||
|
||||
});
|
|
@ -1,124 +0,0 @@
|
|||
define(function(require) {
|
||||
|
||||
// AES encryption, see http://code.google.com/p/crypto-js/#AES
|
||||
require("crypto-js/rollups/aes");
|
||||
|
||||
// Move back and forth from Uint8Arrays and CryptoJS WordArray
|
||||
// See http://code.google.com/p/crypto-js/#The_Cipher_Input and
|
||||
// https://groups.google.com/forum/#!topic/crypto-js/TOb92tcJlU0
|
||||
var WordArray = CryptoJS.lib.WordArray;
|
||||
function fromWordArray(wordArray) {
|
||||
var words = wordArray.words;
|
||||
var sigBytes = wordArray.sigBytes;
|
||||
var u8 = new Uint8Array(sigBytes);
|
||||
var b;
|
||||
for (var i = 0; i < sigBytes; i++) {
|
||||
b = (words[i >>> 2] >>> (24 - (i % 4) * 8)) & 0xff;
|
||||
u8[i] = b;
|
||||
}
|
||||
return u8;
|
||||
}
|
||||
function toWordArray(u8arr) {
|
||||
var len = u8arr.length;
|
||||
var words = [];
|
||||
for (var i = 0; i < len; i++) {
|
||||
words[i >>> 2] |= (u8arr[i] & 0xff) << (24 - (i % 4) * 8);
|
||||
}
|
||||
return WordArray.create(words, len);
|
||||
}
|
||||
|
||||
|
||||
// UTF8 Text De/Encoders
|
||||
require('encoding');
|
||||
function encode(str) {
|
||||
return (new TextEncoder('utf-8')).encode(str);
|
||||
}
|
||||
function decode(u8arr) {
|
||||
return (new TextDecoder('utf-8')).decode(u8arr);
|
||||
}
|
||||
|
||||
|
||||
function CryptoContext(context, encrypt, decrypt) {
|
||||
this.context = context;
|
||||
this.encrypt = encrypt;
|
||||
this.decrypt = decrypt;
|
||||
}
|
||||
CryptoContext.prototype.clear = function(callback) {
|
||||
this.context.clear(callback);
|
||||
};
|
||||
CryptoContext.prototype.get = function(key, callback) {
|
||||
var decrypt = this.decrypt;
|
||||
this.context.get(key, function(err, value) {
|
||||
if(err) {
|
||||
callback(err);
|
||||
return;
|
||||
}
|
||||
if(value) {
|
||||
value = decrypt(value);
|
||||
}
|
||||
callback(null, value);
|
||||
});
|
||||
};
|
||||
CryptoContext.prototype.put = function(key, value, callback) {
|
||||
var encryptedValue = this.encrypt(value);
|
||||
this.context.put(key, encryptedValue, callback);
|
||||
};
|
||||
CryptoContext.prototype.delete = function(key, callback) {
|
||||
this.context.delete(key, callback);
|
||||
};
|
||||
|
||||
|
||||
// It is up to the app using this wrapper how the passphrase is acquired, probably by
|
||||
// prompting the user to enter it when the file system is being opened.
|
||||
function CryptoAdapter(passphrase, provider) {
|
||||
this.provider = provider;
|
||||
|
||||
// Cache cipher algorithm we'll use in encrypt/decrypt
|
||||
var cipher = CryptoJS.AES;
|
||||
|
||||
// To encrypt:
|
||||
// 1) accept a buffer (Uint8Array) containing binary data
|
||||
// 2) convert the buffer to a CipherJS WordArray
|
||||
// 3) encrypt the WordArray using the chosen cipher algorithm + passphrase
|
||||
// 4) convert the resulting ciphertext to a UTF8 encoded Uint8Array and return
|
||||
this.encrypt = function(buffer) {
|
||||
var wordArray = toWordArray(buffer);
|
||||
var encrypted = cipher.encrypt(wordArray, passphrase);
|
||||
var utf8EncodedBuf = encode(encrypted);
|
||||
return utf8EncodedBuf;
|
||||
};
|
||||
|
||||
// To decrypt:
|
||||
// 1) accept a buffer (Uint8Array) containing a UTF8 encoded Uint8Array
|
||||
// 2) convert the buffer to string (i.e., the ciphertext we got from encrypting)
|
||||
// 3) decrypt the ciphertext string
|
||||
// 4) convert the decrypted cipherParam object to a UTF8 string
|
||||
// 5) encode the UTF8 string to a Uint8Array buffer and return
|
||||
this.decrypt = function(buffer) {
|
||||
var encryptedStr = decode(buffer);
|
||||
var decrypted = cipher.decrypt(encryptedStr, passphrase);
|
||||
var decryptedUtf8 = decrypted.toString(CryptoJS.enc.Utf8);
|
||||
var utf8EncodedBuf = encode(decryptedUtf8);
|
||||
return utf8EncodedBuf;
|
||||
};
|
||||
}
|
||||
CryptoAdapter.isSupported = function() {
|
||||
return true;
|
||||
};
|
||||
|
||||
CryptoAdapter.prototype.open = function(callback) {
|
||||
this.provider.open(callback);
|
||||
};
|
||||
CryptoAdapter.prototype.getReadOnlyContext = function() {
|
||||
return new CryptoContext(this.provider.getReadOnlyContext(),
|
||||
this.encrypt,
|
||||
this.decrypt);
|
||||
};
|
||||
CryptoAdapter.prototype.getReadWriteContext = function() {
|
||||
return new CryptoContext(this.provider.getReadWriteContext(),
|
||||
this.encrypt,
|
||||
this.decrypt);
|
||||
};
|
||||
|
||||
return CryptoAdapter;
|
||||
});
|
|
@ -1,63 +0,0 @@
|
|||
define(function(require) {
|
||||
|
||||
// Zlib compression, see
|
||||
// https://github.com/imaya/zlib.js/blob/master/bin/zlib.min.js
|
||||
require("zlib");
|
||||
|
||||
var Inflate = Zlib.Inflate;
|
||||
function inflate(compressed) {
|
||||
return (new Inflate(compressed)).decompress();
|
||||
}
|
||||
|
||||
var Deflate = Zlib.Deflate;
|
||||
function deflate(buffer) {
|
||||
return (new Deflate(buffer)).compress();
|
||||
}
|
||||
|
||||
function ZlibContext(context) {
|
||||
this.context = context;
|
||||
}
|
||||
ZlibContext.prototype.clear = function(callback) {
|
||||
this.context.clear(callback);
|
||||
};
|
||||
ZlibContext.prototype.get = function(key, callback) {
|
||||
this.context.get(key, function(err, result) {
|
||||
if(err) {
|
||||
callback(err);
|
||||
return;
|
||||
}
|
||||
// Deal with result being null
|
||||
if(result) {
|
||||
result = inflate(result);
|
||||
}
|
||||
callback(null, result);
|
||||
});
|
||||
};
|
||||
ZlibContext.prototype.put = function(key, value, callback) {
|
||||
value = deflate(value);
|
||||
this.context.put(key, value, callback);
|
||||
};
|
||||
ZlibContext.prototype.delete = function(key, callback) {
|
||||
this.context.delete(key, callback);
|
||||
};
|
||||
|
||||
|
||||
function ZlibAdapter(provider, inflate, deflate) {
|
||||
this.provider = provider;
|
||||
}
|
||||
ZlibAdapter.isSupported = function() {
|
||||
return true;
|
||||
};
|
||||
|
||||
ZlibAdapter.prototype.open = function(callback) {
|
||||
this.provider.open(callback);
|
||||
};
|
||||
ZlibAdapter.prototype.getReadOnlyContext = function() {
|
||||
return new ZlibContext(this.provider.getReadOnlyContext());
|
||||
};
|
||||
ZlibAdapter.prototype.getReadWriteContext = function() {
|
||||
return new ZlibContext(this.provider.getReadWriteContext());
|
||||
};
|
||||
|
||||
return ZlibAdapter;
|
||||
});
|
|
@ -10,11 +10,7 @@ var FS_READY = Constants.FS_READY;
|
|||
var FS_PENDING = Constants.FS_PENDING;
|
||||
var FS_ERROR = Constants.FS_ERROR;
|
||||
|
||||
// TODO: fix adapters + providers for node.js...
|
||||
//var providers = require('../providers/providers.js');
|
||||
var providers = {};
|
||||
//var adapters = require('../adapters/adapters.js');
|
||||
var adapters = {};
|
||||
var providers = require('../providers/index.js');
|
||||
|
||||
var Shell = require('../shell/shell.js');
|
||||
var Intercom = require('../../lib/intercom.js');
|
||||
|
@ -218,9 +214,6 @@ function FileSystem(options, callback) {
|
|||
// Expose storage providers on FileSystem constructor
|
||||
FileSystem.providers = providers;
|
||||
|
||||
// Expose adatpers on FileSystem constructor
|
||||
FileSystem.adapters = adapters;
|
||||
|
||||
/**
|
||||
* Public API for FileSystem
|
||||
*/
|
||||
|
|
|
@ -0,0 +1,35 @@
|
|||
var IndexedDB = require('./indexeddb.js');
|
||||
var WebSQL = require('./websql.js');
|
||||
var Memory = require('./memory.js');
|
||||
|
||||
module.exports = {
|
||||
IndexedDB: IndexedDB,
|
||||
WebSQL: WebSQL,
|
||||
Memory: Memory,
|
||||
|
||||
/**
|
||||
* Convenience Provider references
|
||||
*/
|
||||
|
||||
// The default provider to use when none is specified
|
||||
Default: IndexedDB,
|
||||
|
||||
// The Fallback provider does automatic fallback checks
|
||||
Fallback: (function() {
|
||||
if(IndexedDB.isSupported()) {
|
||||
return IndexedDB;
|
||||
}
|
||||
|
||||
if(WebSQL.isSupported()) {
|
||||
return WebSQL;
|
||||
}
|
||||
|
||||
function NotSupported() {
|
||||
throw "[Filer Error] Your browser doesn't support IndexedDB or WebSQL.";
|
||||
}
|
||||
NotSupported.isSupported = function() {
|
||||
return false;
|
||||
};
|
||||
return NotSupported;
|
||||
}())
|
||||
};
|
|
@ -1,17 +1,14 @@
|
|||
define(function(require) {
|
||||
var FILE_SYSTEM_NAME = require('src/constants').FILE_SYSTEM_NAME;
|
||||
var FILE_STORE_NAME = require('src/constants').FILE_STORE_NAME;
|
||||
(function(global) {
|
||||
var FILE_SYSTEM_NAME = require('../constants.js').FILE_SYSTEM_NAME;
|
||||
var FILE_STORE_NAME = require('../constants.js').FILE_STORE_NAME;
|
||||
var IDB_RW = require('../constants.js').IDB_RW;
|
||||
var IDB_RO = require('../constants.js').IDB_RO;
|
||||
var Errors = require('../errors.js');
|
||||
|
||||
var indexedDB = (function(window) {
|
||||
return window.indexedDB ||
|
||||
window.mozIndexedDB ||
|
||||
window.webkitIndexedDB ||
|
||||
window.msIndexedDB;
|
||||
}(this));
|
||||
|
||||
var IDB_RW = require('src/constants').IDB_RW;
|
||||
var IDB_RO = require('src/constants').IDB_RO;
|
||||
var Errors = require('src/errors');
|
||||
var indexedDB = global.indexedDB ||
|
||||
global.mozIndexedDB ||
|
||||
global.webkitIndexedDB ||
|
||||
global.msIndexedDB;
|
||||
|
||||
function IndexedDBContext(db, mode) {
|
||||
var transaction = db.transaction(FILE_STORE_NAME, mode);
|
||||
|
@ -128,5 +125,6 @@ define(function(require) {
|
|||
return new IndexedDBContext(this.db, IDB_RW);
|
||||
};
|
||||
|
||||
return IndexedDB;
|
||||
});
|
||||
module.exports = IndexedDB;
|
||||
|
||||
}(this));
|
||||
|
|
|
@ -1,6 +1,5 @@
|
|||
define(function(require) {
|
||||
var FILE_SYSTEM_NAME = require('src/constants').FILE_SYSTEM_NAME;
|
||||
var asyncCallback = require('async').nextTick;
|
||||
var FILE_SYSTEM_NAME = require('../constants.js').FILE_SYSTEM_NAME;
|
||||
var asyncCallback = require('../../lib/async.js').nextTick;
|
||||
|
||||
/**
|
||||
* Make shared in-memory DBs possible when using the same name.
|
||||
|
@ -85,5 +84,4 @@ define(function(require) {
|
|||
return new MemoryContext(this.db, false);
|
||||
};
|
||||
|
||||
return Memory;
|
||||
});
|
||||
module.exports = Memory;
|
||||
|
|
|
@ -1,38 +0,0 @@
|
|||
define(function(require) {
|
||||
|
||||
var IndexedDB = require('src/providers/indexeddb');
|
||||
var WebSQL = require('src/providers/websql');
|
||||
var Memory = require('src/providers/memory');
|
||||
|
||||
return {
|
||||
IndexedDB: IndexedDB,
|
||||
WebSQL: WebSQL,
|
||||
Memory: Memory,
|
||||
|
||||
/**
|
||||
* Convenience Provider references
|
||||
*/
|
||||
|
||||
// The default provider to use when none is specified
|
||||
Default: IndexedDB,
|
||||
|
||||
// The Fallback provider does automatic fallback checks
|
||||
Fallback: (function() {
|
||||
if(IndexedDB.isSupported()) {
|
||||
return IndexedDB;
|
||||
}
|
||||
|
||||
if(WebSQL.isSupported()) {
|
||||
return WebSQL;
|
||||
}
|
||||
|
||||
function NotSupported() {
|
||||
throw "[Filer Error] Your browser doesn't support IndexedDB or WebSQL.";
|
||||
}
|
||||
NotSupported.isSupported = function() {
|
||||
return false;
|
||||
};
|
||||
return NotSupported;
|
||||
}())
|
||||
};
|
||||
});
|
|
@ -1,11 +1,11 @@
|
|||
define(function(require) {
|
||||
var FILE_SYSTEM_NAME = require('src/constants').FILE_SYSTEM_NAME;
|
||||
var FILE_STORE_NAME = require('src/constants').FILE_STORE_NAME;
|
||||
var WSQL_VERSION = require('src/constants').WSQL_VERSION;
|
||||
var WSQL_SIZE = require('src/constants').WSQL_SIZE;
|
||||
var WSQL_DESC = require('src/constants').WSQL_DESC;
|
||||
var u8toArray = require('src/shared').u8toArray;
|
||||
var Errors = require('src/errors');
|
||||
(function(global) {
|
||||
var FILE_SYSTEM_NAME = require('../constants.js').FILE_SYSTEM_NAME;
|
||||
var FILE_STORE_NAME = require('../constants.js').FILE_STORE_NAME;
|
||||
var WSQL_VERSION = require('../constants.js').WSQL_VERSION;
|
||||
var WSQL_SIZE = require('../constants.js').WSQL_SIZE;
|
||||
var WSQL_DESC = require('../constants.js').WSQL_DESC;
|
||||
var u8toArray = require('../shared.js').u8toArray;
|
||||
var Errors = require('../errors.js');
|
||||
|
||||
function WebSQLContext(db, isReadOnly) {
|
||||
var that = this;
|
||||
|
@ -98,7 +98,7 @@ define(function(require) {
|
|||
this.db = null;
|
||||
}
|
||||
WebSQL.isSupported = function() {
|
||||
return typeof window === 'undefined' ? false : !!window.openDatabase;
|
||||
return !!global.openDatabase;
|
||||
};
|
||||
|
||||
WebSQL.prototype.open = function(callback) {
|
||||
|
@ -110,7 +110,7 @@ define(function(require) {
|
|||
return;
|
||||
}
|
||||
|
||||
var db = window.openDatabase(that.name, WSQL_VERSION, WSQL_DESC, WSQL_SIZE);
|
||||
var db = global.openDatabase(that.name, WSQL_VERSION, WSQL_DESC, WSQL_SIZE);
|
||||
if(!db) {
|
||||
callback("[WebSQL] Unable to open database.");
|
||||
return;
|
||||
|
@ -156,5 +156,6 @@ define(function(require) {
|
|||
return new WebSQLContext(this.db, false);
|
||||
};
|
||||
|
||||
return WebSQL;
|
||||
});
|
||||
module.exports = WebSQL;
|
||||
|
||||
}(this));
|
||||
|
|
|
@ -1,175 +0,0 @@
|
|||
define(["Filer", "util"], function(Filer, util) {
|
||||
|
||||
// We reuse the same set of tests for all adapters.
|
||||
// buildTestsFor() creates a set of tests bound to an
|
||||
// adapter, and uses the provider set on the query string
|
||||
// (defaults to best available/supported provider, see test-utils.js).
|
||||
function buildTestsFor(adapterName, buildAdapter) {
|
||||
function encode(str) {
|
||||
// TextEncoder is either native, or shimmed by Filer
|
||||
return (new TextEncoder("utf-8")).encode(str);
|
||||
}
|
||||
|
||||
// Make some string + binary buffer versions of things we'll need
|
||||
var valueStr = "value", valueBuffer = encode(valueStr);
|
||||
var value1Str = "value1", value1Buffer = encode(value1Str);
|
||||
var value2Str = "value2", value2Buffer = encode(value2Str);
|
||||
|
||||
function createProvider() {
|
||||
return buildAdapter(util.provider().provider);
|
||||
}
|
||||
|
||||
describe("Filer.FileSystem.adapters." + adapterName, function() {
|
||||
beforeEach(util.setup);
|
||||
afterEach(util.cleanup);
|
||||
|
||||
it("is supported -- if it isn't, none of these tests can run.", function() {
|
||||
// Allow for combined adapters (e.g., 'Encryption+Compression') joined by '+'
|
||||
adapterName.split('+').forEach(function(name) {
|
||||
expect(Filer.FileSystem.adapters[name].isSupported()).to.be.true;
|
||||
});
|
||||
});
|
||||
|
||||
it("has open, getReadOnlyContext, and getReadWriteContext instance methods", function() {
|
||||
var provider = createProvider();
|
||||
expect(provider.open).to.be.a('function');
|
||||
expect(provider.getReadOnlyContext).to.be.a('function');
|
||||
expect(provider.getReadWriteContext).to.be.a('function');
|
||||
});
|
||||
});
|
||||
|
||||
describe("open a provider with an " + adapterName + " adapter", function() {
|
||||
beforeEach(util.setup);
|
||||
afterEach(util.cleanup);
|
||||
|
||||
it("should open a new database", function(done) {
|
||||
var provider = createProvider();
|
||||
provider.open(function(error, firstAccess) {
|
||||
expect(error).not.to.exist;
|
||||
// NOTE: we test firstAccess logic in the individual provider tests
|
||||
// (see tests/spec/providers/*) but can't easily/actually test it here,
|
||||
// since the provider-agnostic code in test-utils pre-creates a
|
||||
// FileSystem object, thus eating the first access info.
|
||||
// See https://github.com/js-platform/filer/issues/127
|
||||
done();
|
||||
});
|
||||
});
|
||||
});
|
||||
|
||||
describe("Read/Write operations on a provider with an " + adapterName + " adapter", function() {
|
||||
beforeEach(util.setup);
|
||||
afterEach(util.cleanup);
|
||||
|
||||
it("should allow put() and get()", function(done) {
|
||||
var provider = createProvider();
|
||||
provider.open(function(error, firstAccess) {
|
||||
if(error) throw error;
|
||||
|
||||
var context = provider.getReadWriteContext();
|
||||
context.put("key", valueBuffer, function(error, result) {
|
||||
if(error) throw error;
|
||||
|
||||
context.get("key", function(error, result) {
|
||||
expect(error).not.to.exist;
|
||||
expect(util.typedArrayEqual(result, valueBuffer)).to.be.true;
|
||||
done();
|
||||
});
|
||||
});
|
||||
});
|
||||
});
|
||||
|
||||
it("should allow delete()", function(done) {
|
||||
var provider = createProvider();
|
||||
provider.open(function(error, firstAccess) {
|
||||
if(error) throw error;
|
||||
|
||||
var context = provider.getReadWriteContext();
|
||||
context.put("key", valueBuffer, function(error, result) {
|
||||
if(error) throw error;
|
||||
|
||||
context.delete("key", function(error, result) {
|
||||
if(error) throw error;
|
||||
|
||||
context.get("key", function(error, result) {
|
||||
expect(error).not.to.exist;
|
||||
expect(result).not.to.exist;
|
||||
done();
|
||||
});
|
||||
});
|
||||
});
|
||||
});
|
||||
});
|
||||
|
||||
it("should allow clear()", function(done) {
|
||||
var provider = createProvider();
|
||||
provider.open(function(error, firstAccess) {
|
||||
if(error) throw error;
|
||||
|
||||
var context = provider.getReadWriteContext();
|
||||
context.put("key1", value1Buffer, function(error, result) {
|
||||
if(error) throw error;
|
||||
|
||||
context.put("key2", value2Buffer, function(error, result) {
|
||||
if(error) throw error;
|
||||
|
||||
context.clear(function(err) {
|
||||
if(error) throw error;
|
||||
|
||||
context.get("key1", function(error, result) {
|
||||
if(error) throw error;
|
||||
expect(result).not.to.exist;
|
||||
|
||||
context.get("key2", function(error, result) {
|
||||
expect(error).not.to.exist;
|
||||
expect(result).not.to.exist;
|
||||
done();
|
||||
});
|
||||
});
|
||||
});
|
||||
});
|
||||
});
|
||||
});
|
||||
});
|
||||
|
||||
/**
|
||||
* With issue 123 (see https://github.com/js-platform/filer/issues/128) we had to
|
||||
* start using readwrite contexts everywhere with IndexedDB. As such, we can't
|
||||
* easily test this here, without knowing which provider we have. We test this
|
||||
* in the actual providers, so this isn't really needed. Skipping for now.
|
||||
*/
|
||||
it.skip("should fail when trying to write on ReadOnlyContext", function(done) {
|
||||
var provider = createProvider();
|
||||
provider.open(function(error, firstAccess) {
|
||||
if(error) throw error;
|
||||
|
||||
var context = provider.getReadOnlyContext();
|
||||
context.put("key1", value1Buffer, function(error, result) {
|
||||
expect(error).to.exist;
|
||||
expect(result).not.to.exist;
|
||||
done();
|
||||
});
|
||||
});
|
||||
});
|
||||
});
|
||||
}
|
||||
|
||||
// Encryption
|
||||
buildTestsFor('Encryption', function buildAdapter(provider) {
|
||||
var passphrase = '' + Date.now();
|
||||
return new Filer.FileSystem.adapters.Encryption(passphrase, provider);
|
||||
});
|
||||
|
||||
// Compression
|
||||
buildTestsFor('Compression', function buildAdapter(provider) {
|
||||
return new Filer.FileSystem.adapters.Compression(provider);
|
||||
});
|
||||
|
||||
// Encryption + Compression together
|
||||
buildTestsFor('Encryption+Compression', function buildAdapter(provider) {
|
||||
var passphrase = '' + Date.now();
|
||||
var compression = new Filer.FileSystem.adapters.Compression(provider);
|
||||
var encryptionWithCompression = new Filer.FileSystem.adapters.Encryption(passphrase, compression);
|
||||
return encryptionWithCompression;
|
||||
});
|
||||
|
||||
});
|
|
@ -1,15 +0,0 @@
|
|||
define(["Filer"], function(Filer) {
|
||||
describe("Filer.FileSystem.adapters", function() {
|
||||
it("is defined", function() {
|
||||
expect(Filer.FileSystem.adapters).to.exist;
|
||||
});
|
||||
|
||||
it("has a default Encryption constructor", function() {
|
||||
expect(Filer.FileSystem.adapters.Encryption).to.be.a('function');
|
||||
});
|
||||
|
||||
it("has a default Compression constructor", function() {
|
||||
expect(Filer.FileSystem.adapters.Compression).to.be.a('function');
|
||||
});
|
||||
});
|
||||
});
|
|
@ -45,10 +45,6 @@ define([
|
|||
"spec/providers/providers.indexeddb.spec",
|
||||
"spec/providers/providers.websql.spec",
|
||||
|
||||
// Filer.FileSystem.adapters.*
|
||||
"spec/adapters/adapters.spec",
|
||||
"spec/adapters/adapters.general.spec",
|
||||
|
||||
// Filer.FileSystemShell.*
|
||||
"spec/shell/cd.spec",
|
||||
"spec/shell/touch.spec",
|
||||
|
|
Loading…
Reference in New Issue