Package com.opera.core.systems

Source Code of com.opera.core.systems.OperaSettingsTest$ExceptionOnConstructionRunner

/*
Copyright 2012 Opera Software ASA

Licensed 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.
*/

package com.opera.core.systems;

import com.opera.core.systems.model.ScreenCaptureReply;
import com.opera.core.systems.runner.AbstractOperaRunner;
import com.opera.core.systems.runner.OperaRunner;
import com.opera.core.systems.runner.OperaRunnerException;
import com.opera.core.systems.runner.inprocess.OperaInProcessRunner;
import com.opera.core.systems.runner.launcher.OperaLauncherRunner;
import com.opera.core.systems.scope.internal.OperaIntervals;
import com.opera.core.systems.testing.Ignore;
import com.opera.core.systems.testing.NoDriver;
import com.opera.core.systems.testing.OperaDriverTestCase;

import org.json.JSONException;
import org.junit.After;
import org.junit.Before;
import org.junit.Test;
import org.openqa.selenium.Capabilities;
import org.openqa.selenium.Platform;
import org.openqa.selenium.Proxy;
import org.openqa.selenium.WebDriverException;
import org.openqa.selenium.remote.DesiredCapabilities;

import java.io.IOException;
import java.util.ArrayList;
import java.util.List;
import java.util.Map;
import java.util.logging.Level;

import static com.opera.core.systems.OperaBinary.OPERA_PATH_ENV_VAR;
import static com.opera.core.systems.OperaProduct.CORE;
import static com.opera.core.systems.OperaProduct.DESKTOP;
import static com.opera.core.systems.OperaSettings.Capability.AUTOSTART;
import static com.opera.core.systems.internal.OperaDefaults.SERVER_DEFAULT_PORT;
import static com.opera.core.systems.internal.OperaDefaults.SERVER_DEFAULT_PORT_IDENTIFIER;
import static com.opera.core.systems.internal.OperaDefaults.SERVER_RANDOM_PORT_IDENTIFIER;
import static com.opera.core.systems.runner.launcher.OperaLauncherRunner.LAUNCHER_ENV_VAR;
import static org.hamcrest.CoreMatchers.instanceOf;
import static org.hamcrest.CoreMatchers.is;
import static org.hamcrest.CoreMatchers.not;
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertFalse;
import static org.junit.Assert.assertNotNull;
import static org.junit.Assert.assertNotSame;
import static org.junit.Assert.assertNull;
import static org.junit.Assert.assertThat;
import static org.junit.Assert.assertTrue;
import static org.junit.Assert.fail;
import static org.junit.matchers.JUnitMatchers.containsString;
import static org.openqa.selenium.Platform.LINUX;
import static org.openqa.selenium.Platform.WINDOWS;

@NoDriver
public class OperaSettingsTest extends OperaDriverTestCase {

  public static final String OLD_OPERA_PATH = System.getenv(OPERA_PATH_ENV_VAR);

  public OperaSettings settings;

  @Before
  public void beforeEach() {
    settings = new OperaSettings();
  }

  @After
  public void afterEach() {
    environment.unset(LAUNCHER_ENV_VAR);
    environment.set(OPERA_PATH_ENV_VAR, OLD_OPERA_PATH);
  }

  @Test
  public void construction() {
    assertNotNull(settings);
  }

  @Test
  public void loggingLevelIsInfo() {
    assertEquals(Level.INFO, settings.logging().getLevel());
  }

  @Test
  public void loggingLevelCanBeSet() {
    settings.logging().setLevel(Level.WARNING);
    assertEquals(Level.WARNING, settings.logging().getLevel());
  }

  @Test
  public void loggingFileIsNull() {
    assertNull(settings.logging().getFile());
  }

  @Test
  public void loggingFileCanBeSet() throws IOException {
    settings.logging().setFile(resources.textFile());
    assertEquals(resources.textFile(), settings.logging().getFile());
  }

  @Test(expected = WebDriverException.class)
  public void loggingFileToInvalidFileThrowsException() {
    settings.logging().setFile(resources.fakeFile());
  }

