| // 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' | 
 |  | 
 | const assert = require('assert') | 
 |  | 
 | const chrome = require('../chrome') | 
 | const edge = require('../edge') | 
 | const error = require('../lib/error') | 
 | const firefox = require('../firefox') | 
 | const ie = require('../ie') | 
 | const safari = require('../safari') | 
 | const test = require('../lib/test') | 
 | const { Browser } = require('../lib/capabilities') | 
 | const { Pages } = require('../lib/test') | 
 | const { Builder, Capabilities } = require('..') | 
 |  | 
 | test.suite(function (env) { | 
 |   const BROWSER_MAP = new Map([ | 
 |     [Browser.CHROME, chrome.Driver], | 
 |     [Browser.EDGE, edge.Driver], | 
 |     [Browser.FIREFOX, firefox.Driver], | 
 |     [Browser.INTERNET_EXPLORER, ie.Driver], | 
 |     [Browser.SAFARI, safari.Driver], | 
 |   ]) | 
 |  | 
 |   if (BROWSER_MAP.has(env.browser.name)) { | 
 |     describe('builder creates thenable driver instances', function () { | 
 |       let driver | 
 |  | 
 |       after(() => driver && driver.quit()) | 
 |  | 
 |       it(env.browser.name, function () { | 
 |         driver = env.builder().build() | 
 |  | 
 |         const want = BROWSER_MAP.get(env.browser.name) | 
 |         assert.ok( | 
 |           driver instanceof want, | 
 |           `want ${want.name}, but got ${driver.name}` | 
 |         ) | 
 |         assert.strictEqual(typeof driver.then, 'function') | 
 |  | 
 |         return ( | 
 |           driver | 
 |             .then((d) => | 
 |               assert.ok( | 
 |                 d instanceof want, | 
 |                 `want ${want.name}, but got ${d.name}` | 
 |               ) | 
 |             ) | 
 |             // Load something so the safari driver doesn't crash from starting and | 
 |             // stopping in short time. | 
 |             .then(() => driver.get(Pages.echoPage)) | 
 |         ) | 
 |       }) | 
 |     }) | 
 |   } | 
 |  | 
 |   if (BROWSER_MAP.has(env.browser.name)) { | 
 |     describe('builder allows to set a single capability', function () { | 
 |       let driver | 
 |  | 
 |       after(() => driver && driver.quit()) | 
 |  | 
 |       it(env.browser.name, async function () { | 
 |         let timeouts = { implicit: 0, pageLoad: 1000, script: 1000 } | 
 |         driver = new Builder() | 
 |           .setCapability('timeouts', timeouts) | 
 |           .forBrowser(env.browser.name) | 
 |           .build() | 
 |  | 
 |         let caps = await getCaps(driver) | 
 |         assert.deepEqual(caps.get('timeouts'), timeouts) | 
 |       }) | 
 |     }) | 
 |   } | 
 |  | 
 |   async function getCaps(driver) { | 
 |     return driver.getCapabilities() | 
 |   } | 
 |  | 
 |   describe('Builder', function () { | 
 |     describe('catches incorrect use of browser options class', function () { | 
 |       function test(key, options) { | 
 |         it(key, async function () { | 
 |           let builder = new Builder().withCapabilities( | 
 |             new Capabilities() | 
 |               .set('browserName', 'fake-browser-should-not-try-to-start') | 
 |               .set(key, new options()) | 
 |           ) | 
 |           try { | 
 |             let driver = await builder.build() | 
 |             await driver.quit() | 
 |             return Promise.reject(Error('should have failed')) | 
 |           } catch (ex) { | 
 |             if (!(ex instanceof error.InvalidArgumentError)) { | 
 |               throw ex | 
 |             } | 
 |           } | 
 |         }) | 
 |       } | 
 |  | 
 |       test('chromeOptions', chrome.Options) | 
 |       test('moz:firefoxOptions', firefox.Options) | 
 |       test('safari.options', safari.Options) | 
 |     }) | 
 |   }) | 
 | }) |