123 lines
4.6 KiB
Swift
123 lines
4.6 KiB
Swift
|
|
import XCTest
|
||
|
|
@testable import IHatePDFs
|
||
|
|
|
||
|
|
final class ReaderAdaptiveLayoutTests: XCTestCase {
|
||
|
|
func testSizeClassBreakpointsMatchMacWindowProfiles() {
|
||
|
|
XCTAssertEqual(ReaderAdaptiveLayout(width: 759).sizeClass, .compact)
|
||
|
|
XCTAssertEqual(ReaderAdaptiveLayout(width: 959).sizeClass, .compact)
|
||
|
|
XCTAssertEqual(ReaderAdaptiveLayout(width: 960).sizeClass, .regular)
|
||
|
|
XCTAssertEqual(ReaderAdaptiveLayout(width: 1_279).sizeClass, .regular)
|
||
|
|
XCTAssertEqual(ReaderAdaptiveLayout(width: 1_280).sizeClass, .wide)
|
||
|
|
}
|
||
|
|
|
||
|
|
func testCompactProfileKeepsSingleSidebarAndDocumentReadableAtMinimumWidth() {
|
||
|
|
let layout = ReaderAdaptiveLayout(width: ReaderAdaptiveLayout.minimumWindowWidth)
|
||
|
|
XCTAssertEqual(layout.sizeClass, .compact)
|
||
|
|
XCTAssertFalse(layout.allowsDualSidebars)
|
||
|
|
XCTAssertTrue(layout.usesCompactToolbar)
|
||
|
|
|
||
|
|
assertDocumentWidthIsPreserved(
|
||
|
|
layout: layout,
|
||
|
|
availableWidth: ReaderAdaptiveLayout.minimumWindowWidth,
|
||
|
|
requestedLeft: layout.leftSidebarMaxWidth,
|
||
|
|
requestedRight: 0,
|
||
|
|
showLeft: true,
|
||
|
|
showRight: false
|
||
|
|
)
|
||
|
|
|
||
|
|
assertDocumentWidthIsPreserved(
|
||
|
|
layout: layout,
|
||
|
|
availableWidth: ReaderAdaptiveLayout.minimumWindowWidth,
|
||
|
|
requestedLeft: 0,
|
||
|
|
requestedRight: layout.rightSidebarMaxWidth,
|
||
|
|
showLeft: false,
|
||
|
|
showRight: true
|
||
|
|
)
|
||
|
|
}
|
||
|
|
|
||
|
|
func testRegularProfilePreservesDocumentWidthWithBothSidebarsAtBreakpoint() {
|
||
|
|
let layout = ReaderAdaptiveLayout(width: 960)
|
||
|
|
XCTAssertEqual(layout.sizeClass, .regular)
|
||
|
|
XCTAssertTrue(layout.allowsDualSidebars)
|
||
|
|
XCTAssertFalse(layout.usesCompactToolbar)
|
||
|
|
|
||
|
|
assertDocumentWidthIsPreserved(
|
||
|
|
layout: layout,
|
||
|
|
availableWidth: 960,
|
||
|
|
requestedLeft: layout.leftSidebarIdealWidth,
|
||
|
|
requestedRight: layout.rightSidebarIdealWidth,
|
||
|
|
showLeft: true,
|
||
|
|
showRight: true
|
||
|
|
)
|
||
|
|
}
|
||
|
|
|
||
|
|
func testExpandedRegularSidebarsShrinkBeforeTheDocumentDoes() {
|
||
|
|
let layout = ReaderAdaptiveLayout(width: 960)
|
||
|
|
|
||
|
|
let widths = layout.resolvedSidebarWidths(
|
||
|
|
availableWidth: 960,
|
||
|
|
requestedLeft: layout.leftSidebarMaxWidth,
|
||
|
|
requestedRight: layout.rightSidebarMaxWidth,
|
||
|
|
showLeft: true,
|
||
|
|
showRight: true
|
||
|
|
)
|
||
|
|
|
||
|
|
XCTAssertGreaterThanOrEqual(widths.left, layout.leftSidebarMinWidth - 0.001)
|
||
|
|
XCTAssertGreaterThanOrEqual(widths.right, layout.rightSidebarMinWidth - 0.001)
|
||
|
|
XCTAssertLessThanOrEqual(widths.left, layout.leftSidebarMaxWidth + 0.001)
|
||
|
|
XCTAssertLessThanOrEqual(widths.right, layout.rightSidebarMaxWidth + 0.001)
|
||
|
|
assertDocumentWidthIsPreserved(
|
||
|
|
layout: layout,
|
||
|
|
availableWidth: 960,
|
||
|
|
requestedLeft: layout.leftSidebarMaxWidth,
|
||
|
|
requestedRight: layout.rightSidebarMaxWidth,
|
||
|
|
showLeft: true,
|
||
|
|
showRight: true
|
||
|
|
)
|
||
|
|
}
|
||
|
|
|
||
|
|
func testWideProfileUsesRoomierSidebarsWhilePreservingDocumentWidth() {
|
||
|
|
let layout = ReaderAdaptiveLayout(width: 1_280)
|
||
|
|
XCTAssertEqual(layout.sizeClass, .wide)
|
||
|
|
XCTAssertGreaterThan(layout.rightSidebarIdealWidth, ReaderAdaptiveLayout(width: 960).rightSidebarIdealWidth)
|
||
|
|
XCTAssertGreaterThan(layout.documentMinWidth, ReaderAdaptiveLayout(width: 960).documentMinWidth)
|
||
|
|
|
||
|
|
assertDocumentWidthIsPreserved(
|
||
|
|
layout: layout,
|
||
|
|
availableWidth: 1_280,
|
||
|
|
requestedLeft: layout.leftSidebarIdealWidth,
|
||
|
|
requestedRight: layout.rightSidebarIdealWidth,
|
||
|
|
showLeft: true,
|
||
|
|
showRight: true
|
||
|
|
)
|
||
|
|
}
|
||
|
|
|
||
|
|
private func assertDocumentWidthIsPreserved(
|
||
|
|
layout: ReaderAdaptiveLayout,
|
||
|
|
availableWidth: CGFloat,
|
||
|
|
requestedLeft: CGFloat,
|
||
|
|
requestedRight: CGFloat,
|
||
|
|
showLeft: Bool,
|
||
|
|
showRight: Bool,
|
||
|
|
file: StaticString = #filePath,
|
||
|
|
line: UInt = #line
|
||
|
|
) {
|
||
|
|
let widths = layout.resolvedSidebarWidths(
|
||
|
|
availableWidth: availableWidth,
|
||
|
|
requestedLeft: requestedLeft,
|
||
|
|
requestedRight: requestedRight,
|
||
|
|
showLeft: showLeft,
|
||
|
|
showRight: showRight
|
||
|
|
)
|
||
|
|
let documentWidth = layout.visibleContentWidth(
|
||
|
|
availableWidth: availableWidth,
|
||
|
|
leftWidth: widths.left,
|
||
|
|
rightWidth: widths.right,
|
||
|
|
showLeft: showLeft,
|
||
|
|
showRight: showRight
|
||
|
|
)
|
||
|
|
|
||
|
|
XCTAssertGreaterThanOrEqual(documentWidth, layout.documentMinWidth - 0.001, file: file, line: line)
|
||
|
|
}
|
||
|
|
}
|