DDOSLoggingTests.m 4.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128
  1. // Software License Agreement (BSD License)
  2. //
  3. // Copyright (c) 2010-2025, Deusty, LLC
  4. // All rights reserved.
  5. //
  6. // Redistribution and use of this software in source and binary forms,
  7. // with or without modification, are permitted provided that the following conditions are met:
  8. //
  9. // * Redistributions of source code must retain the above copyright notice,
  10. // this list of conditions and the following disclaimer.
  11. //
  12. // * Neither the name of Deusty nor the names of its contributors may be used
  13. // to endorse or promote products derived from this software without specific
  14. // prior written permission of Deusty, LLC.
  15. @import XCTest;
  16. #import <os/log.h>
  17. #import <CocoaLumberjack/DDOSLogger.h>
  18. #import <CocoaLumberjack/DDASLLogger.h>
  19. #import <CocoaLumberjack/DDLogMacros.h>
  20. @interface DDTestOSLogLevelMapper: NSObject <DDOSLogLevelMapper>
  21. @property (nonatomic, strong) id<DDOSLogLevelMapper> underlyingMapper;
  22. @property (nonatomic, strong) NSMutableArray<NSNumber *> *collectedLogFlags;
  23. @end
  24. @implementation DDTestOSLogLevelMapper
  25. - (instancetype)initWithUnderlyingMapper:(id<DDOSLogLevelMapper>)underlyingMapper
  26. {
  27. self = [super init];
  28. if (self) {
  29. self.underlyingMapper = underlyingMapper;
  30. self.collectedLogFlags = [NSMutableArray array];
  31. }
  32. return self;
  33. }
  34. - (os_log_type_t)osLogTypeForLogFlag:(DDLogFlag)logFlag {
  35. [self.collectedLogFlags addObject:@(logFlag)];
  36. return [self.underlyingMapper osLogTypeForLogFlag:logFlag];
  37. }
  38. @end
  39. @interface DDOSLoggingTests : XCTestCase
  40. @end
  41. @implementation DDOSLoggingTests
  42. - (void)setUp {
  43. [super setUp];
  44. [DDLog removeAllLoggers];
  45. }
  46. - (void)tearDown {
  47. [DDLog removeAllLoggers];
  48. [super tearDown];
  49. }
  50. - (void)testRegisterLogger {
  51. if (@available(iOS 10.0, macOS 10.12, tvOS 10.0, watchOS 3.0, *)) {
  52. __auto_type logger = [DDOSLogger new];
  53. [DDLog addLogger:logger];
  54. XCTAssertEqualObjects(logger.loggerName, DDLoggerNameOS);
  55. XCTAssertEqualObjects(logger, DDLog.allLoggers.firstObject);
  56. }
  57. #if !TARGET_OS_WATCH
  58. else {
  59. #pragma clang diagnostic push
  60. #pragma clang diagnostic ignored "-Wdeprecated-declarations"
  61. __auto_type logger = [DDASLLogger new];
  62. [DDLog addLogger:logger];
  63. XCTAssertEqualObjects(logger.loggerName, DDLoggerNameASL);
  64. XCTAssertEqualObjects(logger, DDLog.allLoggers.firstObject);
  65. #pragma clang diagnostic pop
  66. }
  67. #endif
  68. }
  69. - (void)testDDOSLogLevelMapper {
  70. __auto_type mapper = [[DDTestOSLogLevelMapper alloc] initWithUnderlyingMapper:[[DDOSLogLevelMapperDefault alloc] init]];
  71. __auto_type logger = [[DDOSLogger alloc] initWithLogLevelMapper:mapper];
  72. [DDLog addLogger:logger];
  73. __auto_type ddLogLevel = DDLogLevelVerbose;
  74. DDLogVerbose(@"VERBOSE");
  75. DDLogDebug(@"DEBUG");
  76. DDLogInfo(@"INFO");
  77. DDLogWarn(@"WARN");
  78. DDLogError(@"ERROR");
  79. XCTAssertEqual(mapper.collectedLogFlags.count, 5);
  80. if (mapper.collectedLogFlags.count < 5) return; // prevent test crashes
  81. XCTAssertEqual(mapper.collectedLogFlags[0].unsignedIntegerValue, DDLogFlagVerbose);
  82. XCTAssertEqual(mapper.collectedLogFlags[1].unsignedIntegerValue, DDLogFlagDebug);
  83. XCTAssertEqual(mapper.collectedLogFlags[2].unsignedIntegerValue, DDLogFlagInfo);
  84. XCTAssertEqual(mapper.collectedLogFlags[3].unsignedIntegerValue, DDLogFlagWarning);
  85. XCTAssertEqual(mapper.collectedLogFlags[4].unsignedIntegerValue, DDLogFlagError);
  86. }
  87. - (void)testDDOSLogLevelMapperDefault {
  88. __auto_type mapper = [[DDOSLogLevelMapperDefault alloc] init];
  89. XCTAssertEqual([mapper osLogTypeForLogFlag:DDLogFlagVerbose], OS_LOG_TYPE_DEBUG);
  90. XCTAssertEqual([mapper osLogTypeForLogFlag:DDLogFlagDebug], OS_LOG_TYPE_DEBUG);
  91. XCTAssertEqual([mapper osLogTypeForLogFlag:DDLogFlagInfo], OS_LOG_TYPE_INFO);
  92. XCTAssertEqual([mapper osLogTypeForLogFlag:DDLogFlagWarning], OS_LOG_TYPE_ERROR);
  93. XCTAssertEqual([mapper osLogTypeForLogFlag:DDLogFlagError], OS_LOG_TYPE_ERROR);
  94. XCTAssertEqual([mapper osLogTypeForLogFlag:NSUIntegerMax], OS_LOG_TYPE_DEFAULT);
  95. }
  96. #if TARGET_OS_SIMULATOR
  97. - (void)testDDOSLogLevelMapperSimulatorConsoleAppWorkaround {
  98. __auto_type mapper = [[DDOSLogLevelMapperSimulatorConsoleAppWorkaround alloc] init];
  99. XCTAssertEqual([mapper osLogTypeForLogFlag:DDLogFlagVerbose], OS_LOG_TYPE_DEFAULT);
  100. XCTAssertEqual([mapper osLogTypeForLogFlag:DDLogFlagDebug], OS_LOG_TYPE_DEFAULT);
  101. XCTAssertEqual([mapper osLogTypeForLogFlag:DDLogFlagInfo], OS_LOG_TYPE_INFO);
  102. XCTAssertEqual([mapper osLogTypeForLogFlag:DDLogFlagWarning], OS_LOG_TYPE_ERROR);
  103. XCTAssertEqual([mapper osLogTypeForLogFlag:DDLogFlagError], OS_LOG_TYPE_ERROR);
  104. XCTAssertEqual([mapper osLogTypeForLogFlag:NSUIntegerMax], OS_LOG_TYPE_DEFAULT);
  105. }
  106. #endif
  107. @end