Files
cappuccino/Tests/AppKit/CPRulerViewTest.j
T
David Richardson 8e4742a250 AppKit: Carry Interface Builder's Uses Ruler setting into cibs
nib2cib ignored the text view's Uses Ruler setting, and CPTextView, CPRulerView and CPRulerMarker archived none of their ruler state, so a ruler could not be configured in Interface Builder or survive archiving.

* CPScrollView.j: Set itself as the scroll view of decoded rulers.

* CPTextView/CPRulerMarker.j: Archive the marker's ruler, location, image and image origin, movability, removability and represented object.

* CPTextView/CPRulerView.j: Archive the ruler's orientation, client view, accessory view, markers, thicknesses, origin offset and measurement units.

* CPTextView/CPTextView.j: Archive usesRuler.

* Tools/nib2cib/NSTextView.j, Tools/nib2cib/NSTextViewSharedData.j: Read the Uses Ruler flag.

* Tests/AppKit/CPRulerViewTest.j: Add tests for ruler layout, measurement units, archiving and the Uses Ruler setting.

* Tests/Manual/TextEditor/Resources/MainMenu.xib, Resources/MainMenu.cib: Add the standard Format menu, whose Text submenu shows and hides the ruler.

* Tests/Manual/TextEditor/Resources/DocumentWindow.xib, Resources/DocumentWindow.cib: Rebuild the cib with the ruler setting, and adjust the window's initial position.
2026-10-23 21:10:17 -06:00

108 lines
3.6 KiB
Plaintext

@import <AppKit/CPApplication.j>
@import <AppKit/CPRulerView.j>
@import <AppKit/CPScrollView.j>
@import <AppKit/CPTextView.j>
@implementation CPRulerViewTest : OJTestCase
{
CPScrollView scrollView;
CPRulerView ruler;
}
- (void)setUp
{
[[CPApplication alloc] init];
scrollView = [[CPScrollView alloc] initWithFrame:CGRectMake(0.0, 0.0, 300.0, 200.0)];
[scrollView setHasHorizontalRuler:YES];
ruler = [scrollView horizontalRulerView];
}
- (id)roundTrip:(id)anObject
{
return [CPKeyedUnarchiver unarchiveObjectWithData:[CPKeyedArchiver archivedDataWithRootObject:anObject]];
}
- (void)testRequiredThicknessCombinesTheRulerAreas
{
[ruler setRuleThickness:16.0];
[ruler setReservedThicknessForMarkers:9.0];
[ruler setReservedThicknessForAccessoryView:5.0];
[self assert:30.0 equals:[ruler requiredThickness]];
[self assert:14.0 equals:[ruler baselineLocation]];
}
- (void)testMeasurementUnitsAcceptOnlyRegisteredUnits
{
[ruler setMeasurementUnits:CPRulerViewUnitPoints];
[self assert:CPRulerViewUnitPoints equals:[ruler measurementUnits]];
[ruler setMeasurementUnits:@"Furlongs"];
[self assert:CPRulerViewUnitPoints equals:[ruler measurementUnits]];
[CPRulerView registerUnitWithName:@"Furlongs" abbreviation:@"fur" unitToPointsConversionFactor:570240.0 stepUpCycle:[2.0] stepDownCycle:[0.5]];
[ruler setMeasurementUnits:@"Furlongs"];
[self assert:@"Furlongs" equals:[ruler measurementUnits]];
}
- (void)testRulerViewArchiving
{
var marker = [[CPRulerMarker alloc] initWithRulerView:ruler markerLocation:42.0 image:nil imageOrigin:CGPointMake(4.0, 8.0)];
[marker setRemovable:YES];
[marker setRepresentedObject:@"Tab"];
[ruler setRuleThickness:18.0];
[ruler setReservedThicknessForMarkers:9.0];
[ruler setOriginOffset:7.0];
[ruler setMeasurementUnits:CPRulerViewUnitPicas];
[ruler setMarkers:[marker]];
var decodedScrollView = [self roundTrip:scrollView],
decodedRuler = [decodedScrollView horizontalRulerView],
decodedMarker = [[decodedRuler markers] firstObject];
[self assert:decodedScrollView equals:[decodedRuler scrollView] message:@"the scroll view should reconnect its decoded ruler"];
[self assert:CPHorizontalRuler equals:[decodedRuler orientation]];
[self assert:18.0 equals:[decodedRuler ruleThickness]];
[self assert:9.0 equals:[decodedRuler reservedThicknessForMarkers]];
[self assert:7.0 equals:[decodedRuler originOffset]];
[self assert:CPRulerViewUnitPicas equals:[decodedRuler measurementUnits]];
[self assert:42.0 equals:[decodedMarker markerLocation]];
[self assert:4.0 equals:[decodedMarker imageOrigin].x];
[self assert:8.0 equals:[decodedMarker imageOrigin].y];
[self assertTrue:[decodedMarker isMovable]];
[self assertTrue:[decodedMarker isRemovable]];
[self assert:@"Tab" equals:[decodedMarker representedObject]];
[self assert:decodedRuler equals:[decodedMarker ruler]];
}
- (void)testTextViewUsesRulerArchiving
{
var textView = [[CPTextView alloc] initWithFrame:CGRectMake(0.0, 0.0, 300.0, 200.0)];
[self assertTrue:[textView usesRuler] message:@"a text view uses a ruler by default"];
[textView setUsesRuler:NO];
[self assertFalse:[[self roundTrip:textView] usesRuler]];
[textView setUsesRuler:YES];
[self assertTrue:[[self roundTrip:textView] usesRuler]];
}
- (void)testTextViewWithoutRulerCannotShowIt
{
var textView = [[CPTextView alloc] initWithFrame:CGRectMake(0.0, 0.0, 300.0, 200.0)];
[scrollView setDocumentView:textView];
[textView setUsesRuler:NO];
[textView setRulerVisible:YES];
[self assertFalse:[textView isRulerVisible]];
}
@end