From b237aaae283c12c1b8f984201becde3fbd7eceb2 Mon Sep 17 00:00:00 2001 From: Daniel Bernal Date: Tue, 10 Sep 2024 20:27:47 +0200 Subject: [PATCH] Fixes an issue that caused Case Insensitive filters to not work in special situations --- Bouncer.xcodeproj/project.pbxproj | 8 +- .../xcdebugger/Breakpoints_v2.xcbkptlist | 12 +-- .../Models/SMSFilter/SMSOfflineFilter.swift | 2 +- .../AppSettingsDefaultsTests.swift.plist | Bin 68 -> 68 bytes BouncerTests/Models/SMSOfflineFilter.swift | 69 +++++++++++------- 5 files changed, 54 insertions(+), 37 deletions(-) diff --git a/Bouncer.xcodeproj/project.pbxproj b/Bouncer.xcodeproj/project.pbxproj index 7f5373a..c79b96a 100644 --- a/Bouncer.xcodeproj/project.pbxproj +++ b/Bouncer.xcodeproj/project.pbxproj @@ -691,7 +691,7 @@ buildSettings = { CODE_SIGN_ENTITLEMENTS = SMSFilter/SMSFilter.entitlements; CODE_SIGN_STYLE = Automatic; - CURRENT_PROJECT_VERSION = 1038; + CURRENT_PROJECT_VERSION = 1077; DEVELOPMENT_TEAM = J9F8F3PWTV; INFOPLIST_FILE = SMSFilter/Info.plist; LD_RUNPATH_SEARCH_PATHS = ( @@ -718,7 +718,7 @@ CODE_SIGN_ENTITLEMENTS = SMSFilter/SMSFilter.entitlements; CODE_SIGN_IDENTITY = "Apple Development"; CODE_SIGN_STYLE = Automatic; - CURRENT_PROJECT_VERSION = 1038; + CURRENT_PROJECT_VERSION = 1077; DEVELOPMENT_TEAM = J9F8F3PWTV; INFOPLIST_FILE = SMSFilter/Info.plist; LD_RUNPATH_SEARCH_PATHS = ( @@ -868,7 +868,7 @@ CODE_SIGN_ENTITLEMENTS = Bouncer/Bouncer.entitlements; CODE_SIGN_IDENTITY = "Apple Development"; CODE_SIGN_STYLE = Automatic; - CURRENT_PROJECT_VERSION = 1038; + CURRENT_PROJECT_VERSION = 1077; DEVELOPMENT_ASSET_PATHS = "\"Bouncer/Preview Content\""; DEVELOPMENT_TEAM = J9F8F3PWTV; ENABLE_PREVIEWS = YES; @@ -903,7 +903,7 @@ CODE_SIGN_ENTITLEMENTS = Bouncer/Bouncer.entitlements; CODE_SIGN_IDENTITY = "Apple Development"; CODE_SIGN_STYLE = Automatic; - CURRENT_PROJECT_VERSION = 1038; + CURRENT_PROJECT_VERSION = 1077; DEVELOPMENT_ASSET_PATHS = "\"Bouncer/Preview Content\""; DEVELOPMENT_TEAM = J9F8F3PWTV; ENABLE_PREVIEWS = YES; diff --git a/Bouncer.xcodeproj/xcuserdata/afterxleep.xcuserdatad/xcdebugger/Breakpoints_v2.xcbkptlist b/Bouncer.xcodeproj/xcuserdata/afterxleep.xcuserdatad/xcdebugger/Breakpoints_v2.xcbkptlist index 0058eac..636a8c8 100644 --- a/Bouncer.xcodeproj/xcuserdata/afterxleep.xcuserdatad/xcdebugger/Breakpoints_v2.xcbkptlist +++ b/Bouncer.xcodeproj/xcuserdata/afterxleep.xcuserdatad/xcdebugger/Breakpoints_v2.xcbkptlist @@ -7,17 +7,17 @@ + startingLineNumber = "14" + endingLineNumber = "14" + landmarkName = "TutorialView" + landmarkType = "14"> diff --git a/Bouncer/Models/SMSFilter/SMSOfflineFilter.swift b/Bouncer/Models/SMSFilter/SMSOfflineFilter.swift index e0d2fd6..340433c 100644 --- a/Bouncer/Models/SMSFilter/SMSOfflineFilter.swift +++ b/Bouncer/Models/SMSFilter/SMSOfflineFilter.swift @@ -48,7 +48,7 @@ struct SMSOfflineFilter { let result = text.range(of: filter.phrase, options: matchOptions) != nil os_log("FILTEREXTENSION - -- Match: %@", log: OSLog.messageFilterLog, type: .info, "\(result)") os_log("FILTEREXTENSION - -- Method: Text", log: OSLog.messageFilterLog, type: .info) - return text.range(of: filter.phrase, options: .caseInsensitive) != nil + return result } private func matchRegex(text: String, filter: Filter) -> Bool { diff --git a/BouncerTests/Models/AppSettingsDefaultsTests.swift.plist b/BouncerTests/Models/AppSettingsDefaultsTests.swift.plist index 6d11875f54631029cd4af316b9aaad0d782a1850..ac0461b8a6d39f28b7e9063fd9328f578bf76bd8 100644 GIT binary patch delta 9 QcmZ>9nV`V9nV`TJI#E#>01U1IWB>pF diff --git a/BouncerTests/Models/SMSOfflineFilter.swift b/BouncerTests/Models/SMSOfflineFilter.swift index 5de54a5..7c2f7d6 100644 --- a/BouncerTests/Models/SMSOfflineFilter.swift +++ b/BouncerTests/Models/SMSOfflineFilter.swift @@ -9,11 +9,6 @@ import IdentityLookup class SMSOfflineFilterTest: XCTestCase { - var messages = [ - SMSMessage(sender: "ETB Comunicaciones", text: "ETB compra 100 megas y recibe 200 por 6 meses. Incluye extensor de velocidAd mas promocion especial. Llama ya sin costo al 018000413807. Ver TyC. Hasta 31 ago 2020"), - SMSMessage(sender: "+16205261342", text: "ULANKA: Get 50% in shoes starting today!") - ] - override func setUp() { super.setUp() } @@ -22,74 +17,92 @@ class SMSOfflineFilterTest: XCTestCase { var smsFilter: SMSOfflineFilter var filterResult: SMSOfflineFilterResponse + let message = SMSMessage(sender: "ETB Comunicaciones", text: "ETB compra 100 megas y recibe 200 por 6 meses. Incluye extensor de velocidAd mas promocion especial. Llama ya sin costo al 018000413807. Ver TyC. Hasta 31 ago 2020") + // Old style filters (Text + Regex) smsFilter = SMSOfflineFilter(filterList: [Filter(id: UUID(), phrase: "etb", type: .any, action: .junk)]) - filterResult = smsFilter.filterMessage(message: messages[0]) + filterResult = smsFilter.filterMessage(message: message) XCTAssertEqual(filterResult.action, .junk) smsFilter = SMSOfflineFilter(filterList: [Filter(id: UUID(), phrase: "comunica", type: .sender, action: .transaction)]) - filterResult = smsFilter.filterMessage(message: messages[0]) + filterResult = smsFilter.filterMessage(message: message) XCTAssertEqual(filterResult.action, .transaction) smsFilter = SMSOfflineFilter(filterList: [Filter(id: UUID(), phrase: "mega", type: .message, action: .promotion)]) - filterResult = smsFilter.filterMessage(message: messages[0]) + filterResult = smsFilter.filterMessage(message: message) XCTAssertEqual(filterResult.action, .promotion) smsFilter = SMSOfflineFilter(filterList: [Filter(id: UUID(), phrase: "[a-z]cidad", type: .message, action: .junk, useRegex: true)]) - filterResult = smsFilter.filterMessage(message: messages[0]) + filterResult = smsFilter.filterMessage(message: message) XCTAssertEqual(filterResult.action, .junk) // Content filter test smsFilter = SMSOfflineFilter(filterList: [Filter(id: UUID(), phrase: "velocidad", type: .message, action: .junk, useRegex: false)]) - filterResult = smsFilter.filterMessage(message: messages[0]) + filterResult = smsFilter.filterMessage(message: message) XCTAssertEqual(filterResult.action, .junk) + + // Content filter test + smsFilter = SMSOfflineFilter(filterList: [Filter(id: UUID(), phrase: "VeLoCiDad", type: .message, action: .junk, useRegex: false, caseSensitive: true)]) + filterResult = smsFilter.filterMessage(message: message) + XCTAssertEqual(filterResult.action, .none) } + func testRegexFilter() { var smsFilter: SMSOfflineFilter var filterResult: SMSOfflineFilterResponse + let message = SMSMessage(sender: "ETB Comunicaciones", text: "ETB compra 100 megas y recibe 200 por 6 meses. Incluye extensor de velocidAd mas promocion especial. Llama ya sin costo al 018000413807. Ver TyC. Hasta 31 ago 2020") + // Regex filter test smsFilter = SMSOfflineFilter(filterList: [Filter(id: UUID(), phrase: "[E].*[l][o]cidad", type: .message, action: .junk, useRegex: true)]) - filterResult = smsFilter.filterMessage(message: messages[0]) + filterResult = smsFilter.filterMessage(message: message) XCTAssertEqual(filterResult.action, .junk) + // Regex filter test (Case sensitive) + smsFilter = SMSOfflineFilter(filterList: [Filter(id: UUID(), phrase: "[E].*[l][o]CidAd", type: .message, action: .junk, useRegex: true, caseSensitive: true)]) + filterResult = smsFilter.filterMessage(message: message) + XCTAssertEqual(filterResult.action, .none) + // Regex filter test (Case sensitive) smsFilter = SMSOfflineFilter(filterList: [Filter(id: UUID(), phrase: "[E].*[l][o]cidAd", type: .message, action: .junk, useRegex: true, caseSensitive: true)]) - filterResult = smsFilter.filterMessage(message: messages[0]) + filterResult = smsFilter.filterMessage(message: message) XCTAssertEqual(filterResult.action, .junk) // Regex filter test (Case sensitive) smsFilter = SMSOfflineFilter(filterList: [Filter(id: UUID(), phrase: "compra|algo|nuevo", type: .message, action: .junk, useRegex: true, caseSensitive: true)]) - filterResult = smsFilter.filterMessage(message: messages[0]) + filterResult = smsFilter.filterMessage(message: message) XCTAssertEqual(filterResult.action, .junk) - smsFilter = SMSOfflineFilter(filterList: [Filter(id: UUID(), phrase: "compra|extensor|nuevo", type: .message, action: .junk, useRegex: true, caseSensitive: true)]) - filterResult = smsFilter.filterMessage(message: messages[0]) + smsFilter = SMSOfflineFilter(filterList: [Filter(id: UUID(), phrase: "compra|extensor|nuevo", type: .message, action: .junk, useRegex: true)]) + filterResult = smsFilter.filterMessage(message: message) XCTAssertEqual(filterResult.action, .junk) - smsFilter = SMSOfflineFilter(filterList: [Filter(id: UUID(), phrase: "(?=.*especial)(?=.*meses)(?=.*megas).*", type: .message, action: .junk, useRegex: true, caseSensitive: true)]) - filterResult = smsFilter.filterMessage(message: messages[0]) + smsFilter = SMSOfflineFilter(filterList: [Filter(id: UUID(), phrase: "(?=.*especial)(?=.*meses)(?=.*megas).*", type: .message, action: .junk, useRegex: true)]) + filterResult = smsFilter.filterMessage(message: message) XCTAssertEqual(filterResult.action, .junk) - smsFilter = SMSOfflineFilter(filterList: [Filter(id: UUID(), phrase: "(?=.*compra)(?=.*casa)(?=.*megas).*", type: .message, action: .junk, useRegex: true, caseSensitive: false)]) - filterResult = smsFilter.filterMessage(message: messages[0]) + smsFilter = SMSOfflineFilter(filterList: [Filter(id: UUID(), phrase: "(?=.*compra)(?=.*casa)(?=.*megas).*", type: .message, action: .junk, useRegex: true)]) + filterResult = smsFilter.filterMessage(message: message) print(filterResult.action) XCTAssertEqual(filterResult.action, .none) + } func testSubactionFilters() { var smsFilter: SMSOfflineFilter var filterResult: SMSOfflineFilterResponse + var message = SMSMessage(sender: "ETB Comunicaciones", text: "ETB compra 100 megas y recibe 200 por 6 meses. Incluye extensor de velocidAd mas promocion especial. Llama ya sin costo al 018000413807. Ver TyC. Hasta 31 ago 2020") + // SubAction filter tests smsFilter = SMSOfflineFilter(filterList: [Filter(id: UUID(), phrase: "etb", type: .any, action: .transaction, subAction: .transactionOrder)]) - filterResult = smsFilter.filterMessage(message: messages[0]) + filterResult = smsFilter.filterMessage(message: message) XCTAssertEqual(filterResult.action, .transaction) XCTAssertEqual(filterResult.subaction, .transactionalOrders) @@ -98,7 +111,7 @@ class SMSOfflineFilterTest: XCTestCase { type: .any, action: .transaction, subAction: .transactionFinance)]) - filterResult = smsFilter.filterMessage(message: messages[0]) + filterResult = smsFilter.filterMessage(message: message) XCTAssertEqual(filterResult.action, .transaction) XCTAssertEqual(filterResult.subaction, .transactionalFinance) @@ -107,7 +120,7 @@ class SMSOfflineFilterTest: XCTestCase { type: .any, action: .transaction, subAction: .transactionReminders)]) - filterResult = smsFilter.filterMessage(message: messages[0]) + filterResult = smsFilter.filterMessage(message: message) XCTAssertEqual(filterResult.action, .transaction) XCTAssertEqual(filterResult.subaction, .transactionalReminders) @@ -116,7 +129,7 @@ class SMSOfflineFilterTest: XCTestCase { type: .any, action: .promotion, subAction: .promotionOffers)]) - filterResult = smsFilter.filterMessage(message: messages[0]) + filterResult = smsFilter.filterMessage(message: message) XCTAssertEqual(filterResult.action, .promotion) XCTAssertEqual(filterResult.subaction, .promotionalOffers) @@ -125,16 +138,18 @@ class SMSOfflineFilterTest: XCTestCase { type: .any, action: .promotion, subAction: .promotionCoupons)]) - filterResult = smsFilter.filterMessage(message: messages[0]) + filterResult = smsFilter.filterMessage(message: message) XCTAssertEqual(filterResult.action, .promotion) XCTAssertEqual(filterResult.subaction, .promotionalCoupons) + message = SMSMessage(sender: "+16205261342", text: "ULANKA: Get 50% in shoes starting today!") + smsFilter = SMSOfflineFilter(filterList: [Filter(id: UUID(), phrase: "ULANKA", type: .any, action: .promotion, subAction: .promotionOffers)]) - filterResult = smsFilter.filterMessage(message: messages[1]) + filterResult = smsFilter.filterMessage(message: message) XCTAssertEqual(filterResult.action, .promotion) XCTAssertEqual(filterResult.subaction, .promotionalOffers) } @@ -143,6 +158,8 @@ class SMSOfflineFilterTest: XCTestCase { var smsFilter: SMSOfflineFilter var filterResult: SMSOfflineFilterResponse + let message = SMSMessage(sender: "ETB Comunicaciones", text: "ETB compra 100 megas y recibe 200 por 6 meses. Incluye extensor de velocidAd mas promocion especial. Llama ya sin costo al 018000413807. Ver TyC. Hasta 31 ago 2020") + // Allow list filter tests smsFilter = SMSOfflineFilter(filterList: [Filter(id: UUID(), phrase: "etb", @@ -155,7 +172,7 @@ class SMSOfflineFilterTest: XCTestCase { action: .junk, subAction: .none) ]) - filterResult = smsFilter.filterMessage(message: messages[0]) + filterResult = smsFilter.filterMessage(message: message) XCTAssertEqual(filterResult.action, .allow) XCTAssertEqual(filterResult.subaction, .none) }