120 lines
4.3 KiB
JavaScript
120 lines
4.3 KiB
JavaScript
// Licensed to the Software Freedom Conservancy (SFC) under one
|
|
// or more contributor license agreements. See the NOTICE file
|
|
// distributed with this work for additional information
|
|
// regarding copyright ownership. The SFC licenses this file
|
|
// to you under the Apache License, Version 2.0 (the
|
|
// "License"); you may not use this file except in compliance
|
|
// with the License. You may obtain a copy of the License at
|
|
//
|
|
// http://www.apache.org/licenses/LICENSE-2.0
|
|
//
|
|
// Unless required by applicable law or agreed to in writing,
|
|
// software distributed under the License is distributed on an
|
|
// "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
|
|
// KIND, either express or implied. See the License for the
|
|
// specific language governing permissions and limitations
|
|
// under the License.
|
|
|
|
'use strict';
|
|
|
|
var assert = require('assert'),
|
|
crypto = require('crypto'),
|
|
fs = require('fs'),
|
|
path = require('path');
|
|
|
|
var extension = require('../../firefox/extension'),
|
|
io = require('../../io'),
|
|
zip = require('../../io/zip'),
|
|
it = require('../../testing').it;
|
|
|
|
|
|
var JETPACK_EXTENSION = path.join(__dirname,
|
|
'../../lib/test/data/firefox/jetpack-sample.xpi');
|
|
var NORMAL_EXTENSION = path.join(__dirname,
|
|
'../../lib/test/data/firefox/sample.xpi');
|
|
var WEBEXTENSION_EXTENSION = path.join(__dirname,
|
|
'../../lib/test/data/firefox/webextension.xpi');
|
|
|
|
var JETPACK_EXTENSION_ID = 'jid1-EaXX7k0wwiZR7w@jetpack';
|
|
var NORMAL_EXTENSION_ID = 'sample@seleniumhq.org';
|
|
var WEBEXTENSION_EXTENSION_ID = 'webextensions-selenium-example@example.com';
|
|
|
|
|
|
describe('extension', function() {
|
|
it('can install a jetpack xpi file', function() {
|
|
return io.tmpDir().then(function(dir) {
|
|
return extension.install(JETPACK_EXTENSION, dir).then(function(id) {
|
|
assert.equal(JETPACK_EXTENSION_ID, id);
|
|
var file = path.join(dir, id + '.xpi');
|
|
assert.ok(fs.existsSync(file), 'no such file: ' + file);
|
|
assert.ok(!fs.statSync(file).isDirectory());
|
|
|
|
var copiedSha1 = crypto.createHash('sha1')
|
|
.update(fs.readFileSync(file))
|
|
.digest('hex');
|
|
|
|
var goldenSha1 = crypto.createHash('sha1')
|
|
.update(fs.readFileSync(JETPACK_EXTENSION))
|
|
.digest('hex');
|
|
|
|
assert.equal(copiedSha1, goldenSha1);
|
|
});
|
|
});
|
|
});
|
|
|
|
it('can install a normal xpi file', function() {
|
|
return io.tmpDir().then(function(dir) {
|
|
return extension.install(NORMAL_EXTENSION, dir).then(function(id) {
|
|
assert.equal(NORMAL_EXTENSION_ID, id);
|
|
|
|
var file = path.join(dir, NORMAL_EXTENSION_ID);
|
|
assert.ok(fs.statSync(file).isDirectory());
|
|
|
|
assert.ok(fs.existsSync(path.join(file, 'chrome.manifest')));
|
|
assert.ok(fs.existsSync(path.join(file, 'content/overlay.xul')));
|
|
assert.ok(fs.existsSync(path.join(file, 'content/overlay.js')));
|
|
assert.ok(fs.existsSync(path.join(file, 'install.rdf')));
|
|
});
|
|
});
|
|
});
|
|
|
|
it('can install a webextension xpi file', function() {
|
|
return io.tmpDir().then(function(dir) {
|
|
return extension.install(WEBEXTENSION_EXTENSION, dir).then(function(id) {
|
|
assert.equal(WEBEXTENSION_EXTENSION_ID, id);
|
|
var file = path.join(dir, id + '.xpi');
|
|
assert.ok(fs.existsSync(file), 'no such file: ' + file);
|
|
assert.ok(!fs.statSync(file).isDirectory());
|
|
|
|
var copiedSha1 = crypto.createHash('sha1')
|
|
.update(fs.readFileSync(file))
|
|
.digest('hex');
|
|
|
|
var goldenSha1 = crypto.createHash('sha1')
|
|
.update(fs.readFileSync(WEBEXTENSION_EXTENSION))
|
|
.digest('hex');
|
|
|
|
assert.equal(copiedSha1, goldenSha1);
|
|
});
|
|
});
|
|
});
|
|
|
|
it('can install an extension from a directory', function() {
|
|
return io.tmpDir().then(function(srcDir) {
|
|
return zip.unzip(NORMAL_EXTENSION, srcDir)
|
|
.then(() => io.tmpDir())
|
|
.then(dstDir => {
|
|
return extension.install(srcDir, dstDir).then(function(id) {
|
|
assert.equal(NORMAL_EXTENSION_ID, id);
|
|
|
|
var dir = path.join(dstDir, NORMAL_EXTENSION_ID);
|
|
|
|
assert.ok(fs.existsSync(path.join(dir, 'chrome.manifest')));
|
|
assert.ok(fs.existsSync(path.join(dir, 'content/overlay.xul')));
|
|
assert.ok(fs.existsSync(path.join(dir, 'content/overlay.js')));
|
|
assert.ok(fs.existsSync(path.join(dir, 'install.rdf')));
|
|
});
|
|
});
|
|
});
|
|
});
|
|
});
|