  @Test
  public void binaryDefaultIsNull() {
    assertNull(settings.getBinary());
  }

  @Test
  public void binaryCanBeSet() {
    try {
      settings.setBinary(resources.fakeFile());
      fail("Expected IllegalStateException");
    } catch (RuntimeException e) {
      assertThat(e, is(instanceOf(IllegalStateException.class)));
      assertThat(e.getMessage(), containsString("The executable does not exist"));
    }
  }

  @Test
  public void argumentsIsOperaArgumentsObject() {
    assertNotNull(settings.arguments());
  }

  @Test
  public void hostIsLoopbackAddressByDefault() {
    assertEquals("127.0.0.1", settings.getHost());
  }

  @Test
  public void hostCanBeSet() {
    settings.setHost("1.2.3.4");
    assertEquals("1.2.3.4", settings.getHost());
  }

  @Test
  public void portIsRandom() {
    // Of course, it might still happen that it assigns it to 7001...
    assertNotSame(SERVER_DEFAULT_PORT, settings.getPort());
  }

  @Test
  public void portSetToDefaultPortIdentifier() {
    settings.setPort(SERVER_DEFAULT_PORT_IDENTIFIER);
    assertThat(settings.getPort(), is(SERVER_DEFAULT_PORT));
  }

  @Test
  public void portSetToRandomPortIdentifier() {
    settings.setPort(SERVER_RANDOM_PORT_IDENTIFIER);
    assertThat(settings.getPort(), is(not(SERVER_DEFAULT_PORT)));
  }

  @Test
  public void portSetToSomethingElseIsRespected() {
    settings.setPort(1234);
    assertThat(settings.getPort(), is(1234));
  }

  @Test
  public void launcherReturnsLauncherLocationByDefault() {
    assertNotNull(settings.getLauncher());
    assertEquals(OperaLauncherRunner.LAUNCHER_DEFAULT_LOCATION, settings.getLauncher());
  }

  @Test
  @Ignore(platforms = WINDOWS, value = "Unable to set env vars on runtime on Windows")
  public void launcherReturnsEnvironmentalLauncherIfSet() {
    environment.set(LAUNCHER_ENV_VAR, resources.fakeFile().getPath());
    assertEquals(resources.fakeFile(), new OperaSettings().getLauncher());
  }

  @Test
  @Ignore(platforms = WINDOWS, value = "Unable to set env vars on runtime on Windows")
  public void launcherPrioritizesEnvironmentalLauncher() throws IOException {
    environment.set(LAUNCHER_ENV_VAR, resources.fakeFile().getPath());
    OperaSettings settings = new OperaSettings();
    settings.setLauncher(resources.executableBinary());
    assertEquals(resources.fakeFile(), settings.getLauncher());
  }

  @Test
  public void launcherCanBeSet() throws IOException {
    settings.setLauncher(resources.executableBinary());
    assertEquals(resources.executableBinary(), settings.getLauncher());
  }

  @Test(expected = IOException.class)
  public void launcherThrowsExceptionIfInvalid() throws IOException {
    settings.setLauncher(resources.fakeFile());
  }

  @Test
  public void profileIsOperaProfileObjectByDefault() {
    assertNotNull(settings.profile());
  }

  @Test
  public void profileCanBeSet() {
    OperaProfile profile = new OperaProfile();
    settings.setProfile(profile);
    assertEquals(profile, settings.profile());
  }

  @Test
  public void profileSetToNullThrows() {
    try {
      settings.setProfile((OperaProfile) null);
      fail("Expected NullPointerException");
    } catch (RuntimeException e) {
      assertThat(e, is(instanceOf(NullPointerException.class)));
    }
  }

  @Test
  public void profileSetToNullStringThrows() {
    try {
      settings.setProfile((String) null);
      fail("Expected NullPointerException");
    } catch (RuntimeException e) {
      assertThat(e, is(instanceOf(NullPointerException.class)));
    }
  }

  @Test
  public void profileCanBeSetUsingEmptyString() {
    settings.setProfile("");
    assertFalse(settings.supportsPd());
    assertNotNull(settings.profile());
  }

  @Test
  public void idleIsFalse() {
    assertEquals(false, settings.useIdle());
  }

