From b7031f2f77ee077b1a66b3eb77d99444c32e7cff Mon Sep 17 00:00:00 2001 From: Alexander Ljungberg Date: Fri, 21 Dec 2012 16:53:21 +0000 Subject: [PATCH] Unit test token field autocomplete window close. --- AppKit/CPWindow/CPWindow.j | 4 +++ AppKit/_CPAutocompleteMenu.j | 2 +- Tests/AppKit/CPTokenFieldTest.j | 49 +++++++++++++++++++++++++++++++++ 3 files changed, 54 insertions(+), 1 deletion(-) diff --git a/AppKit/CPWindow/CPWindow.j b/AppKit/CPWindow/CPWindow.j index ffd7de7e6..82185385a 100644 --- a/AppKit/CPWindow/CPWindow.j +++ b/AppKit/CPWindow/CPWindow.j @@ -901,6 +901,8 @@ CPTexturedBackgroundWindowMask [_platformWindow orderFront:self]; [_platformWindow order:CPWindowAbove window:self relativeTo:nil]; +#else + _isVisible = YES; #endif if (!CPApp._keyWindow) @@ -946,6 +948,8 @@ CPTexturedBackgroundWindowMask #if PLATFORM(DOM) [_platformWindow order:CPWindowOut window:self relativeTo:nil]; +#else + _isVisible = NO; #endif [self _updateMainAndKeyWindows]; diff --git a/AppKit/_CPAutocompleteMenu.j b/AppKit/_CPAutocompleteMenu.j index e5254de15..3a658d308 100644 --- a/AppKit/_CPAutocompleteMenu.j +++ b/AppKit/_CPAutocompleteMenu.j @@ -187,7 +187,7 @@ var _CPAutocompleteMenuMaximumHeight = 307; { var indexOfSelectedItem = [self indexOfSelectedItem]; - [self setContentArray:[textField _completionsForSubstring:[textField _inputElement].value indexOfToken:0 indexOfSelectedItem:indexOfSelectedItem]]; + [self setContentArray:[textField _completionsForSubstring:[textField _editorValue] indexOfToken:0 indexOfSelectedItem:indexOfSelectedItem]]; if (![contentArray count]) return; diff --git a/Tests/AppKit/CPTokenFieldTest.j b/Tests/AppKit/CPTokenFieldTest.j index 14e5440f7..76d593ea4 100644 --- a/Tests/AppKit/CPTokenFieldTest.j +++ b/Tests/AppKit/CPTokenFieldTest.j @@ -28,4 +28,53 @@ [[aWindow contentView] addSubview:tokenField]; } +- (void)testCloseParentWindow +{ + var aWindow = [[CPWindow alloc] initWithContentRect:CGRectMake(0.0, 0.0, 1024.0, 768.0) styleMask:CPTitledWindowMask], + tokenField = [[CPTokenField alloc] initWithFrame:CGRectMake(10, 10, 100, 28)]; + + [[aWindow contentView] addSubview:tokenField]; + [tokenField setEnabled:YES]; + [tokenField setEditable:YES]; + + [aWindow makeKeyAndOrderFront:nil]; + + // Start autocomplete. + var tokenDelegate = [TokenFieldDelegate new]; + [tokenDelegate setCompletions:[@"Tokyo", @"Toronto", @"Gothenburg", @"London"]]; + [tokenField setDelegate:tokenDelegate]; + + [tokenField setStringValue:@"To"]; + // Start autocomplete programmatically. + [aWindow makeFirstResponder:tokenField]; + [[tokenField _autocompleteMenu] _showCompletions:nil]; + + // Verify we're now autocompleting. + [self assertTrue:[[tokenField _autocompleteMenu]._menuWindow isVisible] message:@"autocomplete visible"]; + + [aWindow close]; + [self assertFalse:[[tokenField _autocompleteMenu]._menuWindow isVisible] message:@"autocomplete not visible when token field window closes"]; +} + +@end + +@implementation TokenFieldDelegate : CPObject +{ + CPArray completions @accessors; +} + +- (CPArray)tokenField:(CPTokenField)aTokenField completionsForSubstring:(CPString)substring indexOfToken:(int)tokenIndex indexOfSelectedItem:(int)selectedIndex +{ + var r = []; + + if (!substring) + return completions; + + for (var i = 0; i < completions.length; i++) + if (completions[i].toLowerCase().indexOf(completions.toLowerCase()) == 0) + r.push(completions[i]); + + return r; +} + @end