| Index: class-dump/src/UnitTests/CDTypeParserUnitTest.m
|
| ===================================================================
|
| --- class-dump/src/UnitTests/CDTypeParserUnitTest.m (revision 0)
|
| +++ class-dump/src/UnitTests/CDTypeParserUnitTest.m (revision 0)
|
| @@ -0,0 +1,130 @@
|
| +// This file is part of class-dump, a utility for examining the Objective-C segment of Mach-O files.
|
| +// Copyright (C) 1997-1998, 2000-2001, 2004-2010 Steve Nygard.
|
| +
|
| +#import "CDTypeParserUnitTest.h"
|
| +
|
| +#import <Foundation/Foundation.h>
|
| +#import "NSError-CDExtensions.h"
|
| +
|
| +#import "CDType.h"
|
| +#import "CDTypeLexer.h"
|
| +#import "CDTypeParser.h"
|
| +
|
| +@implementation CDTypeParserUnitTest
|
| +
|
| +- (void)setUp;
|
| +{
|
| +}
|
| +
|
| +- (void)tearDown;
|
| +{
|
| +}
|
| +
|
| +- (void)testType:(NSString *)aType showLexing:(BOOL)shouldShowLexing;
|
| +{
|
| + CDTypeParser *aTypeParser;
|
| + CDType *result;
|
| + NSError *error;
|
| +
|
| + if (shouldShowLexing) {
|
| + NSLog(@"----------------------------------------");
|
| + NSLog(@"str: %@", aType);
|
| + }
|
| +
|
| + aTypeParser = [[CDTypeParser alloc] initWithType:aType];
|
| + [[aTypeParser lexer] setShouldShowLexing:shouldShowLexing];
|
| + result = [aTypeParser parseType:&error];
|
| + STAssertNotNil(result, @"-[CDTypeParser parseType:] error: %@", [error myExplanation]);
|
| + [aTypeParser release];
|
| +}
|
| +
|
| +- (void)testMethodType:(NSString *)aMethodType showLexing:(BOOL)shouldShowLexing;
|
| +{
|
| + CDTypeParser *aTypeParser;
|
| + NSArray *result;
|
| + NSError *error;
|
| +
|
| + aTypeParser = [[CDTypeParser alloc] initWithType:aMethodType];
|
| + [[aTypeParser lexer] setShouldShowLexing:shouldShowLexing];
|
| + result = [aTypeParser parseMethodType:&error];
|
| + STAssertNotNil(result, @"-[CDTypeParser parseMethodType:] error: %@", [error myExplanation]);
|
| + [aTypeParser release];
|
| +}
|
| +
|
| +- (void)testLoneConstType;
|
| +{
|
| + // On Panther, from WebCore, -[KWQPageState
|
| + // initWithDocument:URL:windowProperties:locationProperties:interpreterBuiltins:]
|
| + // has part of a method type as "r12". "r" is const, but it doesn't modify anything.
|
| +
|
| + [self testMethodType:@"ri12i16" showLexing:NO]; // This works
|
| + [self testMethodType:@"r12i16" showLexing:NO]; // This didn't work.
|
| +}
|
| +
|
| +// Field names:
|
| +// {?="field1"^@"NSObject"} -- end of struct, use quoted string
|
| +// {?="field1"^@"NSObject""field2"@} -- followed by field, use quoted string
|
| +// {?="field1"^@"field2"^@} -- quoted string is followed by type, don't use quoted string for object
|
| +
|
| +// No field names -- always use the quoted string
|
| +// {?=^@"NSObject"}
|
| +// {?=^@"NSObject"^@"NSObject"}
|
| +
|
| +- (void)testObjectQuotedStringTypes;
|
| +{
|
| + NSString *str;
|
| +
|
| + str = @"{?=\"field1\"^@\"NSObject\"}";
|
| + [self testType:str showLexing:NO];
|
| +
|
| + str = @"{?=\"field1\"^@\"NSObject\"\"field2\"@}";
|
| + [self testType:str showLexing:NO];
|
| +
|
| + str = @"{?=\"field1\"^@\"field2\"^@}";
|
| + [self testType:str showLexing:NO];
|
| +
|
| + str = @"{?=^@\"NSObject\"}";
|
| + [self testType:str showLexing:NO];
|
| +
|
| + str = @"{?=^@\"NSObject\"^@\"NSObject\"}";
|
| + [self testType:str showLexing:NO];
|
| +}
|
| +
|
| +- (void)testMissingFieldNames;
|
| +{
|
| + NSString *str;
|
| +
|
| + str = @"{?=b8b4b1b1b18\"_field1\"[8S]}";
|
| + [self testType:str showLexing:NO];
|
| +}
|
| +
|
| +- (void)testLowercaseClassName;
|
| +{
|
| + NSString *str;
|
| +
|
| + str = @"@\"iToolsAccount\"";
|
| + [self testType:str showLexing:NO];
|
| +}
|
| +
|
| +- (void)testLowercaseClassName2;
|
| +{
|
| + NSString *str;
|
| +
|
| + str = @"{?=@\"iToolsAccount\"}";
|
| + [self testType:str showLexing:NO];
|
| +}
|
| +
|
| +- (void)testPages08;
|
| +{
|
| + // Pages '08 has this bit in it: {vector<<unnamed>::AnimationChunk,std::allocator<<unnamed>::AnimationChunk> >=II}
|
| +
|
| + [self testType:@"{unnamed=II}" showLexing:NO];
|
| + [self testType:@"{vector<unnamed>=II}" showLexing:NO];
|
| + [self testType:@"{vector<unnamed::blegga>=II}" showLexing:NO];
|
| + [self testType:@"{vector<<unnamed>::blegga>=II}" showLexing:NO];
|
| + [self testType:@"{vector<<unnamed>::AnimationChunk>=II}" showLexing:NO];
|
| + [self testType:@"{vector<<unnamed>::AnimationChunk>=II}" showLexing:NO];
|
| + [self testType:@"{vector<<unnamed>::AnimationChunk,std::allocator<<unnamed>::AnimationChunk> >=II}" showLexing:NO];
|
| +}
|
| +
|
| +@end
|
|
|
| Property changes on: class-dump/src/UnitTests/CDTypeParserUnitTest.m
|
| ___________________________________________________________________
|
| Added: svn:eol-style
|
| + LF
|
|
|
|
|