blob: fc498f889380edb177444c0f7e3b7e8ea13aad39 [file] [log] [blame]
// Copyright 2015 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
/**
* Unit tests for the JS stash client.
*
* They are launched by extensions/renderer/mojo/stash_client_unittest.cc
*/
var test = require('test').binding;
var unittestBindings = require('test_environment_specific_bindings');
var utils = require('utils');
var modulesPromise = Promise.all([
requireAsync('stash_client'),
requireAsync('extensions/common/mojo/stash.mojom'),
requireAsync('mojo/public/js/core'),
]);
function writeAndClose(core, handle) {
var data = new Int8Array(1);
data[0] = 'a'.charCodeAt(0);
var result = core.writeData(handle, data, core.WRITE_DATA_FLAG_NONE);
test.assertEq(core.RESULT_OK, result.result);
test.assertEq(1, result.numBytes);
core.close(handle);
}
function readAndClose(core, handle) {
var result = core.readData(handle, core.READ_DATA_FLAG_NONE);
test.assertEq(core.RESULT_OK, result.result);
core.close(handle);
test.assertEq(1, result.buffer.byteLength);
test.assertEq('a'.charCodeAt(0), new Int8Array(result.buffer)[0]);
}
unittestBindings.exportTests([
function testStash() {
modulesPromise.then(function(modules) {
var stashClient = modules[0];
var stashMojom = modules[1];
var core = modules[2];
stashClient.registerClient('test', stashMojom.StashedObject, function() {
var stashedObject = new stashMojom.StashedObject();
stashedObject.id = 'test id';
stashedObject.data = [1, 2, 3, 4];
var dataPipe = core.createDataPipe({
flags: core.CREATE_DATA_PIPE_OPTIONS_FLAG_NONE,
elementNumBytes: 1,
capacityNumBytes: 10,
});
writeAndClose(core, dataPipe.producerHandle);
stashedObject.stashed_handles = [dataPipe.consumerHandle];
return [{serialization: stashedObject, monitorHandles: true}];
});
stashClient.saveStashForTesting();
}).then(test.succeed, test.fail);
},
function testRetrieve() {
modulesPromise.then(function(modules) {
var stashClient = modules[0];
var stashMojom = modules[1];
var core = modules[2];
return stashClient.retrieve('test', stashMojom.StashedObject)
.then(function(stashedObjects) {
test.assertEq(1, stashedObjects.length);
test.assertEq('test id', stashedObjects[0].id);
test.assertEq([1, 2, 3, 4], stashedObjects[0].data);
test.assertEq(1, stashedObjects[0].stashed_handles.length);
readAndClose(core, stashedObjects[0].stashed_handles[0]);
});
}).then(test.succeed, test.fail);
},
], test.runTests, exports);