Currently binary data is passed to functions and received in return as different types.
This API change has been designed to unify binary data handling across Bluetooth module.
Adding type:
typedef (byte[] or DOMString or Uint8Array) Bytes;
Adding functions:
byte[] toByteArray(Bytes);
DOMString toDOMString(Bytes);
Uint8Array toUint8Array(Bytes);
Changing functions signatures:
BluetoothLEServiceData(DOMString uuid, Bytes data);
BluetoothLEManufacturerData(DOMString uuid, Bytes data);
void BluetoothGATTCharacteristic::writeValue (Bytes value, optional SuccessCallback? successCallback, optional ErrorCallback? errorCallback);
void BluetoothGATTDescriptor::writeValue (Bytes value, optional SuccessCallback? successCallback, optional ErrorCallback? errorCallback);
unsigned long BluetoothSocket::writeData(Bytes);
[ACR]
https://code.sec.samsung.net/jira/browse/TWDAPI-259
[Verification]
Automatic bluetooth tct pass rate 100%
Unit tests for new functions added
Change-Id: I31e436149ecab6c4b7223ba493d13638cd707851
Signed-off-by: Arkadiusz Pietraszek <a.pietraszek@samsung.com>
return data_;
},
set: function(v) {
- data_ = Converter.toString(v);
+ try {
+ data_ = BluetoothManager_toDOMString(v);
+ }
+ catch (err) {
+ data_ = Converter.toString(v);
+ }
}
}
});
return data_;
},
set: function(v) {
- data_ = Converter.toString(v);
+ try {
+ data_ = BluetoothManager_toDOMString(v);
+ } catch (err) {
+ data_ = Converter.toString(v);
+ }
}
}
});
_bluetoothSocketListeners.addListener(this);
};
-BluetoothSocket.prototype.writeData = function() {
+BluetoothSocket.prototype.writeData = function(data) {
privUtils_.log('Entered BluetoothSocket.writeData()');
- var args = AV.validateArgs(arguments, [
- {
- name: 'data',
- type: AV.Types.ARRAY,
- values: AV.Types.BYTE
- }
- ]);
+ var byteData = BluetoothManager_toByteArray(data);
var callArgs = {
id: this._id,
- data: args.data
+ data: byteData
};
var result = native.callSync('BluetoothSocketWriteData', callArgs);
});
};
-var toByteArray = function(array) {
+var numberArrayToByteArray = function(array) {
var d = [];
array.forEach(function(b) {
if (native.isFailure(result)) {
native.callIfPossible(args.errorCallback, native.getErrorObject(result));
} else {
- var d = toByteArray(native.getResultObject(result));
+ var d = numberArrayToByteArray(native.getResultObject(result));
args.successCallback(d);
}
};
}
};
- this.writeValue = function() {
+ this.writeValue = function(value, successCallback, errorCallback) {
privUtils_.log('Entered BluetoothGATTCharacteristic.writeValue()');
- var args = AV.validateArgs(arguments, [
- {
- name: 'value',
- type: AV.Types.ARRAY,
- values: AV.Types.BYTE
- },
+ var args = AV.validateArgs([successCallback, errorCallback], [
{
name: 'successCallback',
type: AV.Types.FUNCTION,
var callArgs = {
handle: handle_,
- value: toByteArray(args.value),
+ value: BluetoothManager_toByteArray(value),
address: address_
};
var callback = function(event) {
if (event.handle === handle_) {
- args.callback(toByteArray(native.getResultObject(event)));
+ args.callback(numberArrayToByteArray(native.getResultObject(event)));
}
};
if (native.isFailure(result)) {
native.callIfPossible(args.errorCallback, native.getErrorObject(result));
} else {
- var d = toByteArray(native.getResultObject(result));
+ var d = numberArrayToByteArray(native.getResultObject(result));
args.successCallback(d);
}
};
}
};
- this.writeValue = function() {
+ this.writeValue = function(value, successCallback, errorCallback) {
privUtils_.log('Entered BluetoothGATTDescriptor.writeValue()');
- var args = AV.validateArgs(arguments, [
- {
- name: 'value',
- type: AV.Types.ARRAY,
- values: AV.Types.BYTE
- },
+ var args = AV.validateArgs([successCallback, errorCallback], [
{
name: 'successCallback',
type: AV.Types.FUNCTION,
var callArgs = {
handle: handle_,
- value: toByteArray(args.value),
+ value: BluetoothManager_toByteArray(value),
address: address_
};
return BluetoothManager_getLEAdapter();
};
+var BluetoothManager_checkAndNormalizeHexString = function(hexString) {
+ hexString = hexString.toLowerCase();
+ if (hexString.startsWith('0x')) {
+ hexString = hexString.substring(2);
+ }
+ if (!(/^[0-9a-f]+$/.test(hexString))) {
+ throw new WebAPIException(WebAPIException.TYPE_MISMATCH_ERR, 'Given string is not hexadecimal value');
+ }
+ if ('0' === hexString) {
+ return '00';
+ }
+ if (1 === hexString.length%2) {
+ // to save consistency with BluetoothLEManufacturerData, last character is omitted
+ hexString = hexString.replace(/.$/,'');
+ }
+ return hexString;
+}
+
+var BluetoothManager_HexStringToUint8Array = function(hexString) {
+ hexString = BluetoothManager_checkAndNormalizeHexString(hexString);
+ if (0 === hexString.length) {
+ return new Uint8Array([]);
+ }
+ var data = hexString.match(/[0-9a-f]{2}/g).map(function(byte) {return parseInt(byte, 16)});
+ return new Uint8Array(data);
+}
+
+var BluetoothManager_byteArrayToHexString = function(bytes) {
+ if (0 == bytes.length) {
+ return '';
+ }
+ return '0x' + Array.prototype.map.call(bytes, function(byte) {
+ return ('0' + (byte & 0xFF).toString(16)).slice(-2);
+ }).join('');
+}
+
+var BluetoothManager_toByteArray = function(data) {
+ if (String === data.constructor) {
+ return numberArrayToByteArray(BluetoothManager_HexStringToUint8Array(data));
+ } else {
+ try {
+ data = numberArrayToByteArray(data);
+ }
+ catch(err) {
+ throw new WebAPIException(WebAPIException.TYPE_MISMATCH_ERR, 'argument is not a valid Bytes type');
+ }
+ }
+ return data;
+};
+
+BluetoothManager.prototype.toByteArray = function(data) {
+ privUtils_.log('Entered BluetoothManager.toByteArray()');
+ return BluetoothManager_toByteArray(data);
+};
+
+var BluetoothManager_toDOMString = function(data) {
+ if (String === data.constructor) {
+ data = BluetoothManager_checkAndNormalizeHexString(data);
+ if (0 !== data.length) {
+ data = '0x' + data;
+ }
+ return data;
+ } else {
+ return BluetoothManager_byteArrayToHexString(numberArrayToByteArray(data));
+ }
+};
+
+BluetoothManager.prototype.toDOMString = function(data) {
+ privUtils_.log('Entered BluetoothManager.toDOMString()');
+ return BluetoothManager_toDOMString(data);
+};
+
+var BluetoothManager_toUint8Array = function(data) {
+ if (String === data.constructor) {
+ return BluetoothManager_HexStringToUint8Array(data);
+ } else {
+ try {
+ data = new Uint8Array(numberArrayToByteArray(data));
+ }
+ catch(err) {
+ throw new WebAPIException(WebAPIException.TYPE_MISMATCH_ERR, 'argument is not a valid Bytes type');
+ }
+ }
+ return data;
+};
+
+BluetoothManager.prototype.toUint8Array = function(data) {
+ privUtils_.log('Entered BluetoothManager.toUint8Array()');
+ return BluetoothManager_toUint8Array(data);
+};
+
var BluetoothManager_UUIDIsValid128Bit = function(uuid) {
var re128BitFormat = /^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$/;
if (re128BitFormat.test(uuid)) {
--- /dev/null
+mocha.setup('bdd');
+
+describe('toByteArray', function() {
+ ///////// argument of type String
+ // expected behaviour
+ it('should return [10], after getting "0a" argument', function(done) {
+ var StringArgument = "0a";
+ var expected = [10];
+ chai.expect(tizen.bluetooth.toByteArray(StringArgument)).to.eql(expected);
+ done();
+ });
+ it('should return [12], after getting "0C" argument', function(done) {
+ var StringArgument = "0C";
+ var expected = [12];
+ chai.expect(tizen.bluetooth.toByteArray(StringArgument)).to.eql(expected);
+ done();
+ });
+ it('should return [11], after getting "0b" argument', function(done) {
+ var StringArgument = "0b";
+ var expected = [11];
+ chai.expect(tizen.bluetooth.toByteArray(StringArgument)).to.eql(expected);
+ done();
+ });
+ it('should return [13], after getting "0D" argument', function(done) {
+ var StringArgument = "0D";
+ var expected = [13];
+ chai.expect(tizen.bluetooth.toByteArray(StringArgument)).to.eql(expected);
+ done();
+ });
+ it('should return [14], after getting "0E" argument', function(done) {
+ var StringArgument = "0E";
+ var expected = [14];
+ chai.expect(tizen.bluetooth.toByteArray(StringArgument)).to.eql(expected);
+ done();
+ });
+ it('should return [15, 10, 188, 222], after getting "0F0abCDE" argument', function(done) {
+ var StringArgument = "0F0abCDE";
+ var expected = [15, 10, 188, 222];
+ chai.expect(tizen.bluetooth.toByteArray(StringArgument)).to.eql(expected);
+ done();
+ });
+ it('should return [10], after getting "0x0a" argument', function(done) {
+ var StringArgument = "0x0a";
+ var expected = [10];
+ chai.expect(tizen.bluetooth.toByteArray(StringArgument)).to.eql(expected);
+ done();
+ });
+ it('should return [12], after getting "0X0C" argument', function(done) {
+ var StringArgument = "0X0C";
+ var expected = [12];
+ chai.expect(tizen.bluetooth.toByteArray(StringArgument)).to.eql(expected);
+ done();
+ });
+ it('should return [11], after getting "0x0b" argument', function(done) {
+ var StringArgument = "0x0b";
+ var expected = [11];
+ chai.expect(tizen.bluetooth.toByteArray(StringArgument)).to.eql(expected);
+ done();
+ });
+ it('should return [13], after getting "0X0D" argument', function(done) {
+ var StringArgument = "0x0D";
+ var expected = [13];
+ chai.expect(tizen.bluetooth.toByteArray(StringArgument)).to.eql(expected);
+ done();
+ });
+ it('should return [14], after getting "0x0E" argument', function(done) {
+ var StringArgument = "0X0E";
+ var expected = [14];
+ chai.expect(tizen.bluetooth.toByteArray(StringArgument)).to.eql(expected);
+ done();
+ });
+ it('should return [15, 10, 188, 222], after getting "0X0F0abCDE" argument', function(done) {
+ var StringArgument = "0x0F0abCDE";
+ var expected = [15, 10, 188, 222];
+ chai.expect(tizen.bluetooth.toByteArray(StringArgument)).to.eql(expected);
+ done();
+ });
+
+ // ignoring last character in string with odd length
+ it('should return [0], after getting "0" argument', function(done) {
+ var StringArgument = "0";
+ var expected = [0];
+ chai.expect(tizen.bluetooth.toByteArray(StringArgument)).to.eql(expected);
+ done();
+ });
+ it('should return [1], after getting "012" argument', function(done) {
+ var StringArgument = "012";
+ var expected = [1];
+ chai.expect(tizen.bluetooth.toByteArray(StringArgument)).to.eql(expected);
+ done();
+ });
+ it('should return [1, 35], after getting "01234" argument', function(done) {
+ var StringArgument = "01234";
+ var expected = [1, 35];
+ chai.expect(tizen.bluetooth.toByteArray(StringArgument)).to.eql(expected);
+ done();
+ });
+ it('should return [1, 35, 69], after getting "0123456" argument', function(done) {
+ var StringArgument = "0123456";
+ var expected = [1, 35, 69];
+ chai.expect(tizen.bluetooth.toByteArray(StringArgument)).to.eql(expected);
+ done();
+ });
+ it('should return [1, 35, 69, 103], after getting "01234567f" argument', function(done) {
+ var StringArgument = "01234567f";
+ var expected = [1, 35, 69, 103];
+ chai.expect(tizen.bluetooth.toByteArray(StringArgument)).to.eql(expected);
+ done();
+ });
+ it('should return [], after getting "1" argument', function(done) {
+ var StringArgument = "1";
+ var expected = [];
+ chai.expect(tizen.bluetooth.toByteArray(StringArgument)).to.eql(expected);
+ done();
+ });
+
+ // Exceptions with DOMString input
+ it('should throw TypeMismatchError if argument is not of a valid Byte type: "NotAValidByte"', function(done) {
+ try {
+ tizen.bluetooth.toByteArray('NotAValidByte');
+ done(new Error('Expected TypeMismatchError.'));
+ } catch (error) {
+ chai.expect(error.name).to.equal('TypeMismatchError');
+ done();
+ }
+ });
+ it('should throw TypeMismatchError if argument is not of a valid Byte type: "0x0x1234"', function(done) {
+ try {
+ tizen.bluetooth.toByteArray('0x0x1234');
+ done(new Error('Expected TypeMismatchError.'));
+ } catch (error) {
+ chai.expect(error.name).to.equal('TypeMismatchError');
+ done();
+ }
+ });
+
+ ///////// argument of type byte[]
+ // expected behaviour
+ it('should return [1], after getting [1] argument', function(done) {
+ var ByteArgument = [1];
+ var expected = [1];
+ chai.expect(tizen.bluetooth.toByteArray(ByteArgument)).to.eql(expected);
+ done();
+ });
+ it('should return [12], after getting [12] argument', function(done) {
+ var ByteArgument = [12];
+ var expected = [12];
+ chai.expect(tizen.bluetooth.toByteArray(ByteArgument)).to.eql(expected);
+ done();
+ });
+ it('should return [15, 10, 188, 222], after getting [15, 10, 188, 222] argument', function(done) {
+ var ByteArgument = [15, 10, 188, 222];
+ var expected = [15, 10, 188, 222];
+ chai.expect(tizen.bluetooth.toByteArray(ByteArgument)).to.eql(expected);
+ done();
+ });
+ it('should return [241, 246, 138], after getting [-15, -10, -118] argument', function(done) {
+ var ByteArgument = [-15, -10, -118];
+ var expected = [241, 246, 138];
+ chai.expect(tizen.bluetooth.toByteArray(ByteArgument)).to.eql(expected);
+ done();
+ });
+ it('should return [36, 242, 86, 15], after getting [-1500, 1010, -2218, 9999] argument', function(done) {
+ var ByteArgument = [-1500, 1010, -2218, 9999];
+ var expected = [36, 242, 86, 15];
+ chai.expect(tizen.bluetooth.toByteArray(ByteArgument)).to.eql(expected);
+ done();
+ });
+ it('should return [], after getting [] argument', function(done) {
+ var ByteArgument = [];
+ var expected = [];
+ chai.expect(tizen.bluetooth.toByteArray(ByteArgument)).to.eql(expected);
+ done();
+ });
+
+ ///////// argument of type Uint8Array
+ // expected behaviour
+ it('should return [1], after getting Uint8Array[1] argument', function(done) {
+ var Uint8ArrayArgument = new Uint8Array([1]);
+ var expected = [1];
+ chai.expect(tizen.bluetooth.toByteArray(Uint8ArrayArgument)).to.eql(expected);
+ done();
+ });
+ it('should return [12], after getting Uint8Array[12] argument', function(done) {
+ var Uint8ArrayArgument = new Uint8Array([12]);
+ var expected = [12];
+ chai.expect(tizen.bluetooth.toByteArray(Uint8ArrayArgument)).to.eql(expected);
+ done();
+ });
+ it('should return [15, 10, 188, 222], after getting Uint8Array[15, 10, 188, 222] argument', function(done) {
+ var Uint8ArrayArgument = new Uint8Array([15, 10, 188, 222]);
+ var expected = [15, 10, 188, 222];
+ chai.expect(tizen.bluetooth.toByteArray(Uint8ArrayArgument)).to.eql(expected);
+ done();
+ });
+ it('should return [], after getting Uint8Array([]) argument', function(done) {
+ var Uint8ArrayArgument = new Uint8Array([]);
+ var expected = [];
+ chai.expect(tizen.bluetooth.toByteArray(Uint8ArrayArgument)).to.eql(expected);
+ done();
+ });
+});
+
+mocha.checkLeaks();
+mocha
+ .run()
+ .on('pass', function(test) {
+ console.log(test.title + ' OK');
+ })
+ .on('fail', function(test, err) {
+ console.error(test.title + ' FAILED');
+ console.error(err);
+ })
+ .on('end', function() {
+ console.log('All done');
+ });
--- /dev/null
+mocha.setup('bdd');
+
+describe('toByteArray', function() {
+ ///////// argument of type String
+ // expected behaviour
+ it('should return "0x0a", after getting "0a" argument', function(done) {
+ var StringArgument = '0a';
+ var expected = '0x0a';
+ chai.expect(tizen.bluetooth.toDOMString(StringArgument)).to.equal(expected);
+ done();
+ });
+ it('should return "0x0c", after getting "0C" argument', function(done) {
+ var StringArgument = '0C';
+ var expected = '0x0c';
+ chai.expect(tizen.bluetooth.toDOMString(StringArgument)).to.equal(expected);
+ done();
+ });
+ it('should return "0x0b", after getting "0b" argument', function(done) {
+ var StringArgument = '0b';
+ var expected = '0x0b';
+ chai.expect(tizen.bluetooth.toDOMString(StringArgument)).to.equal(expected);
+ done();
+ });
+ it('should return "0x0d", after getting "0D" argument', function(done) {
+ var StringArgument = '0D';
+ var expected = '0x0d';
+ chai.expect(tizen.bluetooth.toDOMString(StringArgument)).to.equal(expected);
+ done();
+ });
+ it('should return "0x0e", after getting "0E" argument', function(done) {
+ var StringArgument = '0E';
+ var expected = '0x0e';
+ chai.expect(tizen.bluetooth.toDOMString(StringArgument)).to.equal(expected);
+ done();
+ });
+ it('should return "0x0f0abcde", after getting "0F0abCDE" argument', function(done) {
+ var StringArgument = '0F0abCDE';
+ var expected = '0x0f0abcde';
+ chai.expect(tizen.bluetooth.toDOMString(StringArgument)).to.equal(expected);
+ done();
+ });
+ it('should return "0x0a", after getting "0x0a" argument', function(done) {
+ var StringArgument = '0x0a';
+ var expected = '0x0a';
+ chai.expect(tizen.bluetooth.toDOMString(StringArgument)).to.equal(expected);
+ done();
+ });
+ it('should return "0x0c", after getting "0X0C" argument', function(done) {
+ var StringArgument = '0X0C';
+ var expected = '0x0c';
+ chai.expect(tizen.bluetooth.toDOMString(StringArgument)).to.equal(expected);
+ done();
+ });
+ it('should return "0x0b", after getting "0x0b" argument', function(done) {
+ var StringArgument = '0x0b';
+ var expected = '0x0b';
+ chai.expect(tizen.bluetooth.toDOMString(StringArgument)).to.equal(expected);
+ done();
+ });
+ it('should return "0x0d", after getting "0X0D" argument', function(done) {
+ var StringArgument = '0x0D';
+ var expected = '0x0d';
+ chai.expect(tizen.bluetooth.toDOMString(StringArgument)).to.equal(expected);
+ done();
+ });
+ it('should return "0x0e", after getting "0x0E" argument', function(done) {
+ var StringArgument = '0X0E';
+ var expected = '0x0e';
+ chai.expect(tizen.bluetooth.toDOMString(StringArgument)).to.equal(expected);
+ done();
+ });
+ it('should return "0x0f0abcde", after getting "0X0F0abCDE" argument', function(done) {
+ var StringArgument = '0x0F0abCDE';
+ var expected = '0x0f0abcde';
+ chai.expect(tizen.bluetooth.toDOMString(StringArgument)).to.equal(expected);
+ done();
+ });
+
+ // ignoring last character in string with odd length
+ it('should return "0x00", after getting "0" argument', function(done) {
+ var StringArgument = '0';
+ var expected = '0x00';
+ chai.expect(tizen.bluetooth.toDOMString(StringArgument)).to.equal(expected);
+ done();
+ });
+ it('should return "01", after getting "012" argument', function(done) {
+ var StringArgument = '012';
+ var expected = '0x01';
+ chai.expect(tizen.bluetooth.toDOMString(StringArgument)).to.equal(expected);
+ done();
+ });
+ it('should return "0123", after getting "01234" argument', function(done) {
+ var StringArgument = '01234';
+ var expected = '0x0123';
+ chai.expect(tizen.bluetooth.toDOMString(StringArgument)).to.equal(expected);
+ done();
+ });
+ it('should return "012345", after getting "0123456" argument', function(done) {
+ var StringArgument = '0123456';
+ var expected = '0x012345';
+ chai.expect(tizen.bluetooth.toDOMString(StringArgument)).to.equal(expected);
+ done();
+ });
+ it('should return "01234567", after getting "01234567f" argument', function(done) {
+ var StringArgument = '01234567f';
+ var expected = '0x01234567';
+ chai.expect(tizen.bluetooth.toDOMString(StringArgument)).to.equal(expected);
+ done();
+ });
+ it('should return "", after getting "1" argument', function(done) {
+ var StringArgument = '1';
+ var expected = '';
+ chai.expect(tizen.bluetooth.toDOMString(StringArgument)).to.equal(expected);
+ done();
+ });
+
+ // Exceptions with DOMString input
+ it('should throw TypeMismatchError if argument is not of a valid Byte type: "NotAValidByte"', function(done) {
+ try {
+ tizen.bluetooth.toDOMString('NotAValidByte');
+ done(new Error('Expected TypeMismatchError.'));
+ } catch (error) {
+ chai.expect(error.name).to.equal('TypeMismatchError');
+ done();
+ }
+ });
+ it('should throw TypeMismatchError if argument is not of a valid Byte type: "0x0x1234"', function(done) {
+ try {
+ tizen.bluetooth.toDOMString('0x0x1234');
+ done(new Error('Expected TypeMismatchError.'));
+ } catch (error) {
+ chai.expect(error.name).to.equal('TypeMismatchError');
+ done();
+ }
+ });
+
+ ///////// argument of type byte[]
+ // expected behaviour
+ it('should return "0x01", after getting [1] argument', function(done) {
+ var ByteArgument = [1];
+ var expected = '0x01';
+ chai.expect(tizen.bluetooth.toDOMString(ByteArgument)).to.equal(expected);
+ done();
+ });
+ it('should return "0x0c", after getting [12] argument', function(done) {
+ var ByteArgument = [12];
+ var expected = '0x0c';
+ chai.expect(tizen.bluetooth.toDOMString(ByteArgument)).to.equal(expected);
+ done();
+ });
+ it('should return "0x0f0abcde", after getting [15, 10, 188, 222] argument', function(done) {
+ var ByteArgument = [15, 10, 188, 222];
+ var expected = '0x0f0abcde';
+ chai.expect(tizen.bluetooth.toDOMString(ByteArgument)).to.equal(expected);
+ done();
+ });
+ it('should return "0xf1f68a", after getting [-15, -10, -118] argument', function(done) {
+ var ByteArgument = [-15, -10, -118];
+ var expected = '0xf1f68a';
+ chai.expect(tizen.bluetooth.toDOMString(ByteArgument)).to.equal(expected);
+ done();
+ });
+ it('should return "0x24F2560f", after getting [-1500, 1010, -2218, 9999] argument', function(done) {
+ var ByteArgument = [-1500, 1010, -2218, 9999];
+ var expected = '0x24f2560f';
+ chai.expect(tizen.bluetooth.toDOMString(ByteArgument)).to.equal(expected);
+ done();
+ });
+ it('should throw TypeMismatchError, after getting [] argument', function(done) {
+ var ByteArgument = [];
+ var expected = '';
+ chai.expect(tizen.bluetooth.toDOMString(ByteArgument)).to.equal(expected);
+ done();
+ });
+
+ ///////// argument of type Uint8Array
+ // expected behaviour
+ it('should return "0x01", after getting Uint8Array[1] argument', function(done) {
+ var Uint8ArrayArgument = new Uint8Array([1]);
+ var expected = '0x01';
+ chai.expect(tizen.bluetooth.toDOMString(Uint8ArrayArgument)).to.equal(expected);
+ done();
+ });
+ it('should return "0x0c", after getting Uint8Array[12] argument', function(done) {
+ var Uint8ArrayArgument = new Uint8Array([12]);
+ var expected = '0x0c';
+ chai.expect(tizen.bluetooth.toDOMString(Uint8ArrayArgument)).to.equal(expected);
+ done();
+ });
+ it('should return "0x0f0abcde", after getting Uint8Array[15, 10, 188, 222] argument', function(done) {
+ var Uint8ArrayArgument = new Uint8Array([15, 10, 188, 222]);
+ var expected = '0x0f0abcde';
+ chai.expect(tizen.bluetooth.toDOMString(Uint8ArrayArgument)).to.equal(expected);
+ done();
+ });
+ it('should return "", after getting Uint8Array([]) argument', function(done) {
+ var Uint8ArrayArgument = new Uint8Array([]);
+ var expected = '';
+ chai.expect(tizen.bluetooth.toDOMString(Uint8ArrayArgument)).to.equal(expected);
+ done();
+ });
+});
+
+mocha.checkLeaks();
+mocha
+ .run()
+ .on('pass', function(test) {
+ console.log(test.title + ' OK');
+ })
+ .on('fail', function(test, err) {
+ console.error(test.title + ' FAILED');
+ console.error(err);
+ })
+ .on('end', function() {
+ console.log('All done');
+ });
--- /dev/null
+mocha.setup('bdd');
+
+describe('toUint8Array', function() {
+ ///////// argument of type String
+ // expected behaviour
+ it('should return Uint8Array[10], after getting "0a" argument', function(done) {
+ var StringArgument = "0a";
+ var expected = new Uint8Array([10]);
+ chai.expect(tizen.bluetooth.toUint8Array(StringArgument)).to.eql(expected);
+ done();
+ });
+ it('should return Uint8Array[12], after getting "0C" argument', function(done) {
+ var StringArgument = "0C";
+ var expected = new Uint8Array([12]);
+ chai.expect(tizen.bluetooth.toUint8Array(StringArgument)).to.eql(expected);
+ done();
+ });
+ it('should return Uint8Array[11], after getting "0b" argument', function(done) {
+ var StringArgument = "0b";
+ var expected = new Uint8Array([11]);
+ chai.expect(tizen.bluetooth.toUint8Array(StringArgument)).to.eql(expected);
+ done();
+ });
+ it('should return Uint8Array[13], after getting "0D" argument', function(done) {
+ var StringArgument = "0D";
+ var expected = new Uint8Array([13]);
+ chai.expect(tizen.bluetooth.toUint8Array(StringArgument)).to.eql(expected);
+ done();
+ });
+ it('should return Uint8Array[14], after getting "0E" argument', function(done) {
+ var StringArgument = "0E";
+ var expected = new Uint8Array([14]);
+ chai.expect(tizen.bluetooth.toUint8Array(StringArgument)).to.eql(expected);
+ done();
+ });
+ it('should return Uint8Array[15, 10, 188, 222], after getting "0F0abCDE" argument', function(done) {
+ var StringArgument = "0F0abCDE";
+ var expected = new Uint8Array([15, 10, 188, 222]);
+ chai.expect(tizen.bluetooth.toUint8Array(StringArgument)).to.eql(expected);
+ done();
+ });
+ it('should return Uint8Array[10], after getting "0x0a" argument', function(done) {
+ var StringArgument = "0x0a";
+ var expected = new Uint8Array([10]);
+ chai.expect(tizen.bluetooth.toUint8Array(StringArgument)).to.eql(expected);
+ done();
+ });
+ it('should return Uint8Array[12], after getting "0X0C" argument', function(done) {
+ var StringArgument = "0X0C";
+ var expected = new Uint8Array([12]);
+ chai.expect(tizen.bluetooth.toUint8Array(StringArgument)).to.eql(expected);
+ done();
+ });
+ it('should return Uint8Array[11], after getting "0x0b" argument', function(done) {
+ var StringArgument = "0x0b";
+ var expected = new Uint8Array([11]);
+ chai.expect(tizen.bluetooth.toUint8Array(StringArgument)).to.eql(expected);
+ done();
+ });
+ it('should return Uint8Array[13], after getting "0X0D" argument', function(done) {
+ var StringArgument = "0x0D";
+ var expected = new Uint8Array([13]);
+ chai.expect(tizen.bluetooth.toUint8Array(StringArgument)).to.eql(expected);
+ done();
+ });
+ it('should return Uint8Array[14], after getting "0x0E" argument', function(done) {
+ var StringArgument = "0X0E";
+ var expected = new Uint8Array([14]);
+ chai.expect(tizen.bluetooth.toUint8Array(StringArgument)).to.eql(expected);
+ done();
+ });
+ it('should return Uint8Array[15, 10, 188, 222], after getting "0X0F0abCDE" argument', function(done) {
+ var StringArgument = "0x0F0abCDE";
+ var expected = new Uint8Array([15, 10, 188, 222]);
+ chai.expect(tizen.bluetooth.toUint8Array(StringArgument)).to.eql(expected);
+ done();
+ });
+
+ // ignoring last character in string with odd length
+ it('should return Uint8Array[0], after getting "0" argument', function(done) {
+ var StringArgument = "0";
+ var expected = new Uint8Array([0]);
+ chai.expect(tizen.bluetooth.toUint8Array(StringArgument)).to.eql(expected);
+ done();
+ });
+ it('should return Uint8Array[1], after getting "012" argument', function(done) {
+ var StringArgument = "012";
+ var expected = new Uint8Array([1]);
+ chai.expect(tizen.bluetooth.toUint8Array(StringArgument)).to.eql(expected);
+ done();
+ });
+ it('should return Uint8Array[1, 35], after getting "01234" argument', function(done) {
+ var StringArgument = "01234";
+ var expected = new Uint8Array([1, 35]);
+ chai.expect(tizen.bluetooth.toUint8Array(StringArgument)).to.eql(expected);
+ done();
+ });
+ it('should return Uint8Array[1, 35, 69], after getting "0123456" argument', function(done) {
+ var StringArgument = "0123456";
+ var expected = new Uint8Array([1, 35, 69]);
+ chai.expect(tizen.bluetooth.toUint8Array(StringArgument)).to.eql(expected);
+ done();
+ });
+ it('should return Uint8Array[1, 35, 69, 103], after getting "01234567f" argument', function(done) {
+ var StringArgument = "01234567f";
+ var expected = new Uint8Array([1, 35, 69, 103]);
+ chai.expect(tizen.bluetooth.toUint8Array(StringArgument)).to.eql(expected);
+ done();
+ });
+ it('should return Uint8Array[], after getting "1" argument', function(done) {
+ var StringArgument = "1";
+ var expected = new Uint8Array([]);
+ chai.expect(tizen.bluetooth.toUint8Array(StringArgument)).to.eql(expected);
+ done();
+ });
+
+ // Exceptions with DOMString input
+ it('should throw TypeMismatchError if argument is not of a valid Byte type: "NotAValidByte"', function(done) {
+ try {
+ tizen.bluetooth.toUint8Array('NotAValidByte');
+ done(new Error('Expected TypeMismatchError.'));
+ } catch (error) {
+ chai.expect(error.name).to.equal('TypeMismatchError');
+ done();
+ }
+ });
+ it('should throw TypeMismatchError if argument is not of a valid Byte type: "0x0x1234"', function(done) {
+ try {
+ tizen.bluetooth.toUint8Array('0x0x1234');
+ done(new Error('Expected TypeMismatchError.'));
+ } catch (error) {
+ chai.expect(error.name).to.equal('TypeMismatchError');
+ done();
+ }
+ });
+
+ ///////// argument of type byte[]
+ // expected behaviour
+ it('should return Uint8Array[1], after getting [1] argument', function(done) {
+ var ByteArgument = [1];
+ var expected = new Uint8Array([1]);
+ chai.expect(tizen.bluetooth.toUint8Array(ByteArgument)).to.eql(expected);
+ done();
+ });
+ it('should return Uint8Array[12], after getting [12] argument', function(done) {
+ var ByteArgument = [12];
+ var expected = new Uint8Array([12]);
+ chai.expect(tizen.bluetooth.toUint8Array(ByteArgument)).to.eql(expected);
+ done();
+ });
+ it('should return Uint8Array[15, 10, 188, 222], after getting [15, 10, 188, 222] argument', function(done) {
+ var ByteArgument = [15, 10, 188, 222];
+ var expected = new Uint8Array([15, 10, 188, 222]);
+ chai.expect(tizen.bluetooth.toUint8Array(ByteArgument)).to.eql(expected);
+ done();
+ });
+ it('should return Uint8Array[241, 246, 138], after getting [-15, -10, -118] argument', function(done) {
+ var ByteArgument = [-15, -10, -118];
+ var expected = new Uint8Array([241, 246, 138]);
+ chai.expect(tizen.bluetooth.toUint8Array(ByteArgument)).to.eql(expected);
+ done();
+ });
+ it('should return Uint8Array[36, 242, 86, 15], after getting [-1500, 1010, -2218, 9999] argument', function(done) {
+ var ByteArgument = [-1500, 1010, -2218, 9999];
+ var expected = new Uint8Array([36, 242, 86, 15]);
+ chai.expect(tizen.bluetooth.toUint8Array(ByteArgument)).to.eql(expected);
+ done();
+ });
+ it('should return Uint8Array[], after getting [] argument', function(done) {
+ var ByteArgument = [];
+ var expected = new Uint8Array([]);
+ chai.expect(tizen.bluetooth.toUint8Array(ByteArgument)).to.eql(expected);
+ done();
+ });
+
+ ///////// argument of type Uint8Array
+ // expected behaviour
+ it('should return Uint8Array[1], after getting Uint8Array[1] argument', function(done) {
+ var Uint8ArrayArgument = new Uint8Array([1]);
+ var expected = new Uint8Array([1]);
+ chai.expect(tizen.bluetooth.toUint8Array(Uint8ArrayArgument)).to.eql(expected);
+ done();
+ });
+ it('should return Uint8Array[12], after getting Uint8Array[12] argument', function(done) {
+ var Uint8ArrayArgument = new Uint8Array([12]);
+ var expected = new Uint8Array([12]);
+ chai.expect(tizen.bluetooth.toUint8Array(Uint8ArrayArgument)).to.eql(expected);
+ done();
+ });
+ it('should return Uint8Array[15, 10, 188, 222], after getting Uint8Array[15, 10, 188, 222] argument', function(done) {
+ var Uint8ArrayArgument = new Uint8Array([15, 10, 188, 222]);
+ var expected = new Uint8Array([15, 10, 188, 222]);
+ chai.expect(tizen.bluetooth.toUint8Array(Uint8ArrayArgument)).to.eql(expected);
+ done();
+ });
+ it('should return Uint8Array[], after getting Uint8Array([]) argument', function(done) {
+ var Uint8ArrayArgument = new Uint8Array([]);
+ var expected = new Uint8Array([]);
+ chai.expect(tizen.bluetooth.toUint8Array(Uint8ArrayArgument)).to.eql(expected);
+ done();
+ });
+});
+
+mocha.checkLeaks();
+mocha
+ .run()
+ .on('pass', function(test) {
+ console.log(test.title + ' OK');
+ })
+ .on('fail', function(test, err) {
+ console.error(test.title + ' FAILED');
+ console.error(err);
+ })
+ .on('end', function() {
+ console.log('All done');
+ });