  @Test
  public void idleCanBeSet() {
    settings.setIdle(true);
    assertEquals(true, settings.useIdle());
  }

  @Test
  public void displayIsNull() {
    assertNull(settings.getDisplay());
  }

  @Test
  public void displayCanBeSetOnLinuxOnly() {
    try {
      settings.setDisplay(7);
      if (!Platform.getCurrent().is(LINUX)) {
        fail("Expected exception on setting the framebuffer display");
      }
    } catch (RuntimeException e) {
      if (!Platform.getCurrent().is(LINUX)) {
        assertThat(e, is(instanceOf(UnsupportedOperationException.class)));
      }
    }
  }

  @Test
  public void autostartIsTrueByDefault() {
    assertTrue(settings.autostart());
  }

  @Test
  public void autostartCanBeSet() {
    settings.autostart(false);
    assertFalse(settings.autostart());
  }

  @Test
  public void autostartSetToFalseSetsPortToDefault() {
    settings.autostart(false);
    assertEquals(SERVER_DEFAULT_PORT, settings.getPort());
  }

  @Test
  public void proxyIsSetByDefault() {
    assertThat(settings.getProxy(), is(instanceOf(Proxy.class)));
  }

  @Test
  public void proxyCanBeSet() {
    Proxy proxy = new Proxy();
    proxy.setHttpProxy("4.4.4.4");

    settings.setProxy(proxy);
    assertEquals(proxy, settings.getProxy());
    assertEquals("4.4.4.4", settings.getProxy().getHttpProxy());
  }

  @Test
  public void proxyCanBeSetToNull() {
    settings.setProxy(null);
    assertNull(settings.getProxy());
  }

  @Test
  public void runnerReturnsInstanceOfOperaLauncherRunner() {
    AbstractOperaRunner runner = (AbstractOperaRunner) settings.getRunner();
    assertThat(runner, is(instanceOf(OperaLauncherRunner.class)));
    assertEquals(settings, runner.getSettings());
  }

  @Test
  public void runnerCanBeSet() {
    settings.setRunner(OperaInProcessRunner.class);

    AbstractOperaRunner runner = (AbstractOperaRunner) settings.getRunner();
    assertThat(runner, is(instanceOf(OperaInProcessRunner.class)));
    assertEquals(settings, runner.getSettings());
  }

  @Test
  public void runnerWithInvalidConstructor() {
    settings.setRunner(BadConstructorRunner.class);

    try {
      settings.getRunner();
      fail("Expected WebDriverException");
    } catch (RuntimeException e) {
      assertThat(e, is(instanceOf(WebDriverException.class)));
      assertThat(e.getMessage(), containsString("Invalid constructor in runner"));
    }
  }

  @Test
  public void runnerThatThrowsDuringConstruction() {
    settings.setRunner(ExceptionOnConstructionRunner.class);

    try {
      settings.getRunner();
      fail("Expected WebDriverException");
    } catch (RuntimeException e) {
      assertThat(e, is(instanceOf(WebDriverException.class)));
      assertThat(e.getMessage(), containsString("Runner threw exception on construction"));
    }
  }

  @Test
  public void noRestartIsFalse() {
    assertFalse(settings.noRestart());
  }

  @Test
  public void noRestartCanBeSet() {
    settings.noRestart(true);
    assertTrue(settings.noRestart());
  }

  @Test
  public void detachIsFalse() {
    assertFalse(settings.hasDetach());
  }

  @Test
  public void detachCanBeSet() {
    settings.setDetach(true);
    assertTrue(settings.hasDetach());
  }

  @Test
  public void productIsDesktop() {
    assertEquals(DESKTOP, settings.getProduct());
  }

  @Test
  public void productCanBeSet() {
    settings.setProduct(CORE);
    assertEquals(CORE, settings.getProduct());
  }

  @Test
  public void backendIsSoftware() {
    assertEquals("software", settings.getBackend());
  }

  @Test
  public void backendCanBeSet() {
    settings.setBackend("hardware");
    assertEquals("hardware", settings.getBackend());
  }

