Implement exclusion filter (#175)
* Implement exclusion filter * Fix web filters * Apply Ai Suggestions * Fix scanFilterTest * Resolve Ai comments * Update readme and changelog * Update CHANGELOG.md Co-authored-by: Foti Dim <foti@navideck.com> * Update exclusion filter doc * Fix wording --------- Co-authored-by: Foti Dim <foti@navideck.com> Co-authored-by: Foti Dim <fotios.dimanidis@a2zebra.de>
This commit is contained in:
@@ -27,7 +27,10 @@ void main() {
|
||||
services: [],
|
||||
);
|
||||
|
||||
expect(filterUtil.manufacturerDataMatches(scanFilter, device), true);
|
||||
expect(
|
||||
filterUtil.manufacturerDataMatches(
|
||||
scanFilter.withManufacturerData, device),
|
||||
true);
|
||||
});
|
||||
|
||||
test('should not match when device has no manufacturer data', () {
|
||||
@@ -46,7 +49,10 @@ void main() {
|
||||
services: [],
|
||||
);
|
||||
|
||||
expect(filterUtil.manufacturerDataMatches(scanFilter, device), false);
|
||||
expect(
|
||||
filterUtil.manufacturerDataMatches(
|
||||
scanFilter.withManufacturerData, device),
|
||||
false);
|
||||
});
|
||||
|
||||
test(
|
||||
@@ -69,7 +75,10 @@ void main() {
|
||||
services: [],
|
||||
);
|
||||
|
||||
expect(filterUtil.manufacturerDataMatches(scanFilter, device), true);
|
||||
expect(
|
||||
filterUtil.manufacturerDataMatches(
|
||||
scanFilter.withManufacturerData, device),
|
||||
true);
|
||||
});
|
||||
|
||||
group('Payload Prefix Tests', () {
|
||||
@@ -94,7 +103,10 @@ void main() {
|
||||
services: [],
|
||||
);
|
||||
|
||||
expect(filterUtil.manufacturerDataMatches(scanFilter, device), true);
|
||||
expect(
|
||||
filterUtil.manufacturerDataMatches(
|
||||
scanFilter.withManufacturerData, device),
|
||||
true);
|
||||
});
|
||||
|
||||
test('should match with multiple manufacturer data entries', () {
|
||||
@@ -119,7 +131,10 @@ void main() {
|
||||
services: [],
|
||||
);
|
||||
|
||||
expect(filterUtil.manufacturerDataMatches(scanFilter, device), true);
|
||||
expect(
|
||||
filterUtil.manufacturerDataMatches(
|
||||
scanFilter.withManufacturerData, device),
|
||||
true);
|
||||
});
|
||||
});
|
||||
|
||||
@@ -146,7 +161,10 @@ void main() {
|
||||
services: [],
|
||||
);
|
||||
|
||||
expect(filterUtil.manufacturerDataMatches(scanFilter, device), true);
|
||||
expect(
|
||||
filterUtil.manufacturerDataMatches(
|
||||
scanFilter.withManufacturerData, device),
|
||||
true);
|
||||
});
|
||||
|
||||
test('should not match when masked values are different', () {
|
||||
@@ -171,7 +189,10 @@ void main() {
|
||||
services: [],
|
||||
);
|
||||
|
||||
expect(filterUtil.manufacturerDataMatches(scanFilter, device), false);
|
||||
expect(
|
||||
filterUtil.manufacturerDataMatches(
|
||||
scanFilter.withManufacturerData, device),
|
||||
false);
|
||||
});
|
||||
});
|
||||
});
|
||||
|
||||
+120
-23
@@ -9,7 +9,7 @@ void main() {
|
||||
var device1 = BleDevice(
|
||||
deviceId: '1',
|
||||
name: '1_device',
|
||||
services: ['1_ser'],
|
||||
services: ['20a1'],
|
||||
manufacturerDataList: [
|
||||
ManufacturerData(0x01, Uint8List.fromList([1, 2, 3])),
|
||||
],
|
||||
@@ -17,7 +17,7 @@ void main() {
|
||||
var device2 = BleDevice(
|
||||
deviceId: '2',
|
||||
name: '2_device',
|
||||
services: ['2_ser'],
|
||||
services: ['20a2'],
|
||||
manufacturerDataList: [
|
||||
ManufacturerData(0x02, Uint8List.fromList([1, 2, 3]))
|
||||
],
|
||||
@@ -25,7 +25,7 @@ void main() {
|
||||
var device3 = BleDevice(
|
||||
deviceId: '3',
|
||||
name: '3_device',
|
||||
services: ['3_ser'],
|
||||
services: ['20a3'],
|
||||
manufacturerDataList: [
|
||||
ManufacturerData(0x03, Uint8List.fromList([1, 2, 3]))
|
||||
],
|
||||
@@ -52,7 +52,7 @@ void main() {
|
||||
|
||||
test('Test isServicesMatchingFilters', () {
|
||||
var scanFilter = ScanFilter(
|
||||
withServices: ['1_ser', 'random', '3_ser'],
|
||||
withServices: ['20a1', '20a6', '20a3'],
|
||||
);
|
||||
expect(
|
||||
universalBleFilter.servicesMatch(scanFilter, device1),
|
||||
@@ -84,21 +84,21 @@ void main() {
|
||||
]);
|
||||
expect(
|
||||
universalBleFilter.manufacturerDataMatches(
|
||||
scanFilter,
|
||||
scanFilter.withManufacturerData,
|
||||
device1,
|
||||
),
|
||||
isTrue,
|
||||
);
|
||||
expect(
|
||||
universalBleFilter.manufacturerDataMatches(
|
||||
scanFilter,
|
||||
scanFilter.withManufacturerData,
|
||||
device2,
|
||||
),
|
||||
isTrue,
|
||||
);
|
||||
expect(
|
||||
universalBleFilter.manufacturerDataMatches(
|
||||
scanFilter,
|
||||
scanFilter.withManufacturerData,
|
||||
device3,
|
||||
),
|
||||
isFalse,
|
||||
@@ -110,7 +110,7 @@ void main() {
|
||||
test('Test filterDevice: Have filter for all', () {
|
||||
universalBleFilter.scanFilter = ScanFilter(
|
||||
withNamePrefix: ['1'],
|
||||
withServices: ['3_ser'],
|
||||
withServices: ['20a3'],
|
||||
withManufacturerData: [
|
||||
ManufacturerDataFilter(
|
||||
companyIdentifier: 0x02,
|
||||
@@ -118,15 +118,15 @@ void main() {
|
||||
],
|
||||
);
|
||||
expect(
|
||||
universalBleFilter.matchesDevice(device1),
|
||||
universalBleFilter.matchedScanFilter(device1),
|
||||
isTrue,
|
||||
);
|
||||
expect(
|
||||
universalBleFilter.matchesDevice(device2),
|
||||
universalBleFilter.matchedScanFilter(device2),
|
||||
isTrue,
|
||||
);
|
||||
expect(
|
||||
universalBleFilter.matchesDevice(device3),
|
||||
universalBleFilter.matchedScanFilter(device3),
|
||||
isTrue,
|
||||
);
|
||||
});
|
||||
@@ -135,15 +135,15 @@ void main() {
|
||||
withNamePrefix: ['1'],
|
||||
);
|
||||
expect(
|
||||
universalBleFilter.matchesDevice(device1),
|
||||
universalBleFilter.matchedScanFilter(device1),
|
||||
isTrue,
|
||||
);
|
||||
expect(
|
||||
universalBleFilter.matchesDevice(device2),
|
||||
universalBleFilter.matchedScanFilter(device2),
|
||||
isFalse,
|
||||
);
|
||||
expect(
|
||||
universalBleFilter.matchesDevice(device3),
|
||||
universalBleFilter.matchedScanFilter(device3),
|
||||
isFalse,
|
||||
);
|
||||
});
|
||||
@@ -152,47 +152,144 @@ void main() {
|
||||
withNamePrefix: ['1', '2'],
|
||||
);
|
||||
expect(
|
||||
universalBleFilter.matchesDevice(device1),
|
||||
universalBleFilter.matchedScanFilter(device1),
|
||||
isTrue,
|
||||
);
|
||||
expect(
|
||||
universalBleFilter.matchesDevice(device2),
|
||||
universalBleFilter.matchedScanFilter(device2),
|
||||
isTrue,
|
||||
);
|
||||
expect(
|
||||
universalBleFilter.matchesDevice(device3),
|
||||
universalBleFilter.matchedScanFilter(device3),
|
||||
isFalse,
|
||||
);
|
||||
});
|
||||
test('Test filterDevice: Empty Filter', () {
|
||||
universalBleFilter.scanFilter = ScanFilter();
|
||||
expect(
|
||||
universalBleFilter.matchesDevice(device1),
|
||||
universalBleFilter.matchedScanFilter(device1),
|
||||
isTrue,
|
||||
);
|
||||
expect(
|
||||
universalBleFilter.matchesDevice(device2),
|
||||
universalBleFilter.matchedScanFilter(device2),
|
||||
isTrue,
|
||||
);
|
||||
expect(
|
||||
universalBleFilter.matchesDevice(device3),
|
||||
universalBleFilter.matchedScanFilter(device3),
|
||||
isTrue,
|
||||
);
|
||||
});
|
||||
test('Test filterDevice: Null Filter', () {
|
||||
universalBleFilter.scanFilter = ScanFilter();
|
||||
expect(
|
||||
universalBleFilter.matchesDevice(device1),
|
||||
universalBleFilter.matchedScanFilter(device1),
|
||||
isTrue,
|
||||
);
|
||||
expect(
|
||||
universalBleFilter.matchesDevice(device2),
|
||||
universalBleFilter.matchedScanFilter(device2),
|
||||
isTrue,
|
||||
);
|
||||
expect(
|
||||
universalBleFilter.matchesDevice(device3),
|
||||
universalBleFilter.matchedScanFilter(device3),
|
||||
isTrue,
|
||||
);
|
||||
});
|
||||
});
|
||||
|
||||
group("Test Exclusion Filter", () {
|
||||
test('Test exclusionFilter: Have filter for 1', () {
|
||||
universalBleFilter.scanFilter = ScanFilter(exclusionFilters: [
|
||||
ExclusionFilter(
|
||||
namePrefix: '1',
|
||||
services: ['20a1'],
|
||||
manufacturerDataFilter: [
|
||||
ManufacturerDataFilter(
|
||||
companyIdentifier: 0x01,
|
||||
)
|
||||
],
|
||||
)
|
||||
]);
|
||||
expect(
|
||||
universalBleFilter.matchesExclusionFilter(device1),
|
||||
isTrue,
|
||||
);
|
||||
expect(
|
||||
universalBleFilter.matchesExclusionFilter(device2),
|
||||
isFalse,
|
||||
);
|
||||
expect(
|
||||
universalBleFilter.matchesExclusionFilter(device3),
|
||||
isFalse,
|
||||
);
|
||||
});
|
||||
|
||||
test('Test exclusionFilter: Filter for two', () {
|
||||
universalBleFilter.scanFilter = ScanFilter(exclusionFilters: [
|
||||
ExclusionFilter(
|
||||
namePrefix: '1',
|
||||
services: ['20a1'],
|
||||
manufacturerDataFilter: [
|
||||
ManufacturerDataFilter(
|
||||
companyIdentifier: 0x01,
|
||||
)
|
||||
],
|
||||
),
|
||||
ExclusionFilter(
|
||||
namePrefix: '2',
|
||||
services: ['20a2'],
|
||||
manufacturerDataFilter: [
|
||||
ManufacturerDataFilter(
|
||||
companyIdentifier: 0x02,
|
||||
)
|
||||
],
|
||||
),
|
||||
]);
|
||||
expect(
|
||||
universalBleFilter.matchesExclusionFilter(device1),
|
||||
isTrue,
|
||||
);
|
||||
expect(
|
||||
universalBleFilter.matchesExclusionFilter(device2),
|
||||
isTrue,
|
||||
);
|
||||
expect(
|
||||
universalBleFilter.matchesExclusionFilter(device3),
|
||||
isFalse,
|
||||
);
|
||||
});
|
||||
|
||||
test('Test exclusionFilter: Invalid filter for last', () {
|
||||
universalBleFilter.scanFilter = ScanFilter(exclusionFilters: [
|
||||
ExclusionFilter(
|
||||
namePrefix: '3',
|
||||
services: ['20a2'],
|
||||
manufacturerDataFilter: [
|
||||
ManufacturerDataFilter(
|
||||
companyIdentifier: 0x01,
|
||||
)
|
||||
],
|
||||
),
|
||||
]);
|
||||
expect(
|
||||
universalBleFilter.matchesExclusionFilter(device1),
|
||||
isFalse,
|
||||
);
|
||||
expect(
|
||||
universalBleFilter.matchesExclusionFilter(device2),
|
||||
isFalse,
|
||||
);
|
||||
expect(
|
||||
universalBleFilter.matchesExclusionFilter(device3),
|
||||
isFalse,
|
||||
);
|
||||
});
|
||||
|
||||
test('Test exclusionFilter: Empty Filter', () {
|
||||
universalBleFilter.scanFilter = ScanFilter();
|
||||
expect(
|
||||
universalBleFilter.matchesExclusionFilter(device1),
|
||||
isFalse,
|
||||
);
|
||||
});
|
||||
});
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user