/*
* 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());
}
}