Deployed the page to Github Pages.
This commit is contained in:
parent
1d79754e93
commit
2c89899458
62797 changed files with 6551425 additions and 15279 deletions
120
node_modules/selenium-webdriver/test/firefox/extension_test.js
generated
vendored
Normal file
120
node_modules/selenium-webdriver/test/firefox/extension_test.js
generated
vendored
Normal file
|
@ -0,0 +1,120 @@
|
|||
// 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')));
|
||||
});
|
||||
});
|
||||
});
|
||||
});
|
||||
});
|
244
node_modules/selenium-webdriver/test/firefox/firefox_test.js
generated
vendored
Normal file
244
node_modules/selenium-webdriver/test/firefox/firefox_test.js
generated
vendored
Normal file
|
@ -0,0 +1,244 @@
|
|||
// 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 path = require('path');
|
||||
|
||||
var firefox = require('../../firefox'),
|
||||
io = require('../../io'),
|
||||
test = require('../../lib/test'),
|
||||
assert = require('../../testing/assert'),
|
||||
Context = require('../../firefox').Context,
|
||||
error = require('../..').error;
|
||||
|
||||
var {consume} = require('../../lib/promise');
|
||||
|
||||
|
||||
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');
|
||||
|
||||
|
||||
test.suite(function(env) {
|
||||
describe('firefox', function() {
|
||||
describe('Options', function() {
|
||||
let driver;
|
||||
|
||||
beforeEach(function() {
|
||||
driver = null;
|
||||
});
|
||||
|
||||
afterEach(function() {
|
||||
if (driver) {
|
||||
return driver.quit();
|
||||
}
|
||||
});
|
||||
|
||||
/**
|
||||
* @param {...string} extensions the extensions to install.
|
||||
* @return {!firefox.Profile} a new profile.
|
||||
*/
|
||||
function profileWithExtensions(...extensions) {
|
||||
let profile = new firefox.Profile();
|
||||
profile.setPreference('xpinstall.signatures.required', false);
|
||||
extensions.forEach(ext => profile.addExtension(ext));
|
||||
return profile;
|
||||
}
|
||||
|
||||
/**
|
||||
* Runs a test that requires Firefox Developer Edition. The test will be
|
||||
* skipped if dev cannot be found on the current system.
|
||||
*/
|
||||
function runWithFirefoxDev(options, testFn) {
|
||||
return firefox.Channel.AURORA.locate().then(exe => {
|
||||
options.setBinary(exe);
|
||||
driver = env.builder()
|
||||
.setFirefoxOptions(options)
|
||||
.build();
|
||||
return driver.call(testFn);
|
||||
}, err => {
|
||||
console.warn(
|
||||
'Skipping test: could not find Firefox Dev Edition: ' + err);
|
||||
});
|
||||
}
|
||||
|
||||
describe('can start Firefox with custom preferences', function() {
|
||||
function runTest(opt_dir) {
|
||||
return consume(function*() {
|
||||
let profile = new firefox.Profile(opt_dir);
|
||||
profile.setPreference('general.useragent.override', 'foo;bar');
|
||||
|
||||
let options = new firefox.Options().setProfile(profile);
|
||||
|
||||
driver = env.builder().
|
||||
setFirefoxOptions(options).
|
||||
build();
|
||||
|
||||
yield driver.get('data:text/html,<html><div>content</div></html>');
|
||||
|
||||
var userAgent = yield driver.executeScript(
|
||||
'return window.navigator.userAgent');
|
||||
assert(userAgent).equalTo('foo;bar');
|
||||
});
|
||||
}
|
||||
|
||||
test.it('profile created from scratch', function() {
|
||||
return runTest();
|
||||
});
|
||||
|
||||
test.it('profile created from template', function() {
|
||||
return io.tmpDir().then(runTest);
|
||||
});
|
||||
});
|
||||
|
||||
test.it('can start Firefox with a jetpack extension', function() {
|
||||
let profile = profileWithExtensions(JETPACK_EXTENSION);
|
||||
let options = new firefox.Options().setProfile(profile);
|
||||
|
||||
return runWithFirefoxDev(options, function*() {
|
||||
yield loadJetpackPage(driver,
|
||||
'data:text/html;charset=UTF-8,<html><div>content</div></html>');
|
||||
|
||||
let text =
|
||||
yield driver.findElement({id: 'jetpack-sample-banner'}).getText();
|
||||
assert(text).equalTo('Hello, world!');
|
||||
});
|
||||
});
|
||||
|
||||
test.it('can start Firefox with a normal extension', function() {
|
||||
let profile = profileWithExtensions(NORMAL_EXTENSION);
|
||||
let options = new firefox.Options().setProfile(profile);
|
||||
|
||||
return runWithFirefoxDev(options, function*() {
|
||||
yield driver.get('data:text/html,<html><div>content</div></html>');
|
||||
|
||||
let footer =
|
||||
yield driver.findElement({id: 'sample-extension-footer'});
|
||||
let text = yield footer.getText();
|
||||
assert(text).equalTo('Goodbye');
|
||||
});
|
||||
});
|
||||
|
||||
test.it('can start Firefox with a webextension extension', function() {
|
||||
let profile = profileWithExtensions(WEBEXTENSION_EXTENSION);
|
||||
let options = new firefox.Options().setProfile(profile);
|
||||
|
||||
return runWithFirefoxDev(options, function*() {
|
||||
yield driver.get(test.Pages.echoPage);
|
||||
|
||||
let footer =
|
||||
yield driver.findElement({id: 'webextensions-selenium-example'});
|
||||
let text = yield footer.getText();
|
||||
assert(text).equalTo('Content injected by webextensions-selenium-example');
|
||||
});
|
||||
});
|
||||
|
||||
test.it('can start Firefox with multiple extensions', function() {
|
||||
let profile =
|
||||
profileWithExtensions(JETPACK_EXTENSION, NORMAL_EXTENSION);
|
||||
let options = new firefox.Options().setProfile(profile);
|
||||
|
||||
return runWithFirefoxDev(options, function*() {
|
||||
yield loadJetpackPage(driver,
|
||||
'data:text/html;charset=UTF-8,<html><div>content</div></html>');
|
||||
|
||||
let banner =
|
||||
yield driver.findElement({id: 'jetpack-sample-banner'}).getText();
|
||||
assert(banner).equalTo('Hello, world!');
|
||||
|
||||
let footer =
|
||||
yield driver.findElement({id: 'sample-extension-footer'})
|
||||
.getText();
|
||||
assert(footer).equalTo('Goodbye');
|
||||
});
|
||||
});
|
||||
|
||||
function loadJetpackPage(driver, url) {
|
||||
// On linux the jetpack extension does not always run the first time
|
||||
// we load a page. If this happens, just reload the page (a simple
|
||||
// refresh doesn't appear to work).
|
||||
return driver.wait(function() {
|
||||
driver.get(url);
|
||||
return driver.findElements({id: 'jetpack-sample-banner'})
|
||||
.then(found => found.length > 0);
|
||||
}, 3000);
|
||||
}
|
||||
});
|
||||
|
||||
describe('binary management', function() {
|
||||
var driver1, driver2;
|
||||
|
||||
test.ignore(env.isRemote).
|
||||
it('can start multiple sessions with single binary instance', function*() {
|
||||
var options = new firefox.Options().setBinary(new firefox.Binary);
|
||||
env.builder().setFirefoxOptions(options);
|
||||
driver1 = yield env.builder().build();
|
||||
driver2 = yield env.builder().build();
|
||||
// Ok if this doesn't fail.
|
||||
});
|
||||
|
||||
test.afterEach(function*() {
|
||||
if (driver1) {
|
||||
yield driver1.quit();
|
||||
}
|
||||
|
||||
if (driver2) {
|
||||
yield driver2.quit();
|
||||
}
|
||||
});
|
||||
});
|
||||
|
||||
describe('context switching', function() {
|
||||
var driver;
|
||||
|
||||
test.beforeEach(function*() {
|
||||
driver = yield env.builder().build();
|
||||
});
|
||||
|
||||
test.afterEach(function() {
|
||||
if (driver) {
|
||||
return driver.quit();
|
||||
}
|
||||
});
|
||||
|
||||
test.it('can get context', function() {
|
||||
return assert(driver.getContext()).equalTo(Context.CONTENT);
|
||||
});
|
||||
|
||||
test.it('can set context', function*() {
|
||||
yield driver.setContext(Context.CHROME);
|
||||
let ctxt = yield driver.getContext();
|
||||
assert(ctxt).equalTo(Context.CHROME);
|
||||
|
||||
yield driver.setContext(Context.CONTENT);
|
||||
ctxt = yield driver.getContext();
|
||||
assert(ctxt).equalTo(Context.CONTENT);
|
||||
});
|
||||
|
||||
test.it('throws on unknown context', function() {
|
||||
return driver.setContext("foo").then(assert.fail, function(e) {
|
||||
assert(e).instanceOf(error.InvalidArgumentError);
|
||||
});
|
||||
});
|
||||
});
|
||||
|
||||
});
|
||||
}, {browsers: ['firefox']});
|
140
node_modules/selenium-webdriver/test/firefox/profile_test.js
generated
vendored
Normal file
140
node_modules/selenium-webdriver/test/firefox/profile_test.js
generated
vendored
Normal file
|
@ -0,0 +1,140 @@
|
|||
// 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'),
|
||||
fs = require('fs'),
|
||||
path = require('path');
|
||||
|
||||
var promise = require('../..').promise,
|
||||
Profile = require('../../firefox/profile').Profile,
|
||||
decode = require('../../firefox/profile').decode,
|
||||
loadUserPrefs = require('../../firefox/profile').loadUserPrefs,
|
||||
io = require('../../io');
|
||||
|
||||
|
||||
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.xpi';
|
||||
var NORMAL_EXTENSION_ID = 'sample@seleniumhq.org';
|
||||
var WEBEXTENSION_EXTENSION_ID = 'webextensions-selenium-example@example.com';
|
||||
|
||||
|
||||
|
||||
describe('Profile', function() {
|
||||
describe('setPreference', function() {
|
||||
it('allows setting custom properties', function() {
|
||||
var profile = new Profile();
|
||||
assert.equal(undefined, profile.getPreference('foo'));
|
||||
|
||||
profile.setPreference('foo', 'bar');
|
||||
assert.equal('bar', profile.getPreference('foo'));
|
||||
});
|
||||
|
||||
it('allows overriding mutable properties', function() {
|
||||
var profile = new Profile();
|
||||
|
||||
profile.setPreference('browser.newtab.url', 'http://www.example.com');
|
||||
assert.equal('http://www.example.com',
|
||||
profile.getPreference('browser.newtab.url'));
|
||||
});
|
||||
});
|
||||
|
||||
describe('writeToDisk', function() {
|
||||
it('copies template directory recursively', function() {
|
||||
var templateDir;
|
||||
return io.tmpDir().then(function(td) {
|
||||
templateDir = td;
|
||||
var foo = path.join(templateDir, 'foo');
|
||||
fs.writeFileSync(foo, 'Hello, world');
|
||||
|
||||
var bar = path.join(templateDir, 'subfolder/bar');
|
||||
fs.mkdirSync(path.dirname(bar));
|
||||
fs.writeFileSync(bar, 'Goodbye, world!');
|
||||
|
||||
return new Profile(templateDir).writeToDisk();
|
||||
}).then(function(profileDir) {
|
||||
assert.notEqual(profileDir, templateDir);
|
||||
|
||||
assert.equal('Hello, world',
|
||||
fs.readFileSync(path.join(profileDir, 'foo')));
|
||||
assert.equal('Goodbye, world!',
|
||||
fs.readFileSync(path.join(profileDir, 'subfolder/bar')));
|
||||
});
|
||||
});
|
||||
|
||||
it('does not copy lock files', function() {
|
||||
return io.tmpDir().then(function(dir) {
|
||||
fs.writeFileSync(path.join(dir, 'parent.lock'), 'lock');
|
||||
fs.writeFileSync(path.join(dir, 'lock'), 'lock');
|
||||
fs.writeFileSync(path.join(dir, '.parentlock'), 'lock');
|
||||
return new Profile(dir).writeToDisk();
|
||||
}).then(function(dir) {
|
||||
assert.ok(fs.existsSync(dir));
|
||||
assert.ok(!fs.existsSync(path.join(dir, 'parent.lock')));
|
||||
assert.ok(!fs.existsSync(path.join(dir, 'lock')));
|
||||
assert.ok(!fs.existsSync(path.join(dir, '.parentlock')));
|
||||
});
|
||||
});
|
||||
|
||||
describe('user.js', function() {
|
||||
it('merges template user.js into preferences', function() {
|
||||
return io.tmpDir().then(function(dir) {
|
||||
fs.writeFileSync(path.join(dir, 'user.js'), [
|
||||
'user_pref("browser.newtab.url", "http://www.example.com")',
|
||||
'user_pref("dom.max_script_run_time", 1234)'
|
||||
].join('\n'));
|
||||
|
||||
return new Profile(dir).writeToDisk();
|
||||
}).then(function(profile) {
|
||||
return loadUserPrefs(path.join(profile, 'user.js'));
|
||||
}).then(function(prefs) {
|
||||
assert.equal('http://www.example.com', prefs['browser.newtab.url']);
|
||||
assert.equal(1234, prefs['dom.max_script_run_time']);
|
||||
});
|
||||
});
|
||||
});
|
||||
|
||||
describe('extensions', function() {
|
||||
it('are copied into new profile directory', function() {
|
||||
var profile = new Profile();
|
||||
profile.addExtension(JETPACK_EXTENSION);
|
||||
profile.addExtension(NORMAL_EXTENSION);
|
||||
profile.addExtension(WEBEXTENSION_EXTENSION);
|
||||
|
||||
return profile.writeToDisk().then(function(dir) {
|
||||
dir = path.join(dir, 'extensions');
|
||||
assertExists(JETPACK_EXTENSION_ID);
|
||||
assertExists(NORMAL_EXTENSION_ID);
|
||||
assertExists(WEBEXTENSION_EXTENSION_ID + '.xpi');
|
||||
|
||||
function assertExists(file) {
|
||||
assert.ok(
|
||||
fs.existsSync(path.join(dir, file)),
|
||||
`expected ${file} to exist`);
|
||||
}
|
||||
});
|
||||
});
|
||||
});
|
||||
});
|
||||
});
|
Loading…
Add table
Add a link
Reference in a new issue