@@ -2330,6 +2330,136 @@ final class ContentBlockerConverterTests: XCTestCase {
2330
2330
XCTAssertEqual ( decoded [ 1 ] . action. type, " css-extended " )
2331
2331
XCTAssertEqual ( decoded [ 1 ] . action. css, " :xpath(//div[@id='stream_pagelet']) " )
2332
2332
}
2333
+
2334
+ func testApplyMultidomainCosmeticExclusions( ) {
2335
+ var rules = [
2336
+ " test.com,example.org###banner " ,
2337
+ " example.org#@##banner " ,
2338
+ ]
2339
+ var result = converter. convertArray ( rules: rules, safariVersion: . safari15)
2340
+ XCTAssertEqual ( result. convertedCount, 1 )
2341
+ XCTAssertEqual ( result. totalConvertedCount, 1 )
2342
+ XCTAssertEqual ( result. errorsCount, 0 )
2343
+
2344
+ var decoded = try ! parseJsonString ( json: result. converted)
2345
+ XCTAssertEqual ( decoded. count, 1 )
2346
+ XCTAssertEqual ( decoded [ 0 ] . trigger. ifDomain, [ " *test.com " ] )
2347
+ XCTAssertEqual ( decoded [ 0 ] . action. type, " css-display-none " )
2348
+ XCTAssertEqual ( decoded [ 0 ] . action. selector, " #banner " )
2349
+
2350
+ rules = [
2351
+ " test.com,example.org###banner " ,
2352
+ " example.com,example.org#@##banner " ,
2353
+ ]
2354
+ result = converter. convertArray ( rules: rules, safariVersion: . safari15)
2355
+ XCTAssertEqual ( result. convertedCount, 1 )
2356
+ XCTAssertEqual ( result. totalConvertedCount, 1 )
2357
+ XCTAssertEqual ( result. errorsCount, 0 )
2358
+
2359
+ decoded = try ! parseJsonString ( json: result. converted)
2360
+ XCTAssertEqual ( decoded. count, 1 )
2361
+ XCTAssertEqual ( decoded [ 0 ] . trigger. ifDomain, [ " *test.com " ] )
2362
+ XCTAssertEqual ( decoded [ 0 ] . action. type, " css-display-none " )
2363
+ XCTAssertEqual ( decoded [ 0 ] . action. selector, " #banner " )
2364
+
2365
+ rules = [
2366
+ " test1.com,example.org,test2.com###banner " ,
2367
+ " example.com,example.org,test1.com#@##banner " ,
2368
+ ]
2369
+ result = converter. convertArray ( rules: rules, safariVersion: . safari15)
2370
+ XCTAssertEqual ( result. convertedCount, 1 )
2371
+ XCTAssertEqual ( result. totalConvertedCount, 1 )
2372
+ XCTAssertEqual ( result. errorsCount, 0 )
2373
+
2374
+ decoded = try ! parseJsonString ( json: result. converted)
2375
+ XCTAssertEqual ( decoded. count, 1 )
2376
+ XCTAssertEqual ( decoded [ 0 ] . trigger. ifDomain, [ " *test2.com " ] )
2377
+ XCTAssertEqual ( decoded [ 0 ] . action. type, " css-display-none " )
2378
+ XCTAssertEqual ( decoded [ 0 ] . action. selector, " #banner " )
2379
+
2380
+ rules = [
2381
+ " test1.com,test2.com,test3.com###banner " ,
2382
+ " example1.org,example2.org###banner " ,
2383
+ " test1.com,example2.org#@##banner " ,
2384
+ " test2.com,example1.org#@##banner " ,
2385
+ ]
2386
+ result = converter. convertArray ( rules: rules, safariVersion: . safari15)
2387
+ XCTAssertEqual ( result. convertedCount, 1 )
2388
+ XCTAssertEqual ( result. totalConvertedCount, 1 )
2389
+ XCTAssertEqual ( result. errorsCount, 0 )
2390
+
2391
+ decoded = try ! parseJsonString ( json: result. converted)
2392
+ XCTAssertEqual ( decoded. count, 1 )
2393
+ XCTAssertEqual ( decoded [ 0 ] . trigger. ifDomain, [ " *test3.com " ] )
2394
+ XCTAssertEqual ( decoded [ 0 ] . action. type, " css-display-none " )
2395
+ XCTAssertEqual ( decoded [ 0 ] . action. selector, " #banner " )
2396
+ }
2397
+
2398
+ func testApplyMultidomainAdvancedExclusions( ) {
2399
+ var rules = [
2400
+ " example.com,test.com#$##adv{visibility:hidden;} " ,
2401
+ " test.com#@$##adv{visibility:hidden;} " ,
2402
+ ]
2403
+ var result = converter. convertArray ( rules: rules, safariVersion: . safari15, advancedBlocking: true )
2404
+ XCTAssertEqual ( result. convertedCount, 0 )
2405
+ XCTAssertEqual ( result. advancedBlockingConvertedCount, 1 )
2406
+ XCTAssertEqual ( result. totalConvertedCount, 1 )
2407
+ XCTAssertEqual ( result. errorsCount, 0 )
2408
+
2409
+ var decoded = try ! parseJsonString ( json: result. advancedBlocking!)
2410
+ XCTAssertEqual ( decoded. count, 1 )
2411
+ XCTAssertEqual ( decoded [ 0 ] . trigger. ifDomain, [ " *example.com " ] )
2412
+ XCTAssertEqual ( decoded [ 0 ] . action. type, " css-inject " )
2413
+ XCTAssertEqual ( decoded [ 0 ] . action. css, " #adv{visibility:hidden;} " )
2414
+
2415
+ rules = [
2416
+ " test.com,example.org#$##adv{visibility:hidden;} " ,
2417
+ " example.com,example.org#@$##adv{visibility:hidden;} " ,
2418
+ ]
2419
+ result = converter. convertArray ( rules: rules, safariVersion: . safari15, advancedBlocking: true )
2420
+ XCTAssertEqual ( result. convertedCount, 0 )
2421
+ XCTAssertEqual ( result. advancedBlockingConvertedCount, 1 )
2422
+ XCTAssertEqual ( result. totalConvertedCount, 1 )
2423
+ XCTAssertEqual ( result. errorsCount, 0 )
2424
+
2425
+ decoded = try ! parseJsonString ( json: result. advancedBlocking!)
2426
+ XCTAssertEqual ( decoded. count, 1 )
2427
+ XCTAssertEqual ( decoded [ 0 ] . trigger. ifDomain, [ " *test.com " ] )
2428
+ XCTAssertEqual ( decoded [ 0 ] . action. type, " css-inject " )
2429
+ XCTAssertEqual ( decoded [ 0 ] . action. css, " #adv{visibility:hidden;} " )
2430
+
2431
+ rules = [
2432
+ " test.com,example.org#?#div:has(> a[target='_blank']) " ,
2433
+ " example.com,example.org#@?#div:has(> a[target='_blank']) " ,
2434
+ ]
2435
+ result = converter. convertArray ( rules: rules, safariVersion: . safari15, advancedBlocking: true )
2436
+ XCTAssertEqual ( result. convertedCount, 0 )
2437
+ XCTAssertEqual ( result. advancedBlockingConvertedCount, 1 )
2438
+ XCTAssertEqual ( result. totalConvertedCount, 1 )
2439
+ XCTAssertEqual ( result. errorsCount, 0 )
2440
+
2441
+ decoded = try ! parseJsonString ( json: result. advancedBlocking!)
2442
+ XCTAssertEqual ( decoded. count, 1 )
2443
+ XCTAssertEqual ( decoded [ 0 ] . trigger. ifDomain, [ " *test.com " ] )
2444
+ XCTAssertEqual ( decoded [ 0 ] . action. type, " css-extended " )
2445
+ XCTAssertEqual ( decoded [ 0 ] . action. css, " div:has(> a[target='_blank']) " )
2446
+
2447
+ rules = [
2448
+ " example.org,test1.com,test2.com#%#window.adv_id = null; " ,
2449
+ " example.com,example.org,test1.com#@%#window.adv_id = null; " ,
2450
+ ]
2451
+ result = converter. convertArray ( rules: rules, safariVersion: . safari15, advancedBlocking: true )
2452
+ XCTAssertEqual ( result. convertedCount, 0 )
2453
+ XCTAssertEqual ( result. advancedBlockingConvertedCount, 1 )
2454
+ XCTAssertEqual ( result. totalConvertedCount, 1 )
2455
+ XCTAssertEqual ( result. errorsCount, 0 )
2456
+
2457
+ decoded = try ! parseJsonString ( json: result. advancedBlocking!)
2458
+ XCTAssertEqual ( decoded. count, 1 )
2459
+ XCTAssertEqual ( decoded [ 0 ] . trigger. ifDomain, [ " *test2.com " ] )
2460
+ XCTAssertEqual ( decoded [ 0 ] . action. type, " script " )
2461
+ XCTAssertEqual ( decoded [ 0 ] . action. script, " window.adv_id = null; " )
2462
+ }
2333
2463
2334
2464
static var allTests = [
2335
2465
( " testEmpty " , testEmpty) ,
@@ -2391,5 +2521,7 @@ final class ContentBlockerConverterTests: XCTestCase {
2391
2521
( " testBlockingRulesWithNonAsciiCharacters " , testBlockingRulesWithNonAsciiCharacters) ,
2392
2522
( " testConvertRulesWithPseudoClassHas " , testConvertRulesWithPseudoClassHas) ,
2393
2523
( " testXpathRules " , testXpathRules) ,
2524
+ ( " testApplyMultidomainCosmeticExclusions " , testApplyMultidomainCosmeticExclusions) ,
2525
+ ( " testApplyMultidomainAdvancedExclusions " , testApplyMultidomainAdvancedExclusions) ,
2394
2526
]
2395
2527
}
0 commit comments