diff --git a/AppKit/CPTokenField.j b/AppKit/CPTokenField.j index 9e9ba617e..cc4b96765 100644 --- a/AppKit/CPTokenField.j +++ b/AppKit/CPTokenField.j @@ -105,7 +105,7 @@ CPTokenFieldDeleteButtonType = 1; int _buttonType @accessors(property=buttonType); id _tokenFieldDelegate; - unsigned _implementedDelegateMethods; + unsigned _implementedTokenFieldDelegateMethods; } + (CPCharacterSet)defaultTokenizingCharacterSet @@ -177,25 +177,25 @@ CPTokenFieldDeleteButtonType = 1; return; _tokenFieldDelegate = aDelegate; - _implementedDelegateMethods = 0; + _implementedTokenFieldDelegateMethods = 0; if ([_tokenFieldDelegate respondsToSelector:@selector(tokenField:hasMenuForRepresentedObject:)]) - _implementedDelegateMethods |= CPTokenFieldDelegate_tokenField_hasMenuForRepresentedObject_; + _implementedTokenFieldDelegateMethods |= CPTokenFieldDelegate_tokenField_hasMenuForRepresentedObject_; if ([_tokenFieldDelegate respondsToSelector:@selector(tokenField:completionsForSubstring:indexOfToken:indexOfSelectedItem:)]) - _implementedDelegateMethods |= CPTokenFieldDelegate_tokenField_completionsForSubstring_indexOfToken_indexOfSelectedItem_; + _implementedTokenFieldDelegateMethods |= CPTokenFieldDelegate_tokenField_completionsForSubstring_indexOfToken_indexOfSelectedItem_; if ([_tokenFieldDelegate respondsToSelector:@selector(tokenField:shouldAddObjects:atIndex:)]) - _implementedDelegateMethods |= CPTokenFieldDelegate_tokenField_shouldAddObjects_atIndex_; + _implementedTokenFieldDelegateMethods |= CPTokenFieldDelegate_tokenField_shouldAddObjects_atIndex_; if ([_tokenFieldDelegate respondsToSelector:@selector(tokenField:menuForRepresentedObject:)]) - _implementedDelegateMethods |= CPTokenFieldDelegate_tokenField_menuForRepresentedObject_; + _implementedTokenFieldDelegateMethods |= CPTokenFieldDelegate_tokenField_menuForRepresentedObject_; if ([_tokenFieldDelegate respondsToSelector:@selector(tokenField:displayStringForRepresentedObject:)]) - _implementedDelegateMethods |= CPTokenFieldDelegate_tokenField_displayStringForRepresentedObject_; + _implementedTokenFieldDelegateMethods |= CPTokenFieldDelegate_tokenField_displayStringForRepresentedObject_; if ([_tokenFieldDelegate respondsToSelector:@selector(tokenField:representedObjectForEditingString:)]) - _implementedDelegateMethods |= CPTokenFieldDelegate_tokenField_representedObjectForEditingString_; + _implementedTokenFieldDelegateMethods |= CPTokenFieldDelegate_tokenField_representedObjectForEditingString_; [super setDelegate:_tokenFieldDelegate]; } @@ -1248,7 +1248,7 @@ CPTokenFieldDeleteButtonType = 1; */ - (CPArray)_completionsForSubstring:(CPString)substring indexOfToken:(int)tokenIndex indexOfSelectedItem:(int)selectedIndex { - if (!(_implementedDelegateMethods & CPTokenFieldDelegate_tokenField_completionsForSubstring_indexOfToken_indexOfSelectedItem_)) + if (!(_implementedTokenFieldDelegateMethods & CPTokenFieldDelegate_tokenField_completionsForSubstring_indexOfToken_indexOfSelectedItem_)) return []; return [_tokenFieldDelegate tokenField:self completionsForSubstring:substring indexOfToken:tokenIndex indexOfSelectedItem:selectedIndex]; @@ -1274,7 +1274,7 @@ CPTokenFieldDeleteButtonType = 1; */ - (CPString)_displayStringForRepresentedObject:(id)representedObject { - if (_implementedDelegateMethods & CPTokenFieldDelegate_tokenField_displayStringForRepresentedObject_) + if (_implementedTokenFieldDelegateMethods & CPTokenFieldDelegate_tokenField_displayStringForRepresentedObject_) { var stringForRepresentedObject = [_tokenFieldDelegate tokenField:self displayStringForRepresentedObject:representedObject]; @@ -1296,7 +1296,7 @@ CPTokenFieldDeleteButtonType = 1; */ - (CPArray)_shouldAddObjects:(CPArray)tokens atIndex:(int)index { - if (_implementedDelegateMethods & CPTokenFieldDelegate_tokenField_shouldAddObjects_atIndex_) + if (_implementedTokenFieldDelegateMethods & CPTokenFieldDelegate_tokenField_shouldAddObjects_atIndex_) { var approvedObjects = [_tokenFieldDelegate tokenField:self shouldAddObjects:tokens atIndex:index]; @@ -1318,7 +1318,7 @@ CPTokenFieldDeleteButtonType = 1; */ - (id)_representedObjectForEditingString:(CPString)aString { - if (_implementedDelegateMethods & CPTokenFieldDelegate_tokenField_representedObjectForEditingString_) + if (_implementedTokenFieldDelegateMethods & CPTokenFieldDelegate_tokenField_representedObjectForEditingString_) { var token = [_tokenFieldDelegate tokenField:self representedObjectForEditingString:aString]; @@ -1333,8 +1333,8 @@ CPTokenFieldDeleteButtonType = 1; - (BOOL)_hasMenuForRepresentedObject:(id)aRepresentedObject { - if ((_implementedDelegateMethods & CPTokenFieldDelegate_tokenField_hasMenuForRepresentedObject_) && - (_implementedDelegateMethods & CPTokenFieldDelegate_tokenField_menuForRepresentedObject_)) + if ((_implementedTokenFieldDelegateMethods & CPTokenFieldDelegate_tokenField_hasMenuForRepresentedObject_) && + (_implementedTokenFieldDelegateMethods & CPTokenFieldDelegate_tokenField_menuForRepresentedObject_)) return [_tokenFieldDelegate tokenField:self hasMenuForRepresentedObject:aRepresentedObject]; return NO; @@ -1342,8 +1342,8 @@ CPTokenFieldDeleteButtonType = 1; - (CPMenu)_menuForRepresentedObject:(id)aRepresentedObject { - if ((_implementedDelegateMethods & CPTokenFieldDelegate_tokenField_hasMenuForRepresentedObject_) && - (_implementedDelegateMethods & CPTokenFieldDelegate_tokenField_menuForRepresentedObject_)) + if ((_implementedTokenFieldDelegateMethods & CPTokenFieldDelegate_tokenField_hasMenuForRepresentedObject_) && + (_implementedTokenFieldDelegateMethods & CPTokenFieldDelegate_tokenField_menuForRepresentedObject_)) { var hasMenu = [_tokenFieldDelegate tokenField:self hasMenuForRepresentedObject:aRepresentedObject]; diff --git a/Tests/AppKit/CPTokenFieldTest.j b/Tests/AppKit/CPTokenFieldTest.j index 174820192..e4d7485f7 100644 --- a/Tests/AppKit/CPTokenFieldTest.j +++ b/Tests/AppKit/CPTokenFieldTest.j @@ -4,8 +4,33 @@ @implementation CPTokenFieldTest : OJTestCase { + CPWindow _theWindow; + CPTokenField _tokenField; + TestDelegateTokenField _delegate; + } +- (void)setUp +{ + _theWindow = [[CPWindow alloc] initWithContentRect:CGRectMake(0.0, 0.0, 1024.0, 768.0) + styleMask:CPWindowNotSizable]; + + _tokenField = [CPTokenField new]; + _delegate = [TestDelegateTokenField new]; + + [_tokenField setDelegate:_delegate]; + + [[_theWindow contentView] addSubview:_tokenField]; +} + +- (void)tearDown +{ + +} + +#pragma mark - +#pragma mark Test creation + - (void)testArchiving { var tokenField = [CPTokenField new]; @@ -28,4 +53,62 @@ [[aWindow contentView] addSubview:tokenField]; } + +#pragma mark - +#pragma mark Test objectValue and stringValue + +/*! + This is totally different than cocoa +*/ +- (void)testSetObjectValueWithString +{ + [_tokenField setObjectValue:@"Alexandre"]; + [self assert:[_tokenField stringValue] equals:""]; +} + +- (void)testObjectValueWithArrayOfStrings +{ + [_tokenField setObjectValue:[@"Alexandre", @"Antoine"]]; + [self assert:[_tokenField objectValue] equals:[@"Alexandre",@"Antoine"]]; +} + +- (void)testStringValueWithArrayOfStrings +{ + [_tokenField setObjectValue:[@"Alexandre", @"Antoine"]]; + [self assert:[_tokenField stringValue] equals:@"Alexandre,Antoine"]; +} + + +#pragma mark - +#pragma mark Delegate methods + +- (void)testDelegateDisplayStringForRepresentedObject +{ + [_tokenField setObjectValue:[@"Alexandre", @"Antoine"]]; + [self assert:[_delegate representedObjects] equals:[@"Alexandre", @"Antoine"]]; +} + +@end + +@implementation TestDelegateTokenField : CPObject +{ + CPArray _representedObjects @accessors(property=representedObjects); +} + +- (id)init +{ + if (self = [super init]) + { + _representedObjects = []; + } + + return self; +} + +- (CPString)tokenField:(CPTokenField)tokenField displayStringForRepresentedObject:(id)representedObject +{ + [_representedObjects addObject:representedObject]; + return representedObject; +} + @end