/* * Copyright 2016 Google Inc. All rights reserved. * * 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 org.physical_web.collection; import static org.junit.Assert.*; import org.junit.Test; import java.io.UnsupportedEncodingException; /** * Tests for the EddystoneBeacon class. */ public class EddystoneBeaconTest { @Test public void getFatBeaconTitleTest() throws UnsupportedEncodingException { // Array length failure assertEquals("", EddystoneBeacon.getFatBeaconTitle(new byte[]{})); assertEquals("", EddystoneBeacon.getFatBeaconTitle(new byte[]{0x01})); assertEquals("", EddystoneBeacon.getFatBeaconTitle(new byte[]{0x01, 0x02})); // Invalid byte sequence assertEquals("", EddystoneBeacon.getFatBeaconTitle(new byte[]{0x01, 0x02, 0x00})); // Valid title String title = "title"; byte[] titleBytes = title.getBytes("UTF-8"); int length = titleBytes.length; byte[] serviceData = new byte[length + 3]; System.arraycopy(titleBytes, 0, serviceData, 3, length); serviceData[0] = 0x10; serviceData[1] = 0x00; serviceData[2] = 0x0e; assertEquals(title, EddystoneBeacon.getFatBeaconTitle(serviceData)); } @Test public void isFatBeaconTest() { // Array length failure assertFalse(EddystoneBeacon.isFatBeacon(null)); assertFalse(EddystoneBeacon.isFatBeacon(new byte[]{})); assertFalse(EddystoneBeacon.isFatBeacon(new byte[]{0x01})); assertFalse(EddystoneBeacon.isFatBeacon(new byte[]{0x01, 0x02})); assertFalse(EddystoneBeacon.isFatBeacon(new byte[]{0x01, 0x02, 0x03})); // Not URL Type failure assertFalse(EddystoneBeacon.isFatBeacon(new byte[]{0x01, 0x02, 0x0e, 0x04})); // Doesn't start with title type assertFalse(EddystoneBeacon.isFatBeacon(new byte[]{0x10, 0x02, 0x03, 0x04})); // Fat beacon assertTrue(EddystoneBeacon.isFatBeacon(new byte[]{0x10, 0x02, 0x0e, 0x04})); } @Test public void isUrlFrameTest() { // Array length failure assertFalse(EddystoneBeacon.isUrlFrame(null)); assertFalse(EddystoneBeacon.isUrlFrame(new byte[]{})); // Not URL frame type assertFalse(EddystoneBeacon.isUrlFrame(new byte[]{0x20})); // URL frame type with various flags assertTrue(EddystoneBeacon.isUrlFrame(new byte[]{0x10})); assertTrue(EddystoneBeacon.isUrlFrame(new byte[]{0x11})); assertTrue(EddystoneBeacon.isUrlFrame(new byte[]{0x18})); assertTrue(EddystoneBeacon.isUrlFrame(new byte[]{0x1a})); assertTrue(EddystoneBeacon.isUrlFrame(new byte[]{0x1f})); } @Test public void parseFromServiceDataTest() { // Array length failure assertNull(EddystoneBeacon.parseFromServiceData(null, null)); assertNull(EddystoneBeacon.parseFromServiceData(new byte[]{}, null)); assertNull(EddystoneBeacon.parseFromServiceData(new byte[]{0x01}, null)); assertNull(EddystoneBeacon.parseFromServiceData(new byte[]{0x01, 0x02}, null)); assertNull(EddystoneBeacon.parseFromServiceData(null, new byte[]{})); assertNull(EddystoneBeacon.parseFromServiceData(null, new byte[]{0x01})); assertNull(EddystoneBeacon.parseFromServiceData(null, new byte[]{0x01, 0x02})); // Invalid URL assertNull(EddystoneBeacon.parseFromServiceData(new byte[]{0x10, 0x00, 0x4f}, null)); // Valid URL EddystoneBeacon beacon = EddystoneBeacon.parseFromServiceData(new byte[]{0x10, 0x00, 0x01}, null); assertEquals("https://www.", beacon.getUrl()); assertEquals(0x00, beacon.getFlags()); assertEquals(0x00, beacon.getTxPowerLevel()); } }