@@ -3,6 +3,7 @@ package com.juul.kable
33import com.juul.kable.Filter.Name.Exact
44import com.juul.kable.Filter.Name.Prefix
55import kotlin.test.Test
6+ import kotlin.test.assertFailsWith
67import kotlin.test.assertFalse
78import kotlin.test.assertTrue
89import kotlin.uuid.Uuid
@@ -244,6 +245,119 @@ class FilterPredicateTests {
244245 ),
245246 )
246247 }
248+
249+ @Test
250+ fun manufacturerDataFilter_nullDataWithNullDataMask_isAllowed () {
251+ ManufacturerDataFilter (
252+ id = 1 ,
253+ data = null ,
254+ dataMask = null ,
255+ )
256+ }
257+
258+ @Test
259+ fun manufacturerDataFilter_nullDataWithEmptyDataMask_throwsIllegalArgumentException () {
260+ assertFailsWith<IllegalArgumentException > {
261+ ManufacturerDataFilter (
262+ id = 1 ,
263+ data = null ,
264+ dataMask = byteArrayOf(),
265+ )
266+ }
267+ }
268+
269+ @Test
270+ fun manufacturerDataFilter_nullDataWithNonNullDataMask_throwsIllegalArgumentException () {
271+ assertFailsWith<IllegalArgumentException > {
272+ ManufacturerDataFilter (
273+ id = 1 ,
274+ data = null ,
275+ dataMask = byteArrayOf(0xFF .toByte(), 0xFF .toByte()),
276+ )
277+ }
278+ }
279+
280+ @Test
281+ fun manufacturerDataFilter_emptyData_throwsIllegalArgumentException () {
282+ assertFailsWith<IllegalArgumentException > {
283+ ManufacturerDataFilter (
284+ id = 1 ,
285+ data = byteArrayOf(),
286+ )
287+ }
288+ }
289+
290+ @Test
291+ fun matches_manufacturerDataFilterWithNullDataVsEmptyData_isTrue () {
292+ val predicate = ManufacturerDataFilter (
293+ id = 1 ,
294+ data = null ,
295+ dataMask = null ,
296+ ).toPredicate()
297+
298+ assertTrue(
299+ predicate.matches(
300+ manufacturerData = ManufacturerData (
301+ code = 1 ,
302+ data = byteArrayOf(),
303+ ),
304+ ),
305+ )
306+ }
307+
308+ @Test
309+ fun matches_manufacturerDataFilterWithNullDataVsData_isTrue () {
310+ val predicate = ManufacturerDataFilter (
311+ id = 1 ,
312+ data = null ,
313+ dataMask = null ,
314+ ).toPredicate()
315+
316+ assertTrue(
317+ predicate.matches(
318+ manufacturerData = ManufacturerData (
319+ code = 1 ,
320+ data = byteArrayOf(0xFF .toByte(), 0xFF .toByte()),
321+ ),
322+ ),
323+ )
324+ }
325+
326+ @Test
327+ fun matches_manufacturerDataFilterWithoutDataMaskVsData_isTrue () {
328+ val predicate = ManufacturerDataFilter (
329+ id = 1 ,
330+ data = byteArrayOf(0xFF .toByte(), 0xFF .toByte()),
331+ dataMask = null ,
332+ ).toPredicate()
333+
334+ assertTrue(
335+ predicate.matches(
336+ manufacturerData = ManufacturerData (
337+ code = 1 ,
338+ data = byteArrayOf(0xFF .toByte(), 0xFF .toByte()),
339+ ),
340+ ),
341+ )
342+ }
343+
344+ @Test
345+ fun matches_manufacturerDataFilterWithoutDataMaskVsDifferentData_isFalse () {
346+ val predicate = ManufacturerDataFilter (
347+ id = 1 ,
348+ data = byteArrayOf(0xF0 .toByte(), 0x0D .toByte()),
349+ dataMask = null ,
350+ ).toPredicate()
351+
352+ assertFalse(
353+ predicate.matches(
354+ manufacturerData = ManufacturerData (
355+ code = 1 ,
356+ data = byteArrayOf(0x12 , 0x34 ),
357+ ),
358+ ),
359+ )
360+ }
247361}
248362
249363private fun Filter.toPredicate () = FilterPredicate (listOf (this ))
0 commit comments