Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(198)

Unified Diff: class-dump/src/UnitTests/CDStructHandlingUnitTest.m

Issue 7793008: Add the 3.3.3 sources for class-dump. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/deps/third_party/
Patch Set: Created 9 years, 4 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
Index: class-dump/src/UnitTests/CDStructHandlingUnitTest.m
===================================================================
--- class-dump/src/UnitTests/CDStructHandlingUnitTest.m (revision 0)
+++ class-dump/src/UnitTests/CDStructHandlingUnitTest.m (revision 0)
@@ -0,0 +1,271 @@
+// 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 "CDStructHandlingUnitTest.h"
+
+#import <Foundation/Foundation.h>
+#import "NSError-CDExtensions.h"
+
+#import "CDClassDump.h"
+#import "CDType.h"
+#import "CDTypeFormatter.h"
+#import "CDTypeParser.h"
+
+@implementation CDStructHandlingUnitTest
+
+- (void)dealloc;
+{
+ [classDump release];
+
+ [super dealloc];
+}
+
+- (void)setUp;
+{
+ classDump = [[CDClassDump alloc] init];
+}
+
+- (void)tearDown;
+{
+ [classDump release];
+ classDump = nil;
+}
+
+- (void)testVariableName:(NSString *)aVariableName type:(NSString *)aType expectedResult:(NSString *)expectedResult;
+{
+ NSString *result;
+
+ result = [[classDump ivarTypeFormatter] formatVariable:aVariableName type:aType symbolReferences:nil];
+ STAssertEqualObjects(expectedResult, result, @"");
+}
+
+- (void)registerStructsFromType:(NSString *)aTypeString phase:(int)phase;
+{
+ CDTypeParser *parser;
+ CDType *type;
+ NSError *error;
+
+ parser = [[CDTypeParser alloc] initWithType:aTypeString];
+ type = [parser parseType:&error];
+ STAssertNotNil(type, @"-[CDTypeParser parseType:] error: %@", [error myExplanation]);
+
+ [type phase:phase registerStructuresWithObject:classDump usedInMethod:NO];
+ [parser release];
+}
+
+// TODO (2004-01-05): Move this somewhere that we can share it with the main app.
+- (void)testFilename:(NSString *)testFilename;
+{
+ NSString *inputFilename, *outputFilename;
+ NSMutableString *resultString;
+ NSString *inputContents, *expectedOutputContents;
+ NSArray *inputLines, *inputFields;
+ int phase;
+ int count, index;
+ NSBundle *bundle;
+
+ //NSLog(@"***** %@", testFilename);
+
+ resultString = [NSMutableString string];
+
+ bundle = [NSBundle bundleForClass:[self class]];
+ inputFilename = [bundle pathForResource:[testFilename stringByAppendingString:@"-in"] ofType:@"txt"];
+ outputFilename = [bundle pathForResource:[testFilename stringByAppendingString:@"-out"] ofType:@"txt"];
+
+ inputContents = [NSString stringWithContentsOfFile:inputFilename];
+ expectedOutputContents = [NSString stringWithContentsOfFile:outputFilename];
+
+ inputLines = [inputContents componentsSeparatedByString:@"\n"];
+ count = [inputLines count];
+
+ // First register structs/unions
+ for (phase = 1; phase <= 2; phase++) {
+ //NSLog(@"Phase %d ========================================", phase);
+
+ for (index = 0; index < count; index++) {
+ NSString *line;
+
+ line = [inputLines objectAtIndex:index];
+ if ([line length] > 0 && [line hasPrefix:@"//"] == NO) {
+ inputFields = [line componentsSeparatedByString:@"\t"];
+ [self registerStructsFromType:[inputFields objectAtIndex:0] phase:phase];
+ }
+ }
+
+ [classDump endPhase:phase];
+ }
+
+ // Then generate output
+ [classDump appendStructuresToString:resultString symbolReferences:nil];
+
+ for (index = 0; index < count; index++) {
+ NSString *line;
+ NSString *type, *variableName;
+
+ line = [inputLines objectAtIndex:index];
+ if ([line length] > 0 && [line hasPrefix:@"//"] == NO) {
+ int fieldCount, level;
+ NSString *formattedString;
+
+ inputFields = [line componentsSeparatedByString:@"\t"];
+ fieldCount = [inputFields count];
+ type = [inputFields objectAtIndex:0];
+ if (fieldCount > 1)
+ variableName = [inputFields objectAtIndex:1];
+ else
+ variableName = @"var";
+
+ if (fieldCount > 2)
+ level = [[inputFields objectAtIndex:2] intValue];
+ else
+ level = 0;
+
+ formattedString = [[classDump ivarTypeFormatter] formatVariable:variableName type:type symbolReferences:nil];
+ if (formattedString != nil) {
+ [resultString appendString:formattedString];
+ [resultString appendString:@";\n"];
+ } else {
+ [resultString appendString:@"Parse failed.\n"];
+ }
+ }
+ }
+
+ STAssertEqualObjects(expectedOutputContents, resultString, @"test file: %@", testFilename);
+}
+
+#if 1
+- (void)test01;
+{
+ NSString *first = @"{_NSRange=II}";
+ int phase;
+
+ STAssertNotNil(classDump, @"classDump");
+ STAssertNotNil([classDump ivarTypeFormatter], @"[classDump ivarTypeFormatter]");
+
+ for (phase = 1; phase <= 2; phase++)
+ [self registerStructsFromType:first phase:phase];
+ [self testVariableName:@"foo" type:first expectedResult:@" struct _NSRange foo"];
+
+ // Register {_NSRange=II}
+ // Test {_NSRange=II}
+}
+
+- (void)test02;
+{
+ NSString *first = @"{_NSRange=II}";
+ NSString *second = @"{_NSRange=\"location\"I\"length\"I}";
+ int phase;
+
+ for (phase = 1; phase <= 2; phase++) {
+ [self registerStructsFromType:first phase:phase];
+ [self registerStructsFromType:second phase:phase];
+ }
+
+ [self testVariableName:@"foo" type:first expectedResult:@" struct _NSRange foo"];
+ [self testVariableName:@"bar" type:second expectedResult:@" struct _NSRange bar"];
+
+ // Register {_NSRange=II}
+ // Register {_NSRange="location"I"length"I}
+ // Test {_NSRange=II}
+ // Test {_NSRange="location"I"length"I}
+}
+
+- (void)test03;
+{
+ NSString *first = @"{_NSRange=\"location\"I\"length\"I}";
+ NSString *second = @"{_NSRange=II}";
+ int phase;
+
+ for (phase = 1; phase <= 2; phase++) {
+ [self registerStructsFromType:first phase:phase];
+ [self registerStructsFromType:second phase:phase];
+ }
+
+ [self testVariableName:@"foo" type:first expectedResult:@" struct _NSRange foo"];
+ [self testVariableName:@"bar" type:second expectedResult:@" struct _NSRange bar"];
+
+ // Register {_NSRange="location"I"length"I}
+ // Register {_NSRange=II}
+ // Test {_NSRange="location"I"length"I}
+ // Test {_NSRange=II}
+}
+
+- (void)test04;
+{
+ // I'm guessing that "shud" could stand for Struct Handling Unittest Data.
+ [self testFilename:@"shud01"];
+}
+
+- (void)test05;
+{
+ [self testFilename:@"shud02"];
+}
+
+- (void)test06;
+{
+ //[self testFilename:@"shud03"];
+}
+
+- (void)test07;
+{
+ [self testFilename:@"shud04"];
+}
+
+- (void)test08;
+{
+ [self testFilename:@"shud05"];
+}
+
+- (void)test09;
+{
+ [self testFilename:@"shud06"];
+}
+
+- (void)test10;
+{
+ [self testFilename:@"shud07"];
+}
+
+- (void)test11;
+{
+ [self testFilename:@"shud08"];
+}
+
+- (void)test12;
+{
+ [self testFilename:@"shud09"];
+}
+
+- (void)test13;
+{
+ [self testFilename:@"shud10"];
+}
+
+- (void)test14;
+{
+ [self testFilename:@"shud11"];
+}
+#endif
+
+- (void)test15;
+{
+ [self testFilename:@"shud13"];
+}
+
+- (void)test16;
+{
+ //[self testFilename:@"shud14"];
+}
+
+// This tests the new code for dealing with named objects and field names in structures.
+- (void)test17;
+{
+ [self testFilename:@"shud15"];
+}
+
+- (void)test18;
+{
+ [self testFilename:@"shud16"];
+}
+
+@end
Property changes on: class-dump/src/UnitTests/CDStructHandlingUnitTest.m
___________________________________________________________________
Added: svn:eol-style
+ LF
« no previous file with comments | « class-dump/src/UnitTests/CDStructHandlingUnitTest.h ('k') | class-dump/src/UnitTests/CDTypeFormatterUnitTest.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698