selenium-webdriver
Version:
The official WebDriver JavaScript bindings from the Selenium project
130 lines (110 loc) • 3.79 kB
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.
var assert = require('assert'),
fs = require('fs'),
path = require('path');
var base = require('../_base');
describe('Context', function() {
it('does not pollute the global scope', function() {
assert.equal('undefined', typeof goog);
var context = new base.Context();
assert.equal('undefined', typeof goog);
assert.equal('object', typeof context.closure.goog);
context.closure.goog.require('goog.array');
assert.equal('undefined', typeof goog);
assert.equal('object', typeof context.closure.goog.array);
});
});
function haveGenerators() {
try {
// Test for generator support.
new Function('function* x() {}');
return true;
} catch (ex) {
return false;
}
}
function runClosureTest(file) {
var name = path.basename(file);
name = name.substring(0, name.length - '.js'.length);
// Generator tests will fail to parse in ES5, so mark those tests as
// pending under ES5.
if (name.indexOf('_generator_') != -1 && !haveGenerators()) {
it(name);
return;
}
describe(name, function() {
var context = new base.Context(true);
context.closure.document.title = name;
if (process.env.VERBOSE == '1') {
context.closure.goog.require('webdriver.logging');
context.closure.goog.module.get('webdriver.logging')
.installConsoleHandler();
} else {
// Null out console so everything loads silently.
context.closure.console = null;
}
context.closure.CLOSURE_IMPORT_SCRIPT(file);
var tc = context.closure.G_testRunner.testCase;
if (!tc) {
tc = new context.closure.goog.testing.TestCase(name);
tc.autoDiscoverTests();
}
var shouldRunTests = tc.shouldRunTests();
var allTests = tc.getTests();
allTests.forEach(function(test) {
if (!shouldRunTests) {
it(test.name);
return;
}
it(test.name, function(done) {
tc.setTests([test]);
tc.setCompletedCallback(function() {
if (tc.isSuccess()) {
return done();
}
var results = tc.getTestResults();
done(Error('\n' + Object.keys(results).map(function(name) {
var msg =
[name + ': ' + (results[name].length ? 'FAILED' : 'PASSED')];
if (results[name].length) {
msg = msg.concat(results[name]);
}
return msg.join('\n');
}).join('\n')));
});
tc.runTests();
});
});
});
}
function findTests(dir) {
fs.readdirSync(dir).forEach(function(name) {
var file = path.join(dir, name);
var stat = fs.statSync(file);
if (stat.isDirectory() && name !== 'atoms' && name !== 'e2e') {
findTests(file);
return;
}
var l = file.length - '_test.js'.length;
if (l >= 0 && file.indexOf('_test.js', l) == l) {
runClosureTest(file);
}
});
}
findTests(path.join(
__dirname, base.isDevMode() ? '../../..' : '../lib', 'webdriver/test'));