@@ -261,5 +261,102 @@ - (void)testSetConsumerProtectionAttributionLevel {
261261
262262}
263263
264+ - (void )testSetAnonID {
265+ NSString *expectedAnonID = @" static-test-anon-id-12345" ;
266+
267+ [Branch setAnonID: expectedAnonID];
268+
269+ NSString *actualAnonID = [BNCPreferenceHelper sharedInstance ].anonID ;
270+ XCTAssertEqualObjects (actualAnonID, expectedAnonID, @" setAnonID should set valid string" );
271+ }
272+
273+ - (void )testSetAnonID_UpdateExistingValue {
274+ NSString *initialAnonID = @" initial-anon-id" ;
275+ NSString *updatedAnonID = @" updated-anon-id" ;
276+
277+ [Branch setAnonID: initialAnonID];
278+ XCTAssertEqualObjects ([BNCPreferenceHelper sharedInstance ].anonID , initialAnonID);
279+
280+ [Branch setAnonID: updatedAnonID];
281+ XCTAssertEqualObjects ([BNCPreferenceHelper sharedInstance ].anonID , updatedAnonID);
282+ }
283+
284+ - (void )testSetAnonID_NilValue {
285+ NSString *initialAnonID = @" initial-anon-id" ;
286+
287+ [Branch setAnonID: initialAnonID];
288+ XCTAssertEqualObjects ([BNCPreferenceHelper sharedInstance ].anonID , initialAnonID);
289+
290+ [Branch setAnonID: nil ];
291+ XCTAssertEqualObjects ([BNCPreferenceHelper sharedInstance ].anonID , initialAnonID);
292+ }
293+
294+ - (void )testSetAnonID_EmptyString {
295+ NSString *emptyAnonID = @" " ;
296+
297+ [Branch setAnonID: emptyAnonID];
298+
299+ NSString *actualAnonID = [BNCPreferenceHelper sharedInstance ].anonID ;
300+ XCTAssertEqualObjects (actualAnonID, emptyAnonID, @" Static setAnonID should accept empty string" );
301+ }
302+
303+ - (void )testSetAnonID_NonStringObject {
304+ NSString *initialAnonID = @" initial-anon-id" ;
305+
306+ [Branch setAnonID: initialAnonID];
307+ XCTAssertEqualObjects ([BNCPreferenceHelper sharedInstance ].anonID , initialAnonID);
308+
309+ // Try to set with a non-string object (NSNumber)
310+ NSNumber *nonStringValue = @123 ;
311+ [Branch setAnonID: (NSString *)nonStringValue];
312+
313+ XCTAssertEqualObjects ([BNCPreferenceHelper sharedInstance ].anonID , initialAnonID);
314+ }
315+
316+ - (void )testSetAnonID_LongString {
317+ NSString *longAnonID = @" very-long-anon-id-with-many-characters-to-test-string-handling-1234567890-abcdefghijklmnopqrstuvwxyz" ;
318+
319+ [Branch setAnonID: longAnonID];
320+
321+ NSString *actualAnonID = [BNCPreferenceHelper sharedInstance ].anonID ;
322+ XCTAssertEqualObjects (actualAnonID, longAnonID, @" setAnonID should handle long strings" );
323+ }
324+
325+ - (void )testSetAnonID_SpecialCharacters {
326+ NSString *specialCharAnonID = @" static-anon-id-with-special-chars-!@#$%^&*()_+-=[]{}|;:,.<>?" ;
327+
328+ [Branch setAnonID: specialCharAnonID];
329+
330+ NSString *actualAnonID = [BNCPreferenceHelper sharedInstance ].anonID ;
331+ XCTAssertEqualObjects (actualAnonID, specialCharAnonID, @" setAnonID should handle special characters" );
332+ }
333+
334+ - (void )testSetAnonID_ThreadSafety {
335+ NSString *anonID1 = @" thread-test-anon-id-1" ;
336+ NSString *anonID2 = @" thread-test-anon-id-2" ;
337+
338+ // Test that the method is thread-safe by calling it from different queues
339+ dispatch_group_t group = dispatch_group_create ();
340+
341+ dispatch_group_enter (group);
342+ dispatch_async (dispatch_get_global_queue (DISPATCH_QUEUE_PRIORITY_DEFAULT, 0 ), ^{
343+ [Branch setAnonID: anonID1];
344+ dispatch_group_leave (group);
345+ });
346+
347+ dispatch_group_enter (group);
348+ dispatch_async (dispatch_get_global_queue (DISPATCH_QUEUE_PRIORITY_DEFAULT, 0 ), ^{
349+ [Branch setAnonID: anonID2];
350+ dispatch_group_leave (group);
351+ });
352+
353+ dispatch_group_wait (group, DISPATCH_TIME_FOREVER);
354+
355+ // Verify that one of the values was set (we can't predict which due to concurrency)
356+ NSString *finalAnonID = [BNCPreferenceHelper sharedInstance ].anonID ;
357+ XCTAssertTrue ([finalAnonID isEqualToString: anonID1] || [finalAnonID isEqualToString: anonID2],
358+ @" One of the anonID values should be set" );
359+ }
360+
264361
265362@end
0 commit comments