mirror of
https://github.com/cappuccino/cappuccino.git
synced 2026-08-25 13:07:02 +00:00
186 lines
8.3 KiB
Plaintext
186 lines
8.3 KiB
Plaintext
@import <AppKit/CPSplitViewController.j>
|
|
@import <AppKit/CPViewController.j>
|
|
|
|
// MARK: - Test Implementation
|
|
|
|
@implementation CPSplitViewControllerTest : OJTestCase
|
|
{
|
|
// Instance variables can be declared here if needed for tests.
|
|
}
|
|
|
|
// MARK: - Initialization Tests
|
|
|
|
- (void)testInit
|
|
{
|
|
var splitViewController = [[CPSplitViewController alloc] init];
|
|
|
|
[self assertNotNil:splitViewController message:@"CPSplitViewController should initialize."];
|
|
[self assertNotNil:[splitViewController splitViewItems] message:@"splitViewItems should be an empty array on init."];
|
|
[self assert:[[splitViewController splitViewItems] count] equals:0 message:@"splitViewItems should have 0 items on init."];
|
|
}
|
|
|
|
- (void)testViewLoading
|
|
{
|
|
var splitViewController = [[CPSplitViewController alloc] init];
|
|
|
|
// Accessing the view property triggers loadView
|
|
var view = [splitViewController view];
|
|
|
|
[self assertNotNil:view message:@"The controller's view should be created."];
|
|
[self assertTrue:[view isKindOfClass:[CPSplitView class]] message:@"The controller's view should be a CPSplitView."];
|
|
[self assert:[splitViewController splitView] equals:view message:@"The splitView accessor should return the controller's view."];
|
|
}
|
|
|
|
- (void)testSplitViewItemInit
|
|
{
|
|
var childVC = [[CPViewController alloc] init];
|
|
var item = [CPSplitViewItem splitViewItemWithViewController:childVC];
|
|
|
|
[self assertNotNil:item message:@"CPSplitViewItem should be created."];
|
|
[self assert:[item viewController] equals:childVC message:@"The item should hold the correct view controller."];
|
|
[self assertFalse:[item isCollapsed] message:@"A new item should not be collapsed."];
|
|
}
|
|
|
|
// MARK: - Item Management Tests
|
|
|
|
- (void)testAddSplitViewItem
|
|
{
|
|
var splitViewController = [[CPSplitViewController alloc] init];
|
|
[splitViewController view]; // Ensure view is loaded
|
|
|
|
var childVC1 = [[CPViewController alloc] init];
|
|
var item1 = [CPSplitViewItem splitViewItemWithViewController:childVC1];
|
|
|
|
[splitViewController addSplitViewItem:item1];
|
|
|
|
[self assert:[[splitViewController splitViewItems] count] equals:1 message:@"Should have 1 split view item."];
|
|
[self assert:[splitViewController splitViewItemForViewController:childVC1] equals:item1 message:@"Should be able to retrieve item by its view controller."];
|
|
[self assert:[item1 splitViewController] equals:splitViewController message:@"Item should have a reference to its parent controller."];
|
|
[self assert:[[[splitViewController splitView] arrangedSubviews] count] equals:1 message:@"The splitView should have one arranged subview."];
|
|
[self assert:[[[childVC1 view] superview] equals:[splitViewController splitView]] message:@"Child's view should be a subview of the splitView."];
|
|
}
|
|
|
|
- (void)testInsertSplitViewItem
|
|
{
|
|
var splitViewController = [[CPSplitViewController alloc] init];
|
|
[splitViewController view];
|
|
|
|
var childVC1 = [[CPViewController alloc] init];
|
|
var childVC2 = [[CPViewController alloc] init];
|
|
var item1 = [CPSplitViewItem splitViewItemWithViewController:childVC1];
|
|
var item2 = [CPSplitViewItem splitViewItemWithViewController:childVC2];
|
|
|
|
[splitViewController addSplitViewItem:item1];
|
|
[splitViewController insertSplitViewItem:item2 atIndex:0];
|
|
|
|
[self assert:[[splitViewController splitViewItems] count] equals:2 message:@"Should have 2 split view items."];
|
|
[self assert:[[splitViewController splitViewItems] objectAtIndex:0] equals:item2 message:@"Item2 should be at index 0."];
|
|
|
|
var arrangedSubviews = [[splitViewController splitView] arrangedSubviews];
|
|
[self assert:[arrangedSubviews objectAtIndex:0] equals:[childVC2 view] message:@"The view of item2 should be the first arranged subview."];
|
|
}
|
|
|
|
- (void)testRemoveSplitViewItem
|
|
{
|
|
var splitViewController = [[CPSplitViewController alloc] init];
|
|
[splitViewController view];
|
|
|
|
var childVC1 = [[CPViewController alloc] init];
|
|
var item1 = [CPSplitViewItem splitViewItemWithViewController:childVC1];
|
|
|
|
[splitViewController addSplitViewItem:item1];
|
|
[self assert:[[splitViewController splitViewItems] count] equals:1 message:@"Pre-condition: Should have 1 item."];
|
|
|
|
[splitViewController removeSplitViewItem:item1];
|
|
|
|
[self assert:[[splitViewController splitViewItems] count] equals:0 message:@"Should have 0 split view items after removal."];
|
|
[self assertNil:[item1 splitViewController] message:@"Item's reference to parent should be nil after removal."];
|
|
[self assert:[[[splitViewController splitView] arrangedSubviews] count] equals:0 message:@"The splitView should have no arranged subviews after removal."];
|
|
[self assertNil:[[childVC1 view] superview] message:@"Child's view should be removed from the splitView."];
|
|
}
|
|
|
|
- (void)testAddingItemsBeforeViewLoads
|
|
{
|
|
var splitViewController = [[CPSplitViewController alloc] init];
|
|
|
|
var childVC1 = [[CPViewController alloc] init];
|
|
var childVC2 = [[CPViewController alloc] init];
|
|
var item1 = [CPSplitViewItem splitViewItemWithViewController:childVC1];
|
|
var item2 = [CPSplitViewItem splitViewItemWithViewController:childVC2];
|
|
|
|
[splitViewController addSplitViewItem:item1];
|
|
[splitViewController addSplitViewItem:item2];
|
|
|
|
[self assert:[[[splitViewController childViewControllers] objectAtIndex:0] equals:childVC1] message:@"Child view controllers should be added immediately."];
|
|
|
|
// View is not loaded yet, so it should have no arranged subviews
|
|
[self assertNil:[splitViewController _splitView] message:@"SplitView should not exist yet."];
|
|
|
|
// Trigger viewDidLoad
|
|
[splitViewController view];
|
|
|
|
// Now check if the views were added
|
|
var arrangedSubviews = [[splitViewController splitView] arrangedSubviews];
|
|
[self assert:[arrangedSubviews count] equals:2 message:@"SplitView should have 2 subviews after loading."];
|
|
[self assert:[arrangedSubviews objectAtIndex:0] equals:[childVC1 view]];
|
|
[self assert:[arrangedSubviews objectAtIndex:1] equals:[childVC2 view]];
|
|
}
|
|
|
|
|
|
// MARK: - Toggling and State Tests
|
|
|
|
- (void)testToggleSidebar
|
|
{
|
|
var splitViewController = [[CPSplitViewController alloc] init];
|
|
var childVC1 = [[CPViewController alloc] init];
|
|
var item1 = [CPSplitViewItem splitViewItemWithViewController:childVC1];
|
|
[splitViewController addSplitViewItem:item1];
|
|
|
|
[splitViewController toggleSidebar:self];
|
|
[self assertTrue:[item1 isCollapsed] message:@"Sidebar item should be collapsed."];
|
|
[self assertTrue:[[childVC1 view] isHidden] message:@"Sidebar view should be hidden."];
|
|
|
|
[splitViewController toggleSidebar:self];
|
|
[self assertFalse:[item1 isCollapsed] message:@"Sidebar item should be expanded again."];
|
|
[self assertFalse:[[childVC1 view] isHidden] message:@"Sidebar view should be visible again."];
|
|
}
|
|
|
|
- (void)testToggleInspector
|
|
{
|
|
var splitViewController = [[CPSplitViewController alloc] init];
|
|
var childVC1 = [[CPViewController alloc] init];
|
|
var childVC2 = [[CPViewController alloc] init];
|
|
var item1 = [CPSplitViewItem splitViewItemWithViewController:childVC1];
|
|
var item2 = [CPSplitViewItem splitViewItemWithViewController:childVC2];
|
|
[splitViewController addSplitViewItem:item1];
|
|
[splitViewController addSplitViewItem:item2];
|
|
|
|
[splitViewController toggleInspector:self];
|
|
[self assertTrue:[item2 isCollapsed] message:@"Inspector item should be collapsed."];
|
|
[self assertTrue:[[childVC2 view] isHidden] message:@"Inspector view should be hidden."];
|
|
|
|
[splitViewController toggleInspector:self];
|
|
[self assertFalse:[item2 isCollapsed] message:@"Inspector item should be expanded again."];
|
|
[self assertFalse:[[childVC2 view] isHidden] message:@"Inspector view should be visible again."];
|
|
}
|
|
|
|
- (void)testSetCollapsed
|
|
{
|
|
var childVC = [[CPViewController alloc] init];
|
|
var item = [CPSplitViewItem splitViewItemWithViewController:childVC];
|
|
var childView = [childVC view];
|
|
|
|
[item setCollapsed:YES];
|
|
[self assertTrue:[item isCollapsed] message:@"Item's collapsed property should be YES."];
|
|
[self assertTrue:[childView isHidden] message:@"The item's view should be hidden."];
|
|
|
|
[item setCollapsed:NO];
|
|
[self assertFalse:[item isCollapsed] message:@"Item's collapsed property should be NO."];
|
|
[self assertFalse:[childView isHidden] message:@"The item's view should be visible."];
|
|
|
|
// Test idempotency
|
|
[item setCollapsed:NO];
|
|
[self assertFalse:[item isCollapsed] message:@"Setting the same value should have no effect."];
|
|
}
|
|
|
|
@end |