package org.altbeacon.beacon;
import android.content.Context;
import android.util.Log;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.robolectric.RobolectricTestRunner;
import org.robolectric.annotation.Config;
import org.robolectric.shadows.ShadowApplication;
import java.util.Arrays;
import static junit.framework.Assert.assertEquals;
@Config(sdk = 18)
/**
* Created by dyoung on 7/22/14.
*/
@RunWith(RobolectricTestRunner.class)
public class BeaconTransmitterTest {
private static final String TAG = "BeaconTransmitterTest";
@Test
public void testBeaconAdvertisingBytes() {
org.robolectric.shadows.ShadowLog.stream = System.err;
Context context = ShadowApplication.getInstance().getApplicationContext();
Beacon beacon = new Beacon.Builder()
.setId1("2f234454-cf6d-4a0f-adf2-f4911ba9ffa6")
.setId2("1")
.setId3("2")
.setManufacturer(0x0118)
.setTxPower(-59)
.setDataFields(Arrays.asList(0L))
.build();
BeaconParser beaconParser = new BeaconParser()
.setBeaconLayout("m:2-3=beac,i:4-19,i:20-21,i:22-23,p:24-24,d:25-25");
byte[] data = beaconParser.getBeaconAdvertisementData(beacon);
BeaconTransmitter beaconTransmitter = new BeaconTransmitter(context, beaconParser);
// TODO: can't actually start transmitter here because Robolectric does not support API 21
assertEquals("Data should be 24 bytes long", 24, data.length);
String byteString = "";
for (int i = 0; i < data.length; i++) {
byteString += String.format("%02X", data[i]);
byteString += " ";
}
assertEquals("Advertisement bytes should be as expected", "BE AC 2F 23 44 54 CF 6D 4A 0F AD F2 F4 91 1B A9 FF A6 00 01 00 02 C5 00 ", byteString);
}
@Test
public void testBeaconAdvertisingBytesForEddystone() {
org.robolectric.shadows.ShadowLog.stream = System.err;
Context context = ShadowApplication.getInstance().getApplicationContext();
Beacon beacon = new Beacon.Builder()
.setId1("0x2f234454f4911ba9ffa6")
.setId2("0x000000000001")
.setManufacturer(0x0118)
.setTxPower(-59)
.build();
BeaconParser beaconParser = new BeaconParser()
.setBeaconLayout("s:0-1=feaa,m:2-2=00,p:3-3:-41,i:4-13,i:14-19");
byte[] data = beaconParser.getBeaconAdvertisementData(beacon);
BeaconTransmitter beaconTransmitter = new BeaconTransmitter(context, beaconParser);
// TODO: can't actually start transmitter here because Robolectric does not support API 21
String byteString = "";
for (int i = 0; i < data.length; i++) {
byteString += String.format("%02X", data[i]);
byteString += " ";
}
Log.d(TAG, "Advertising bytes are "+byteString );
assertEquals("Data should be 24 bytes long", 18, data.length);
assertEquals("Advertisement bytes should be as expected", "00 C5 2F 23 44 54 F4 91 1B A9 FF A6 00 00 00 00 00 01 ", byteString);
}
}