Package com.eclipsesource.tabris.internal

Source Code of com.eclipsesource.tabris.internal.ClientDeviceImplTest

/*******************************************************************************
* Copyright (c) 2013 EclipseSource and others.
* All rights reserved. This program and the accompanying materials
* are made available under the terms of the Eclipse Public License v1.0
* which accompanies this distribution, and is available at
* http://www.eclipse.org/legal/epl-v10.html
*
* Contributors:
*    EclipseSource - initial API and implementation
******************************************************************************/
package com.eclipsesource.tabris.internal;

import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertFalse;
import static org.junit.Assert.assertNull;
import static org.junit.Assert.assertSame;
import static org.junit.Assert.assertTrue;
import static org.mockito.Mockito.mock;
import static org.mockito.Mockito.verify;

import java.io.Serializable;
import java.util.Locale;

import org.eclipse.rap.json.JsonArray;
import org.eclipse.rap.json.JsonObject;
import org.junit.Rule;
import org.junit.Test;

import com.eclipsesource.tabris.device.ClientDevice;
import com.eclipsesource.tabris.device.ClientDevice.Capability;
import com.eclipsesource.tabris.device.ClientDevice.ConnectionType;
import com.eclipsesource.tabris.device.ClientDevice.Orientation;
import com.eclipsesource.tabris.device.ClientDevice.Platform;
import com.eclipsesource.tabris.device.ClientDeviceListener;
import com.eclipsesource.tabris.test.util.TabrisEnvironment;
import com.eclipsesource.tabris.test.util.TabrisRequest;


public class ClientDeviceImplTest {

  @Rule
  public TabrisEnvironment environment = new TabrisEnvironment();

  @Test
  public void testIsSerializable() {
    assertTrue( Serializable.class.isAssignableFrom( ClientDeviceImpl.class ) );
  }

  @Test
  public void testClientDeviceListenerIsSerializable() {
    assertTrue( Serializable.class.isAssignableFrom( ClientDeviceListener.class ) );
  }

  @Test
  public void testGetPlatformIsAndroid() {
    TabrisRequest request = environment.getRequest();
    request.setHeader( Constants.USER_AGENT, "com.eclipsesource.tabris.android" );
    ClientDevice device = new ClientDeviceImpl();

    Platform platform = device.getPlatform();

    assertSame( Platform.ANDROID, platform );
  }

  @Test
  public void testGetPlatformIsIOS() {
    TabrisRequest request = environment.getRequest();
    request.setHeader( Constants.USER_AGENT, "com.eclipsesource.tabris.ios" );
    ClientDevice device = new ClientDeviceImpl();

    Platform platform = device.getPlatform();

    assertSame( Platform.IOS, platform );
  }

  @Test
  public void testGetPlatformIsSWT() {
    TabrisRequest request = environment.getRequest();
    request.setHeader( Constants.USER_AGENT, "com.eclipsesource.tabris.swt" );
    ClientDevice device = new ClientDeviceImpl();

    Platform platform = device.getPlatform();

    assertSame( Platform.SWT, platform );
  }

  @Test
  public void testGetPlatformIsWebByDefault() {
    TabrisRequest request = environment.getRequest();
    request.setHeader( Constants.USER_AGENT, "Mozilla/bla" );
    ClientDevice device = new ClientDeviceImpl();

    Platform platform = device.getPlatform();

    assertSame( Platform.WEB, platform );
  }

  @Test
  public void testGetLocaleReturnsNullWhenLocaleNotSet() {
    environment.newGetRequest();
    ClientDeviceImpl deviceImpl = new ClientDeviceImpl();

    Locale locale = deviceImpl.getLocale();

    assertNull( locale );
  }

  @Test
  public void testGetLocalesReturnsEmptyArrayWhenLocaleNotSet() {
    environment.newGetRequest();
    ClientDeviceImpl deviceImpl = new ClientDeviceImpl();

    Locale[] locales = deviceImpl.getLocales();

    assertEquals( 0, locales.length );
  }

  @Test
  public void testGetLocaleReadsLocaleFromRequest() {
    TabrisRequest request = environment.newGetRequest();
    request.setHeader( "Accept-Language", "anything" );
    request.setLocales( new Locale( "en-US" ) );
    ClientDeviceImpl deviceImpl = new ClientDeviceImpl();

    Locale locale = deviceImpl.getLocale();

    assertEquals( new Locale( "en-US" ), locale );
  }

