aboutsummaryrefslogtreecommitdiff
path: root/UnitTesting/GTMUnitTestDevLog.h
blob: 2be231ed821601093f6f24d53fa4c7c2281916b7 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
//
//  GTMUnitTestDevLog.h
//
//  Copyright 2008 Google Inc.
//
//  Licensed under the Apache License, Version 2.0 (the "License"); you may not
//  use this file except in compliance with the License.  You may obtain a copy
//  of the License at
//
//  http://www.apache.org/licenses/LICENSE-2.0
//
//  Unless required by applicable law or agreed to in writing, software
//  distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
//  WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.  See the
//  License for the specific language governing permissions and limitations under
//  the License.
//

#import "GTMDefines.h"
#import <Foundation/Foundation.h>

// GTMUnitTestDevLog tracks what messages are logged to verify that you only
// log what you expect to log during the running of unittests. This allows you
// to log with impunity from your actual core implementations and still be able
// to find unexpected logs in your output when running unittests.
// In your unittests you tell GTMUnitTestDevLog what messages you expect your
// test to spit out, and it will cause any that don't match to appear as errors
// in your unittest run output. You can match on exact strings or standard
// regexps.
// Set GTM_SHOW_UNITTEST_DEVLOGS in the environment to show the logs that that
// are expected and encountered.  Otherwise they aren't display to keep the
// unit test results easier to read.

@interface GTMUnitTestDevLog : NSObject
// Log a message
+ (void)log:(NSString*)format, ... NS_FORMAT_FUNCTION(1, 2);
+ (void)log:(NSString*)format args:(va_list)args NS_FORMAT_FUNCTION(1, 0);

// Turn tracking on/off
+ (void)enableTracking;
+ (void)disableTracking;
+ (BOOL)isTrackingEnabled;

// Note that you are expecting a string that has an exact match. No need to
// escape any pattern characters.
+ (void)expectString:(NSString *)format, ... NS_FORMAT_FUNCTION(1, 2);

// Note that you are expecting a pattern. Pattern characters that you want
// exact matches on must be escaped. See [GTMRegex escapedPatternForString].
// Patterns match across newlines (kGTMRegexOptionSupressNewlineSupport) making
// it easier to match output from the descriptions of NS collection types such
// as NSArray and NSDictionary.
+ (void)expectPattern:(NSString *)format, ... NS_FORMAT_FUNCTION(1, 2);

// Note that you are expecting exactly 'n' strings
+ (void)expect:(NSUInteger)n
    casesOfString:(NSString *)format, ... NS_FORMAT_FUNCTION(2, 3);

// Note that you are expecting exactly 'n' patterns
+ (void)expect:(NSUInteger)n
    casesOfPattern:(NSString*)format, ... NS_FORMAT_FUNCTION(2, 3);
+ (void)expect:(NSUInteger)n
    casesOfPattern:(NSString*)format
              args:(va_list)args NS_FORMAT_FUNCTION(2, 0);

// Call when you want to verify that you have matched all the logs you expect
// to match. If your unittests inherit from GTMTestcase (like they should) you
// will get this called for free.
+ (void)verifyNoMoreLogsExpected;

// Resets the expected logs so that you don't have anything expected.
// In general should not be needed, unless you have a variable logging case
// of some sort.
+ (void)resetExpectedLogs;
@end

// Does the same as GTMUnitTestDevLog, but the logs are only expected in debug.
// ie-the expect requests don't count in release builds.
@interface GTMUnitTestDevLogDebug : GTMUnitTestDevLog
@end

// The name of the exception that is raised when GTMUnitTestDevLog
// finds a problem.
GTM_EXTERN NSString *const GTMLogFailureException;