This is TestControl.m in view mode; [Download] [Up]
// TestControl.m
//
// by Mike Ferris
// Part of MOKit
// Copyright 1993, all rights reserved.
// ABOUT MOKit
// by Mike Ferris (mike@lorax.com)
//
// MOKit is a collection of useful and general objects. Permission is
// granted by the author to use MOKit in your own programs in any way
// you see fit. All other rights pertaining to the kit are reserved by the
// author including the right to sell these objects as objects, as part
// of a LIBRARY, or as SOURCE CODE. In plain English, I wish to retain
// rights to these objects as objects, but allow the use of the objects
// as pieces in a fully functional program. Permission is also granted to
// redistribute the source code of MOKit for FREE as long as this copyright
// notice is left intact and unchanged. NO WARRANTY is expressed or implied.
// The author will under no circumstances be held responsible for ANY
// consequences from the use of these objects. Since you don't have to pay
// for them, and full source is provided, I think this is perfectly fair.
#import "TestControl.h"
#import "MOKit/MOString.h"
#import "MOKit/MOSybaseString.h"
#import "MOKit/MOPathString.h"
@implementation TestControl
- init
{
[super init];
return self;
}
- appDidInit:sender
{
return self;
}
- appendText:(const char *)newText
// add newText to the end of the text object
{
if (newText) {
if (outputText) {
int currentLength = [outputText textLength];
[outputText setSel:currentLength :currentLength];
[outputText replaceSel:newText];
[outputText scrollSelToVisible];
} else {
NXLogError(newText);
}
}
return self;
}
- appendString:string
{
if (string) {
[self appendText:[string stringValue]];
}
return self;
}
- doEndOfSection
{
return [self appendText:"\n\n------------------------------\n\n"];
}
- parseTest
{
id str1, str2;
id outBuff;
id tokenList;
int i, c;
str1 = [[MOString allocFromZone:[self zone]] init];
outBuff = [[MOString allocFromZone:[self zone]] init];
[self appendText:"Parse test:\n"];
[str1 setStringValue:"ARMS, and the man I sing, who, forc'd by fate,"];
[outBuff setFromFormat:"\tstring 1 = \"%s\"\n\n", [str1 stringValue]];
[self appendString:outBuff];
[outBuff setFromFormat:"[str1 charAt:3] = %c\n", [str1 charAt:3]];
[self appendString:outBuff];
[outBuff setFromFormat:"[str1 charAt:14] = %c\n", [str1 charAt:14]];
[self appendString:outBuff];
str2 = [str1 substringFrom:0 to:4];
[outBuff setFromFormat:"[str1 substringFrom:0 to:4] = \"%s\"\n",
[str2 stringValue]];
[self appendString:outBuff];
[str2 free];
str2 = [str1 substringFrom:31 to:44];
[outBuff setFromFormat:"[str1 substringFrom:31 to:44] = \"%s\"\n",
[str2 stringValue]];
[self appendString:outBuff];
[str2 free];
[outBuff setFromFormat:"[str1 positionOf:'n' nthOccurrence:1] = %d\n",
[str1 positionOf:'n' nthOccurrence:1]];
[self appendString:outBuff];
[outBuff setFromFormat:"[str1 positionOf:'n' nthOccurrence:2] = %d\n",
[str1 positionOf:'n' nthOccurrence:2]];
[self appendString:outBuff];
[outBuff setFromFormat:"[str1 positionOf:'n' nthOccurrence:-1] = %d\n",
[str1 positionOf:'n' nthOccurrence:-1]];
[self appendString:outBuff];
[outBuff setFromFormat:"[str1 positionOf:'n' nthOccurrence:-2] = %d\n",
[str1 positionOf:'n' nthOccurrence:-2]];
[self appendString:outBuff];
[self appendText:"Tokenizing str1. Break at spaces.\n"];
tokenList = [str1 tokenize:" " into:nil];
if (tokenList) {
c = [tokenList count];
for (i=0; i<c; i++) {
[outBuff setFromFormat:"\tToken %d = \"%s\"\n", i,
[[tokenList objectAt:i] stringValue]];
[self appendString:outBuff];
}
[[tokenList freeObjects] free];
} else {
[self appendText:"No tokens.\n"];
}
[self doEndOfSection];
[str1 free];
[outBuff free];
return self;
}
- modifyTest
{
id str1, str2;
id outBuff;
str1 = [[MOString allocFromZone:[self zone]] init];
str2 = [[MOString allocFromZone:[self zone]] init];
outBuff = [[MOString allocFromZone:[self zone]] init];
[self appendText:"Modification test:\n"];
[str1 setStringValue:"xyzzy"];
[outBuff setFromFormat:"\tstring 1 = \"%s\"\n\n", [str1 stringValue]];
[self appendString:outBuff];
[str1 replaceCharAt:0 with:'q'];
[outBuff setFromFormat:"[str1 replaceCharAt:0 with:'q'] = \"%s\"\n",
[str1 stringValue]];
[self appendString:outBuff];
[str1 replaceAllOccurrencesOfChar:'y' with:'p'];
[outBuff setFromFormat:"[str1 replaceAllOccurrencesOfChar:'y' with:'p'] "
"= \"%s\"\n",
[str1 stringValue]];
[self appendString:outBuff];
[str1 convertToUpper];
[outBuff setFromFormat:"[str1 convertToUpper] = \"%s\"\n",
[str1 stringValue]];
[self appendString:outBuff];
[str1 convertToLower];
[outBuff setFromFormat:"[str1 convertToLower] = \"%s\"\n",
[str1 stringValue]];
[self appendString:outBuff];
[str2 setStringValue:"Hello"];
[outBuff setFromFormat:"\n\tstring 2 = \"%s\"\n\n", [str2 stringValue]];
[self appendString:outBuff];
[str1 takeStringValueFrom:str2];
[outBuff setFromFormat:"[str1 takeStringValueFrom:str2] = \"%s\"\n",
[str1 stringValue]];
[self appendString:outBuff];
[str2 setIntValue:12];
[outBuff setFromFormat:"\n\tstring 2 = \"%s\"\n\n", [str2 stringValue]];
[self appendString:outBuff];
[str1 takeIntValueFrom:str2];
[outBuff setFromFormat:"[str1 takeIntValueFrom:str2] = \"%s\"\n",
[str1 stringValue]];
[self appendString:outBuff];
[str2 setFloatValue:12.24];
[outBuff setFromFormat:"\n\tstring 2 = \"%s\"\n\n", [str2 stringValue]];
[self appendString:outBuff];
[str1 takeFloatValueFrom:str2];
[outBuff setFromFormat:"[str1 takeFloatValueFrom:str2] = \"%s\"\n",
[str1 stringValue]];
[self appendString:outBuff];
[str1 takeDoubleValueFrom:str2];
[outBuff setFromFormat:"[str1 takeDoubleValueFrom:str2] = \"%s\"\n",
[str1 stringValue]];
[self appendString:outBuff];
[self doEndOfSection];
[str1 free]; [str2 free];
[outBuff free];
return self;
}
- addTest
{
id str1, str2, str3;
id outBuff;
str1 = [[MOString allocFromZone:[self zone]] init];
str2 = [[MOString allocFromZone:[self zone]] init];
str3 = [[MOString allocFromZone:[self zone]] init];
outBuff = [[MOString allocFromZone:[self zone]] init];
[self appendText:"cat..., preCat..., insert... test:\n"];
[str1 setStringValue:"is the good men to come"];
[str2 setStringValue:"time for all "];
[outBuff setFromFormat:"\tstring 1 = \"%s\"\n", [str1 stringValue]];
[self appendString:outBuff];
[outBuff setFromFormat:"\tstring 2 = \"%s\"\n", [str2 stringValue]];
[self appendString:outBuff];
[str3 setStringValue:" to the aid"];
[outBuff setFromFormat:"\tstring 3 = \"%s\"\n\n", [str3 stringValue]];
[self appendString:outBuff];
[str1 cat:str3];
[outBuff setFromFormat:"[str1 cat:str3] = \"%s\"\n", [str1 stringValue]];
[self appendString:outBuff];
[str1 catStringValue:" of"];
[outBuff setFromFormat:"[str1 catStringValue:\" of\"] \n\t= \"%s\"\n",
[str1 stringValue]];
[self appendString:outBuff];
[str1 catFromFormat:" %s %s", "their", "country"];
[outBuff setFromFormat:"[str1 catFromFormat:\" %%s %%s\", \"their\", "
"\"country\"] \n\t= \"%s\"\n",
[str1 stringValue]];
[self appendString:outBuff];
[str1 insert:str2 at:7];
[outBuff setFromFormat:"[str1 insert:str2 at:7] \n\t= \"%s\"\n",
[str1 stringValue]];
[self appendString:outBuff];
[str3 setStringValue:"Now "];
[outBuff setFromFormat:"\n\tstring 3 = \"%s\"\n\n", [str3 stringValue]];
[self appendString:outBuff];
[str1 preCat:str3];
[outBuff setFromFormat:"[str1 preCat:str3] \n\t= \"%s\"\n",
[str1 stringValue]];
[self appendString:outBuff];
[str1 insertStringValue:"really " at:7];
[outBuff setFromFormat:"[str1 insertStringValue:\"really \" at:7] \n\t= "
"\"%s\"\n",
[str1 stringValue]];
[self appendString:outBuff];
[str1 preCatStringValue:"Verily, "];
[outBuff setFromFormat:"[str1 preCatStringValue:\"Verily, \"] \n\t= "
"\"%s\"\n",
[str1 stringValue]];
[self appendString:outBuff];
[str1 preCatFromFormat:"%s %s, ", "Oh", "Baby"];
[outBuff setFromFormat:"[str1 preCatFromFormat:\"%%s %%s, \", "
"\"Oh\", \"Baby\"] \n\t= \"%s\"\n",
[str1 stringValue]];
[self appendString:outBuff];
[self doEndOfSection];
[str1 free]; [str2 free]; [str3 free];
[outBuff free];
return self;
}
- compareTest
{
id str1, str2, str3;
id outBuff;
str1 = [[MOString allocFromZone:[self zone]] init];
str2 = [[MOString allocFromZone:[self zone]] init];
str3 = [[MOString allocFromZone:[self zone]] init];
outBuff = [[MOString allocFromZone:[self zone]] init];
[self appendText:"Comparison test:\n"];
[str1 setStringValue:"We the people, in order to find..."];
[str2 setStringValue:"We the people, In order to find..."];
[str3 setStringValue:"We the stupid horse-brained masses... "];
[outBuff setFromFormat:"\tstring 1 = \"%s\"\n", [str1 stringValue]];
[self appendString:outBuff];
[outBuff setFromFormat:"\tstring 2 = \"%s\"\n", [str2 stringValue]];
[self appendString:outBuff];
[outBuff setFromFormat:"\tstring 3 = \"%s\"\n\n", [str3 stringValue]];
[self appendString:outBuff];
[outBuff setFromFormat:"[str1 compare:str2] = %d\n",
[str1 compare:str2]];
[self appendString:outBuff];
[outBuff setFromFormat:"[str1 compare:str2 caseSensitive:NO] = %d\n",
[str1 compare:str2 caseSensitive:NO]];
[self appendString:outBuff];
[outBuff setFromFormat:"[str1 compare:str3 caseSensitive:NO] = %d\n",
[str1 compare:str3 caseSensitive:NO]];
[self appendString:outBuff];
[outBuff setFromFormat:"[str1 compare:str3 caseSensitive:NO length:6] "
"= %d\n",
[str1 compare:str3 caseSensitive:NO length:6]];
[self appendString:outBuff];
[outBuff setFromFormat:"[str1 compareStr:\"WE THE PEOPLE\" "
"caseSensitive:NO length:13] = %d\n",
[str1 compareStr:"WE THE PEOPLE" caseSensitive:NO length:13]];
[self appendString:outBuff];
[self doEndOfSection];
[str1 free]; [str2 free]; [str3 free];
[outBuff free];
return self;
}
- endCompareTest
{
id str1, str2, str3;
id outBuff;
str1 = [[MOString allocFromZone:[self zone]] init];
str2 = [[MOString allocFromZone:[self zone]] init];
str3 = [[MOString allocFromZone:[self zone]] init];
outBuff = [[MOString allocFromZone:[self zone]] init];
[self appendText:"End comparison test:\n"];
[str1 setStringValue:"HelloThere.rtf"];
[str2 setStringValue:"SomeFile.rtf"];
[str3 setStringValue:".rtf"];
[outBuff setFromFormat:"\tstring 1 = \"%s\"\n", [str1 stringValue]];
[self appendString:outBuff];
[outBuff setFromFormat:"\tstring 2 = \"%s\"\n", [str2 stringValue]];
[self appendString:outBuff];
[outBuff setFromFormat:"\tstring 3 = \"%s\"\n\n", [str3 stringValue]];
[self appendString:outBuff];
[outBuff setFromFormat:"[str1 endCompare:str3] = %d\n",
[str1 endCompare:str3]];
[self appendString:outBuff];
[outBuff setFromFormat:"[str1 endCompare:str2 caseSensitive:NO "
"length:4] = %d\n",
[str1 endCompare:str2 caseSensitive:NO length:4]];
[self appendString:outBuff];
[outBuff setFromFormat:"[str1 endCompare:str2 caseSensitive:NO "
"length:6] = %d\n",
[str1 endCompare:str2 caseSensitive:NO length:6]];
[self appendString:outBuff];
[outBuff setFromFormat:"[str2 endCompareStr:\".rtf\"] = %d\n",
[str2 endCompareStr:".rtf"]];
[self appendString:outBuff];
[self doEndOfSection];
[str1 free]; [str2 free]; [str3 free];
[outBuff free];
return self;
}
- runMOStringDiagnostic:sender
{
// id str1, str2, str3;
// id outBuff;
// str1 = [[MOString allocFromZone:[self zone]] init];
// str2 = [[MOString allocFromZone:[self zone]] init];
// str3 = [[MOString allocFromZone:[self zone]] init];
// outBuff = [[MOString allocFromZone:[self zone]] init];
[self appendText:"MOString Diagnostic:\n"
"--------------------\n\n"];
[self parseTest];
[self modifyTest];
[self addTest];
[self compareTest];
[self endCompareTest];
return self;
}
- runMOSybaseStringDiagnostic:sender
{
id str1, str2;
id outBuff;
str1 = [[MOSybaseString allocFromZone:[self zone]] init];
str2 = [[MOSybaseString allocFromZone:[self zone]] init];
outBuff = [[MOString allocFromZone:[self zone]] init];
[self appendText:"MOSybaseString Diagnostic:\n\n"];
[str1 setStringValue:"This12 String@.,will be caSE inseNsitive"];
[str2 setStringValue:"Wildcards: *?*?*? *?"];
[outBuff setFromFormat:"\tstring 1 = \"%s\"\n", [str1 stringValue]];
[self appendString:outBuff];
[outBuff setFromFormat:"\tstring 2 = \"%s\"\n\n", [str2 stringValue]];
[self appendString:outBuff];
[str1 convertToCaseInsensitiveSearchString];
[outBuff setFromFormat:"Case converted string 1 = \"%s\"\n",
[str1 stringValue]];
[self appendString:outBuff];
[str2 convertUnixWildcardsToSybase];
[outBuff setFromFormat:"Wildcard converted string 2 = \"%s\"\n",
[str2 stringValue]];
[self appendString:outBuff];
[self doEndOfSection];
[str1 free]; [str2 free];
[outBuff free];
return self;
}
- runMOPathStringDiagnostic:sender
{
MOPathString *str1, *str2, *str3, *str4, *str5, *str6;
id outBuff;
int i, c;
str1 = [[MOPathString allocFromZone:[self zone]] init];
str2 = [[MOPathString allocFromZone:[self zone]] init];
outBuff = [[MOString allocFromZone:[self zone]] init];
[self appendText:"MOPathString Diagnostic:\n\n"];
[self appendText:"\tThis won't fully test things if you don't have "
"the developer docs on line since it depends on a "
"certain file being there to test certain features.\n\n"];
[str1 setPath:"/NextLibrary/Documentation/NextDev/GeneralRef/"
"02_ApplicationKit/Protocols/NXDraggingSource.rtf"];
[str2 setPath:"..//./.temp/blah.tiff"];
[outBuff setFromFormat:"\tstring 1 = \"%s\"\n", [str1 path]];
[self appendString:outBuff];
[outBuff setFromFormat:"\tstring 2 = \"%s\"\n\n", [str2 path]];
[self appendString:outBuff];
[outBuff setFromFormat:"[str1 isAbsolute] = %s, [str1 isRelative] = %s\n",
([str1 isAbsolute]?"YES":"NO"),
([str1 isRelative]?"YES":"NO")];
[self appendString:outBuff];
[outBuff setFromFormat:"[str2 isAbsolute] = %s, [str2 isRelative] = %s\n",
([str2 isAbsolute]?"YES":"NO"),
([str2 isRelative]?"YES":"NO")];
[self appendString:outBuff];
[outBuff setFromFormat:"[str1 doesExistInFileSystem] = %s\n",
([str1 doesExistInFileSystem]?"YES":"NO")];
[self appendString:outBuff];
[outBuff setFromFormat:"[str2 doesExistInFileSystem] = %s\n",
([str2 doesExistInFileSystem]?"YES":"NO")];
[self appendString:outBuff];
[outBuff setFromFormat:"[str1 isDirectory] = %s, "
"[str1 isPlainFile] = %s\n",
([str1 isDirectory]?"YES":"NO"),
([str1 isPlainFile]?"YES":"NO")];
[self appendString:outBuff];
str3 = [str1 directory];
str4 = [str1 file];
[outBuff setFromFormat:"[str1 directory] = \"%s\"\n", [str3 path]];
[self appendString:outBuff];
[outBuff setFromFormat:"[str1 file] = \"%s\"\n", [str4 path]];
[self appendString:outBuff];
[outBuff setFromFormat:"[[str1 directory] isDirectory] = %s, "
"[[str1 directory] isPlainFile] = %s\n",
([str3 isDirectory]?"YES":"NO"),
([str3 isPlainFile]?"YES":"NO")];
[self appendString:outBuff];
c = [str1 numberOfComponents];
[outBuff setFromFormat:"String 1 has %d path components.\n", c];
[self appendString:outBuff];
for (i=0; i<c; i++) {
str5 = [str1 componentAt:i];
[outBuff setFromFormat:"\tComponent %d = \"%s\"\n", i, [str5 path]];
[self appendString:outBuff];
[str5 free];
}
c = [str2 numberOfComponents];
[outBuff setFromFormat:"String 2 has %d path components.\n", c];
[self appendString:outBuff];
for (i=0; i<c; i++) {
str5 = [str2 componentAt:i];
[outBuff setFromFormat:"\tComponent %d = \"%s\"\n", i, [str5 path]];
[self appendString:outBuff];
[str5 free];
}
str5 = [str1 fileExtension];
[outBuff setFromFormat:"String 1 has file extension \"%s\"\n",
[str5 path]];
[self appendString:outBuff];
[str5 free];
str5 = [str1 fileBasename];
[outBuff setFromFormat:"String 1 has file basename \"%s\"\n",
[str5 path]];
[self appendString:outBuff];
[str5 free];
str5 = [str2 fileExtension];
[outBuff setFromFormat:"String 2 has file extension \"%s\"\n",
[str5 path]];
[self appendString:outBuff];
[str5 free];
str5 = [str2 fileBasename];
[outBuff setFromFormat:"String 2 has file basename \"%s\"\n",
[str5 path]];
[self appendString:outBuff];
[str5 free];
str5 = [str2 componentAt:0];
str6 = [str5 fileExtension];
[outBuff setFromFormat:"\"..\" has file extension \"%s\"\n",
[str6 path]];
[self appendString:outBuff];
[str6 free];
str6 = [str5 fileBasename];
[outBuff setFromFormat:"\"..\" has file basename \"%s\"\n",
[str6 path]];
[self appendString:outBuff];
[str6 free];
[str5 free];
str5 = [str2 componentAt:3];
str6 = [str5 fileExtension];
[outBuff setFromFormat:"\".temp\" has file extension \"%s\"\n",
[str6 path]];
[self appendString:outBuff];
[str6 free];
str6 = [str5 fileBasename];
[outBuff setFromFormat:"\".temp\" has file basename \"%s\"\n",
[str6 path]];
[self appendString:outBuff];
[str6 free];
[str5 free];
[self doEndOfSection];
[str1 free]; [str2 free]; [str3 free]; [str4 free];
[outBuff free];
return self;
}
@end
These are the contents of the former NiCE NeXT User Group NeXTSTEP/OpenStep software archive, currently hosted by Netfuture.ch.