  @Test
  public void testGetLocalesReadsLocalesFromRequest() {
    TabrisRequest request = environment.newGetRequest();
    request.setHeader( "Accept-Language", "anything" );
    request.setLocales( new Locale( "en-US" ), new Locale( "de-DE" ) );
    ClientDeviceImpl deviceImpl = new ClientDeviceImpl();

    Locale[] locales = deviceImpl.getLocales();

    assertEquals( 2, locales.length );
    assertEquals( new Locale( "en-US" ), locales[ 0 ] );
    assertEquals( new Locale( "de-DE" ), locales[ 1 ] );
  }

  @Test
  public void testReturnsSaveLocalesCopy() {
    TabrisRequest request = environment.newGetRequest();
    request.setHeader( "Accept-Language", "anything" );
    request.setLocales( new Locale( "en-US" ) );
    ClientDeviceImpl deviceImpl = new ClientDeviceImpl();

    deviceImpl.getLocales()[ 0 ] = new Locale( "de-DE" );

    Locale[] locales = deviceImpl.getLocales();
    assertEquals( new Locale( "en-US" ), locales[ 0 ] );
  }

  @Test( expected = IllegalStateException.class )
  public void testGetTimezoneOffsetFailsWhenTimezoneOffsetNotSet() {
    ClientDeviceImpl deviceImpl = new ClientDeviceImpl();

    deviceImpl.getTimezoneOffset();
  }

  @Test
  public void testGetTimezoneOffset_readsTimezoneOffsetFromHandler() {
    ClientDeviceImpl deviceImpl = new ClientDeviceImpl();
    JsonObject parameters = new JsonObject();
    parameters.add( "timezoneOffset", -90 );

    environment.dispatchSetOnServiceObject( parameters );
    int timezoneOffset = deviceImpl.getTimezoneOffset();

    assertEquals( -90, timezoneOffset );
  }

  @Test
  public void testDetectsPortraitMode() {
    ClientDeviceImpl deviceImpl = new ClientDeviceImpl();
    JsonObject properties = new JsonObject();
    properties.add( "orientation", "PORTRAIT" );
    environment.dispatchSetOnServiceObject( properties );

    Orientation orientation = deviceImpl.getOrientation();

    assertSame( Orientation.PORTRAIT, orientation );
  }

  @Test
  public void testDetectsLandscapeMode() {
    ClientDeviceImpl deviceImpl = new ClientDeviceImpl();
    JsonObject properties = new JsonObject();
    properties.add( "orientation", "LANDSCAPE" );
    environment.dispatchSetOnServiceObject( properties );

    Orientation orientation = deviceImpl.getOrientation();

    assertSame( Orientation.LANDSCAPE, orientation );
  }

  @Test( expected = IllegalStateException.class )
  public void testFailsWithoutConnectionType() {
    ClientDeviceImpl deviceImpl = new ClientDeviceImpl();

    deviceImpl.getConnectionType();
  }

  @Test
  public void testKnowsConnectionTypeWifi() {
    ClientDeviceImpl deviceImpl = new ClientDeviceImpl();
    JsonObject properties = new JsonObject();
    properties.add( "connectionType", "WIFI" );

    environment.dispatchSetOnServiceObject( properties );
    ConnectionType connectionType = deviceImpl.getConnectionType();

    assertSame( ConnectionType.WIFI, connectionType );
  }

  @Test
  public void testKnowsConnectionTypeCelular() {
    ClientDeviceImpl deviceImpl = new ClientDeviceImpl();
    JsonObject properties = new JsonObject();
    properties.add( "connectionType", "CELLULAR" );

    environment.dispatchSetOnServiceObject( properties );
    ConnectionType connectionType = deviceImpl.getConnectionType();

    assertSame( ConnectionType.CELLULAR, connectionType );
  }

  @Test( expected = IllegalStateException.class )
  public void testFailsWithoutCapabilities() {
    ClientDeviceImpl deviceImpl = new ClientDeviceImpl();

    deviceImpl.hasCapability( Capability.LOCATION );
  }