  @Test
  public void supportsDebugProxyIsTrueByDefault() {
    assertTrue(settings.supportsDebugProxy());
  }

  @Test
  public void supportsDebugProxyIsFalseIfDefaultServerPort() {
    settings.setPort(SERVER_DEFAULT_PORT_IDENTIFIER);
    assertFalse(settings.supportsDebugProxy());
  }

  @Test
  public void supportsPdIsTrueByDefault() {
    assertTrue(settings.supportsPd());
  }

  @Test
  public void supportsPdIsFalseIfProfileIsEmptyString() {
    settings.setProfile("");
    assertFalse(settings.supportsPd());
  }

  @Test
  public void supportsPdIsFalseIfProductIsCore() {
    settings.setProduct(CORE);
    assertFalse(settings.supportsPd());
  }

  @Test
  public void supportsPdIsFalseIfProductIsCoreAndProfileIsSet() {
    settings.setProduct(CORE);
    settings.setProfile(new OperaProfile());
    assertFalse(settings.supportsPd());
  }

  @Test
  public void canBeConvertedToCapabilities() {
    Capabilities capabilities = settings.toCapabilities();

    assertNotNull(capabilities);
    assertTrue(capabilities.asMap().size() > 0);
    assertEquals(true, capabilities.getCapability(AUTOSTART.getCapability()));
  }

  @Test
  public void surplusCapabilitiesAreIncludedWhenConvertedToCapabilities() {
    DesiredCapabilities capabilities = new DesiredCapabilities();
    capabilities.setCapability("foo", "bar");

    settings.merge(capabilities);

    for (Map.Entry<String, ?> capability : settings.toCapabilities().asMap().entrySet()) {
      if (capability.getKey().equals("foo") && capability.getValue().equals("bar")) {
        return;
      }
    }

    fail("Surplus capabilities not included in OperaSettings#toCapabilities()");
  }

  @Test
  public void toJsonConvertsBooleansToIntegers() throws IOException, JSONException {
    assertEquals(1, settings.toJson().get("autostart"));
  }

  @Test
  public void toJsonConvertsProfileToJson() throws IOException, JSONException {
    assertFalse(settings.toJson().get("profile") instanceof OperaProfile);
  }

  @Test
  public void toJsonConvertsArgumentsToJson() throws IOException, JSONException {
    assertFalse(settings.toJson().get("arguments") instanceof OperaArguments);
  }

  @Test
  public void toJsonConvertsEverythingElseToStrings() throws IOException, JSONException {
    assertEquals("127.0.0.1", settings.toJson().get("host"));
  }

  @Test
  public void toJsonConvertsRunnerToString() throws IOException, JSONException {
    assertEquals(settings.toJson().get("runner"), settings.getRunner().getClass().getName());
  }

  @Test
  public void stringRepresentation() {
    assertNotNull(settings.toString());
  }

  public static abstract class MockRunner implements OperaRunner {

    public void startOpera() throws OperaRunnerException {
    }

    public void stopOpera() throws OperaRunnerException {
    }

    public boolean isOperaRunning() {
      return false;
    }

    public boolean hasOperaCrashed() {
      return false;
    }

    public String getOperaCrashlog() {
      return null;
    }

    public void shutdown() {
    }

    public ScreenCaptureReply captureScreen() throws OperaRunnerException {
      return captureScreen(OperaIntervals.RUNNER_SCREEN_CAPTURE_TIMEOUT.getMs());
    }

    public ScreenCaptureReply captureScreen(long timeout) throws OperaRunnerException {
      return captureScreen(timeout, new ArrayList<String>());
    }

    public ScreenCaptureReply captureScreen(long timeout, List<String> knownMD5s)
        throws OperaRunnerException {
      return null;
    }

  }

  public static class BadConstructorRunner extends MockRunner {

  }

  public static class ExceptionOnConstructionRunner extends MockRunner {

    public ExceptionOnConstructionRunner(OperaSettings settings) {
      throw new UnsupportedOperationException("hoobaflooba");
    }

  }

}
TOP

Related Classes of com.opera.core.systems.OperaSettingsTest$ExceptionOnConstructionRunner

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.