  @Test
  public void testCanFindCapabilities() {
    ClientDeviceImpl deviceImpl = new ClientDeviceImpl();
    JsonObject properties = new JsonObject();
    JsonArray jsonArray = new JsonArray();
    jsonArray.add( "CAMERA" );
    jsonArray.add( "LOCATION" );
    properties.add( "capabilities", jsonArray );

    environment.dispatchSetOnServiceObject( properties );

    assertTrue( deviceImpl.hasCapability( Capability.LOCATION ) );
    assertTrue( deviceImpl.hasCapability( Capability.CAMERA ) );
    assertFalse( deviceImpl.hasCapability( Capability.MAPS ) );
    assertFalse( deviceImpl.hasCapability( Capability.MESSAGE ) );
    assertFalse( deviceImpl.hasCapability( Capability.PHONE ) );
  }

  @Test
  public void testCanFindAllCapabilities() {
    ClientDeviceImpl deviceImpl = new ClientDeviceImpl();
    JsonObject properties = new JsonObject();
    JsonArray jsonArray = new JsonArray();
    jsonArray.add( "CAMERA" );
    jsonArray.add( "LOCATION" );
    jsonArray.add( "MAPS" );
    jsonArray.add( "MESSAGE" );
    jsonArray.add( "PHONE" );
    properties.add( "capabilities", jsonArray );

    environment.dispatchSetOnServiceObject( properties );

    assertTrue( deviceImpl.hasCapability( Capability.LOCATION ) );
    assertTrue( deviceImpl.hasCapability( Capability.CAMERA ) );
    assertTrue( deviceImpl.hasCapability( Capability.MAPS ) );
    assertTrue( deviceImpl.hasCapability( Capability.MESSAGE ) );
    assertTrue( deviceImpl.hasCapability( Capability.PHONE ) );
  }

  @Test( expected = IllegalArgumentException.class )
  public void testAddListenerFailsWithNull() {
    ClientDevice device = new ClientDeviceImpl();

    device.addClientDeviceListener( null );
  }

  @Test( expected = IllegalArgumentException.class )
  public void testRemoveListenerFailsWithNull() {
    ClientDevice device = new ClientDeviceImpl();

    device.removeClientDeviceListener( null );
  }

  @Test
  public void testOrientationChangeNotifiesListener() {
    ClientDeviceImpl device = new ClientDeviceImpl();
    ClientDeviceListener listener = mock( ClientDeviceListener.class );
    device.addClientDeviceListener( listener );
    JsonObject properties = new JsonObject();
    properties.add( "orientation", "PORTRAIT" );

    environment.dispatchSetOnServiceObject( properties );

    verify( listener ).orientationChange( Orientation.PORTRAIT );
  }

  @Test
  public void testConnectionTypeChangeNotifiesListener() {
    ClientDeviceImpl device = new ClientDeviceImpl();
    ClientDeviceListener listener = mock( ClientDeviceListener.class );
    device.addClientDeviceListener( listener );
    JsonObject properties = new JsonObject();
    properties.add( "connectionType", "WIFI" );

    environment.dispatchSetOnServiceObject( properties );

    verify( listener ).connectionTypeChanged( ConnectionType.WIFI );
  }

  @Test
  public void testSetsVendor() {
    ClientDeviceImpl device = new ClientDeviceImpl();
    JsonObject properties = new JsonObject();
    properties.add( "vendor", "fooBar" );

    device.handleSet( properties );

    String vendor = device.getVendor();
    assertEquals( "fooBar", vendor );
  }

  @Test
  public void testSetsModel() {
    ClientDeviceImpl device = new ClientDeviceImpl();
    JsonObject properties = new JsonObject();
    properties.add( "model", "blub" );

    device.handleSet( properties );

    String model = device.getModel();
    assertEquals( "blub", model );
  }

  @Test
  public void testSetsOSVersion() {
    ClientDeviceImpl device = new ClientDeviceImpl();
    JsonObject properties = new JsonObject();
    properties.add( "osVersion", "7.1.0" );

    device.handleSet( properties );

    String version = device.getOSVersion();
    assertEquals( "7.1.0", version );
  }

  @Test
  public void testSetsScaleFactor() {
    ClientDeviceImpl device = new ClientDeviceImpl();
    JsonObject properties = new JsonObject();
    properties.add( "scaleFactor", 2.13F );

    device.handleSet( properties );

    float scaleFactor = device.getScaleFactor();
    assertEquals( 2.13F, scaleFactor, 0F );
  }
}
TOP

Related Classes of com.eclipsesource.tabris.internal.ClientDeviceImplTest

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.