mirror of
https://github.com/material-components/material-components-ios.git
synced 2026-02-20 08:27:32 +08:00
540 lines
18 KiB
Objective-C
540 lines
18 KiB
Objective-C
// Copyright 2018-present the Material Components for iOS authors. All Rights Reserved.
|
|
//
|
|
// Licensed under the Apache License, Version 2.0 (the "License");
|
|
// you may not use this file except in compliance with the License.
|
|
// You may obtain a copy of the License at
|
|
//
|
|
// http://www.apache.org/licenses/LICENSE-2.0
|
|
//
|
|
// Unless required by applicable law or agreed to in writing, software
|
|
// distributed under the License is distributed on an "AS IS" BASIS,
|
|
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
// See the License for the specific language governing permissions and
|
|
// limitations under the License.
|
|
|
|
#import "MDCBottomSheetPresentationController.h"
|
|
|
|
#import <UIKit/UIKit.h>
|
|
#import <XCTest/XCTest.h>
|
|
|
|
#pragma clang diagnostic push
|
|
#pragma clang diagnostic ignored "-Wprivate-header"
|
|
#import "MDCDraggableView.h"
|
|
#import "MDCSheetContainerView.h"
|
|
#pragma clang diagnostic pop
|
|
#import "MDCBottomSheetPresentationControllerDelegate.h"
|
|
#import "MDCSheetState.h"
|
|
|
|
NS_ASSUME_NONNULL_BEGIN
|
|
|
|
@interface MDCBottomSheetDelegateTest
|
|
: UIViewController <MDCBottomSheetPresentationControllerDelegate>
|
|
@property(nonatomic, assign) BOOL delegateWasCalled;
|
|
@end
|
|
|
|
@implementation MDCBottomSheetDelegateTest
|
|
|
|
- (instancetype)init {
|
|
self = [super init];
|
|
if (self) {
|
|
_delegateWasCalled = NO;
|
|
}
|
|
return self;
|
|
}
|
|
|
|
- (void)bottomSheetDidChangeYOffset:(MDCBottomSheetPresentationController *)bottomSheet
|
|
yOffset:(CGFloat)yOffset {
|
|
_delegateWasCalled = YES;
|
|
}
|
|
|
|
- (void)bottomSheetWillChangeState:(MDCBottomSheetPresentationController *)bottomSheet
|
|
sheetState:(MDCSheetState)sheetState {
|
|
_delegateWasCalled = YES;
|
|
}
|
|
|
|
@end
|
|
|
|
// Exposing internal methods for unit testing
|
|
@interface MDCBottomSheetPresentationController (Testing)
|
|
@property(nonatomic, strong, nullable) MDCSheetContainerView *sheetView;
|
|
- (void)updatePreferredSheetHeight;
|
|
@end
|
|
|
|
@interface MDCSheetContainerView (Testing)
|
|
@property(nonatomic) MDCDraggableView *sheet;
|
|
@property(nonatomic) MDCSheetState sheetState;
|
|
- (CGPoint)targetPoint;
|
|
- (void)draggableView:(MDCDraggableView *)view didPanToOffset:(CGFloat)offset;
|
|
- (BOOL)draggableView:(MDCDraggableView *)view shouldBeginDraggingWithVelocity:(CGPoint)velocity;
|
|
- (void)draggableView:(MDCDraggableView *)view draggingEndedWithVelocity:(CGPoint)velocity;
|
|
@end
|
|
|
|
/**
|
|
A testing double for @c MDCSheetContainerView that allows setting an explicitly-nonstandardized
|
|
@c frame value.
|
|
|
|
@note Although it is possible to retrieve a non-standardized frame or bounds from a UIView object,
|
|
UIView will standardize the CGRect passed to @c setFrame:. To aid in testing, we turn
|
|
@c frame into a simple get/set property. We still call up to the super implementation of
|
|
@c setFrame: in case there are side-effects in UIView.
|
|
*/
|
|
@interface FakeSheetView : MDCSheetContainerView
|
|
@property(nonatomic, assign) UIEdgeInsets customSafeAreaInsets;
|
|
@end
|
|
|
|
@implementation FakeSheetView {
|
|
CGRect _frame;
|
|
}
|
|
|
|
- (CGRect)frame {
|
|
return _frame;
|
|
}
|
|
|
|
- (void)setFrame:(CGRect)frame {
|
|
[super setFrame:frame];
|
|
|
|
_frame = frame;
|
|
}
|
|
|
|
- (UIEdgeInsets)safeAreaInsets {
|
|
return _customSafeAreaInsets;
|
|
}
|
|
@end
|
|
|
|
@interface MDCBottomSheetPresentationControllerTests : XCTestCase
|
|
@property(nonatomic, strong, nullable) FakeSheetView *sheetView;
|
|
@property(nonatomic, strong, nullable) MDCBottomSheetPresentationController *presentationController;
|
|
@property(nonatomic, strong, nullable) MDCBottomSheetDelegateTest *delegateTest;
|
|
@end
|
|
|
|
@implementation MDCBottomSheetPresentationControllerTests
|
|
|
|
- (void)setUp {
|
|
[super setUp];
|
|
|
|
// The `sheetView` property is both an input and an output to `setPreferredSheetHeight:`. Its
|
|
// frame may be used to guess the preferredContentHeight of the sheet. Once calculated, it
|
|
// receives an updated value for `preferredSheetHeight`.
|
|
self.sheetView = [[FakeSheetView alloc] initWithFrame:CGRectZero
|
|
contentView:[[UIView alloc] init]
|
|
scrollView:[[UIScrollView alloc] init]
|
|
simulateScrollViewBounce:YES];
|
|
|
|
// Only used as a required `-init` parameters for MDCBottomSheetPresentationController
|
|
UIViewController *stubPresentingViewController = [[UIViewController alloc] init];
|
|
UIViewController *stubPresentedViewController = [[UIViewController alloc] init];
|
|
|
|
self.presentationController = [[MDCBottomSheetPresentationController alloc]
|
|
initWithPresentedViewController:stubPresentedViewController
|
|
presentingViewController:stubPresentingViewController];
|
|
self.presentationController.sheetView = self.sheetView;
|
|
self.delegateTest = [[MDCBottomSheetDelegateTest alloc] init];
|
|
}
|
|
|
|
- (void)tearDown {
|
|
self.presentationController.sheetView = nil;
|
|
self.presentationController = nil;
|
|
self.sheetView = nil;
|
|
self.delegateTest = nil;
|
|
|
|
[super tearDown];
|
|
}
|
|
|
|
- (void)testUpdatePreferredSheetHeightZeroWhenSheetViewHasStandardizedFrame {
|
|
// Given
|
|
CGFloat sheetFrameHeight = 80;
|
|
self.sheetView.frame = CGRectMake(0, 0, 75, sheetFrameHeight);
|
|
|
|
// When
|
|
[self.presentationController updatePreferredSheetHeight];
|
|
|
|
// Then
|
|
XCTAssertEqualWithAccuracy(self.sheetView.preferredSheetHeight, sheetFrameHeight / 2, 0.001);
|
|
}
|
|
|
|
- (void)testUpdatePreferredSheetHeightZeroWhenSheetViewHasUnstandardizedFrame {
|
|
// Given
|
|
CGFloat sheetFrameHeight = -80;
|
|
self.sheetView.frame = CGRectMake(75, 80, -75, sheetFrameHeight);
|
|
|
|
// When
|
|
[self.presentationController updatePreferredSheetHeight];
|
|
|
|
// Then
|
|
XCTAssertEqualWithAccuracy(self.sheetView.preferredSheetHeight,
|
|
(CGFloat)fabs(sheetFrameHeight / 2), 0.001);
|
|
}
|
|
|
|
- (void)testUpdatePreferredSheetHeightPositiveValue {
|
|
// Given
|
|
CGFloat preferredSheetHeight = 120;
|
|
self.presentationController.presentedViewController.preferredContentSize =
|
|
CGSizeMake(100, preferredSheetHeight);
|
|
self.sheetView.frame = CGRectMake(0, 0, 75, 80);
|
|
|
|
// When
|
|
[self.presentationController updatePreferredSheetHeight];
|
|
|
|
// Then
|
|
XCTAssertEqualWithAccuracy(self.sheetView.preferredSheetHeight, preferredSheetHeight, 0.001);
|
|
}
|
|
|
|
- (void)testUpdatePreferredSheetHeightNegativeValue {
|
|
// Given
|
|
CGFloat preferredSheetHeight = -120;
|
|
self.presentationController.presentedViewController.preferredContentSize =
|
|
CGSizeMake(0, preferredSheetHeight);
|
|
self.sheetView.frame = CGRectMake(0, 0, 75, -80);
|
|
|
|
// When
|
|
[self.presentationController updatePreferredSheetHeight];
|
|
|
|
// Then
|
|
XCTAssertEqualWithAccuracy(self.sheetView.preferredSheetHeight, preferredSheetHeight, 0.001);
|
|
}
|
|
|
|
- (void)testUpdatePreferredSheetHeight {
|
|
// Given
|
|
CGFloat preferredSheetHeight = 100;
|
|
self.presentationController.preferredSheetHeight = preferredSheetHeight;
|
|
|
|
// When
|
|
[self.presentationController updatePreferredSheetHeight];
|
|
|
|
// Then
|
|
XCTAssertEqualWithAccuracy(self.sheetView.preferredSheetHeight, preferredSheetHeight, 0.001);
|
|
}
|
|
|
|
- (void)testUpdateNegativePreferredSheetHeight {
|
|
// Given
|
|
CGFloat preferrredSheetHeight = -100;
|
|
self.presentationController.preferredSheetHeight = preferrredSheetHeight;
|
|
CGFloat sheetHeight = 250;
|
|
self.sheetView.frame = CGRectMake(0, 0, 75, sheetHeight);
|
|
|
|
// When
|
|
[self.presentationController updatePreferredSheetHeight];
|
|
|
|
// Then
|
|
XCTAssertEqualWithAccuracy(self.sheetView.preferredSheetHeight, (CGFloat)(sheetHeight / 2),
|
|
0.001);
|
|
}
|
|
|
|
- (void)testUpdatePreferredSheetHeightAndPreferredContentSize {
|
|
// Given
|
|
CGSize preferredContentSize = CGSizeMake(100, 100);
|
|
CGFloat preferredSheetHeight = 200;
|
|
self.presentationController.presentedViewController.preferredContentSize = preferredContentSize;
|
|
self.presentationController.preferredSheetHeight = preferredSheetHeight;
|
|
|
|
// When
|
|
[self.presentationController updatePreferredSheetHeight];
|
|
|
|
// Then
|
|
XCTAssertEqualWithAccuracy(self.sheetView.preferredSheetHeight, preferredSheetHeight, 0.001);
|
|
}
|
|
|
|
- (void)testPreferredSheetHeightNegativeAndPreferredContentSizePositive {
|
|
// Given
|
|
CGSize preferredContentSize = CGSizeMake(100, 100);
|
|
CGFloat preferredSheetHeight = -200;
|
|
self.presentationController.presentedViewController.preferredContentSize = preferredContentSize;
|
|
self.presentationController.preferredSheetHeight = preferredSheetHeight;
|
|
|
|
// When
|
|
[self.presentationController updatePreferredSheetHeight];
|
|
|
|
// Then
|
|
XCTAssertEqualWithAccuracy(self.sheetView.preferredSheetHeight, preferredContentSize.height,
|
|
0.001);
|
|
}
|
|
|
|
- (void)testPreferredSheetHeightNonZeroThenZero {
|
|
// Given
|
|
CGFloat preferredSheetHeight = 200;
|
|
self.presentationController.preferredSheetHeight = preferredSheetHeight;
|
|
CGFloat sheetHeight = 300;
|
|
self.sheetView.frame = CGRectMake(0, 0, 200, sheetHeight);
|
|
|
|
// When
|
|
[self.presentationController updatePreferredSheetHeight];
|
|
self.presentationController.preferredSheetHeight = 0;
|
|
[self.presentationController updatePreferredSheetHeight];
|
|
|
|
// Then
|
|
XCTAssertEqualWithAccuracy(self.sheetView.preferredSheetHeight, (CGFloat)(sheetHeight / 2),
|
|
0.001);
|
|
}
|
|
|
|
- (void)testVeryLargePreferredSheetHeightAndSmallContent {
|
|
// Given
|
|
CGFloat scrollViewHeight = 100;
|
|
CGRect smallFrame = CGRectMake(0, 0, 200, scrollViewHeight);
|
|
UIScrollView *scrollView = [[UIScrollView alloc] initWithFrame:smallFrame];
|
|
FakeSheetView *sheetView =
|
|
[[FakeSheetView alloc] initWithFrame:smallFrame
|
|
contentView:[[UIView alloc] initWithFrame:smallFrame]
|
|
scrollView:scrollView
|
|
simulateScrollViewBounce:YES];
|
|
|
|
self.presentationController.sheetView = sheetView;
|
|
self.presentationController.preferredSheetHeight = 5000;
|
|
|
|
// When
|
|
[self.presentationController updatePreferredSheetHeight];
|
|
|
|
// Then
|
|
XCTAssertEqualWithAccuracy(CGRectGetHeight(sheetView.frame), CGRectGetHeight(smallFrame), 0.001);
|
|
}
|
|
|
|
- (void)testDefaultAdjustHeightForSafeAreaInsets {
|
|
XCTAssertTrue(self.presentationController.adjustHeightForSafeAreaInsets);
|
|
}
|
|
|
|
- (void)testAdjustHeightForSafeAreaInsetsIsNo {
|
|
// Given
|
|
CGFloat preferredSheetHeight = 200;
|
|
CGFloat inset = 20;
|
|
self.sheetView.customSafeAreaInsets = UIEdgeInsetsMake(inset, inset, inset, inset);
|
|
self.presentationController.preferredSheetHeight = preferredSheetHeight;
|
|
self.presentationController.adjustHeightForSafeAreaInsets = NO;
|
|
|
|
// When
|
|
[self.presentationController updatePreferredSheetHeight];
|
|
|
|
// Then
|
|
XCTAssertEqualWithAccuracy(self.sheetView.preferredSheetHeight, preferredSheetHeight, 0.001);
|
|
}
|
|
|
|
- (void)testAdjustHeightForSafeAreaInsetsSetBeforeHeightIsSet {
|
|
// Given
|
|
CGFloat preferredSheetHeight = 200;
|
|
CGFloat inset = 20;
|
|
self.sheetView.customSafeAreaInsets = UIEdgeInsetsMake(inset, inset, inset, inset);
|
|
self.presentationController.adjustHeightForSafeAreaInsets = NO;
|
|
self.presentationController.preferredSheetHeight = preferredSheetHeight;
|
|
|
|
// When
|
|
[self.presentationController updatePreferredSheetHeight];
|
|
|
|
// Then
|
|
XCTAssertEqualWithAccuracy(self.sheetView.preferredSheetHeight, preferredSheetHeight, 0.001);
|
|
}
|
|
|
|
- (void)testAdjustHeightForSafeAreaInsetsIsYes {
|
|
// Given
|
|
CGFloat preferredSheetHeight = 200;
|
|
CGFloat inset = 20;
|
|
self.sheetView.customSafeAreaInsets = UIEdgeInsetsMake(inset, inset, inset, inset);
|
|
self.presentationController.preferredSheetHeight = preferredSheetHeight;
|
|
self.presentationController.adjustHeightForSafeAreaInsets = YES;
|
|
|
|
// When
|
|
[self.presentationController updatePreferredSheetHeight];
|
|
|
|
// Then
|
|
XCTAssertEqualWithAccuracy(self.sheetView.preferredSheetHeight, preferredSheetHeight + inset,
|
|
0.001);
|
|
}
|
|
|
|
- (void)testadjustHeightForSafeAreaInsetsChangesToNo {
|
|
// Given
|
|
CGFloat preferredSheetHeight = 200;
|
|
CGFloat inset = 20;
|
|
self.sheetView.customSafeAreaInsets = UIEdgeInsetsMake(inset, inset, inset, inset);
|
|
self.presentationController.adjustHeightForSafeAreaInsets = YES;
|
|
self.presentationController.preferredSheetHeight = preferredSheetHeight;
|
|
self.presentationController.adjustHeightForSafeAreaInsets = NO;
|
|
|
|
// When
|
|
[self.presentationController updatePreferredSheetHeight];
|
|
|
|
// Then
|
|
XCTAssertEqualWithAccuracy(self.sheetView.preferredSheetHeight, preferredSheetHeight, 0.001);
|
|
}
|
|
|
|
- (void)testSheetViewFrameMatchesScrollViewFrame {
|
|
// Given
|
|
CGFloat scrollViewHeight = 100;
|
|
CGRect fakeFrame = CGRectMake(0, 0, 200, scrollViewHeight);
|
|
UIScrollView *scrollView = [[UIScrollView alloc] initWithFrame:CGRectZero];
|
|
MDCSheetContainerView *fakeSheet =
|
|
[[MDCSheetContainerView alloc] initWithFrame:fakeFrame
|
|
contentView:[[UIView alloc] initWithFrame:fakeFrame]
|
|
scrollView:scrollView
|
|
simulateScrollViewBounce:YES];
|
|
|
|
// When
|
|
[fakeSheet setNeedsLayout];
|
|
[fakeSheet layoutIfNeeded];
|
|
|
|
// Then
|
|
CGRect scrollViewFrame = CGRectStandardize(fakeSheet.sheet.frame);
|
|
XCTAssertEqualWithAccuracy(scrollViewFrame.size.height, scrollViewHeight, 0.001);
|
|
}
|
|
|
|
- (void)testSheetStateChangeCallback {
|
|
// Given
|
|
self.presentationController.delegate = self.delegateTest;
|
|
self.presentationController.sheetView.delegate =
|
|
(id<MDCSheetContainerViewDelegate>)self.presentationController;
|
|
|
|
// When
|
|
self.sheetView.sheetState = MDCSheetStateExtended;
|
|
|
|
// Then
|
|
XCTAssertEqual(self.delegateTest.delegateWasCalled, YES);
|
|
}
|
|
|
|
- (void)testSheetYOffsetChangeCallbackFromTargetPoint {
|
|
// Given
|
|
self.presentationController.delegate = self.delegateTest;
|
|
self.presentationController.sheetView.delegate =
|
|
(id<MDCSheetContainerViewDelegate>)self.presentationController;
|
|
|
|
// When
|
|
[self.sheetView targetPoint];
|
|
|
|
// Then
|
|
XCTAssertEqual(self.delegateTest.delegateWasCalled, YES);
|
|
}
|
|
|
|
- (void)testSheetYOffsetChangeCallbackFromDidPanToOffset {
|
|
// Given
|
|
self.presentationController.delegate = self.delegateTest;
|
|
self.presentationController.sheetView.delegate =
|
|
(id<MDCSheetContainerViewDelegate>)self.presentationController;
|
|
|
|
// When
|
|
[self.sheetView draggableView:self.sheetView.sheet didPanToOffset:10];
|
|
|
|
// Then
|
|
XCTAssertEqual(self.delegateTest.delegateWasCalled, YES);
|
|
}
|
|
|
|
#pragma mark - dismissOnDraggingDownSheet
|
|
|
|
- (void)testSettingDismissOnDraggingDownSheetOnPresentationController {
|
|
// Given
|
|
self.presentationController.dismissOnDraggingDownSheet = NO;
|
|
|
|
// Then
|
|
XCTAssertFalse(self.sheetView.dismissOnDraggingDownSheet);
|
|
}
|
|
|
|
- (void)testSettingDismissOnDraggingDownSheetViewDoesNotBlocksGesture {
|
|
// Given
|
|
self.sheetView.dismissOnDraggingDownSheet = NO;
|
|
|
|
// When
|
|
BOOL shouldBeginDragging = [self.sheetView draggableView:self.sheetView.sheet
|
|
shouldBeginDraggingWithVelocity:CGPointMake(0, 0)];
|
|
|
|
// Then
|
|
XCTAssertTrue(shouldBeginDragging);
|
|
}
|
|
|
|
- (void)testSettingDismissOnDraggingDownSheetToNoViewShouldNotCloseWithDragDown {
|
|
// Given
|
|
self.sheetView.dismissOnDraggingDownSheet = NO;
|
|
self.sheetView.sheetState = MDCSheetStatePreferred;
|
|
|
|
// When
|
|
[self.sheetView draggableView:self.sheetView.sheet draggingEndedWithVelocity:CGPointMake(0, 1)];
|
|
|
|
// Then
|
|
XCTAssertNotEqual(self.sheetView.sheetState, MDCSheetStateClosed);
|
|
}
|
|
|
|
- (void)testSettingDismissOnDraggingDownSheetToNoViewShouldNotCloseWithDragDownWithPreferredHeight {
|
|
// Given
|
|
self.sheetView.dismissOnDraggingDownSheet = NO;
|
|
self.sheetView.sheetState = MDCSheetStatePreferred;
|
|
self.sheetView.preferredSheetHeight = 222;
|
|
|
|
// When
|
|
[self.sheetView draggableView:self.sheetView.sheet draggingEndedWithVelocity:CGPointMake(0, 1)];
|
|
|
|
// Then
|
|
XCTAssertNotEqual(self.sheetView.sheetState, MDCSheetStateClosed);
|
|
}
|
|
|
|
- (void)testSettingDismissOnDraggingDownSheetViewToYesShouldCloseWithDragDown {
|
|
// Given
|
|
self.sheetView.dismissOnDraggingDownSheet = YES;
|
|
self.sheetView.sheetState = MDCSheetStatePreferred;
|
|
|
|
// When
|
|
[self.sheetView draggableView:self.sheetView.sheet draggingEndedWithVelocity:CGPointMake(0, 1)];
|
|
|
|
// Then
|
|
XCTAssertEqual(self.sheetView.sheetState, MDCSheetStateClosed);
|
|
}
|
|
|
|
- (void)testSettingDismissOnDraggingDownSheetViewToYesShouldCloseWithDragDownWithPreferredHeight {
|
|
// Given
|
|
self.sheetView.dismissOnDraggingDownSheet = YES;
|
|
self.sheetView.sheetState = MDCSheetStatePreferred;
|
|
self.sheetView.preferredSheetHeight = 222;
|
|
|
|
// When
|
|
[self.sheetView draggableView:self.sheetView.sheet draggingEndedWithVelocity:CGPointMake(0, 1)];
|
|
|
|
// Then
|
|
XCTAssertEqual(self.sheetView.sheetState, MDCSheetStateClosed);
|
|
}
|
|
|
|
- (void)testSettingDismissOnDraggingDownSheetToNoViewShouldNotCloseWithDragUp {
|
|
// Given
|
|
self.sheetView.dismissOnDraggingDownSheet = NO;
|
|
self.sheetView.sheetState = MDCSheetStatePreferred;
|
|
|
|
// When
|
|
[self.sheetView draggableView:self.sheetView.sheet draggingEndedWithVelocity:CGPointMake(0, -1)];
|
|
|
|
// Then
|
|
XCTAssertNotEqual(self.sheetView.sheetState, MDCSheetStateClosed);
|
|
}
|
|
|
|
- (void)testSettingDismissOnDraggingDownSheetToNoViewShouldNotCloseWithDragUpWithPreferredHeight {
|
|
// Given
|
|
self.sheetView.dismissOnDraggingDownSheet = NO;
|
|
self.sheetView.sheetState = MDCSheetStatePreferred;
|
|
self.sheetView.preferredSheetHeight = 222;
|
|
|
|
// When
|
|
[self.sheetView draggableView:self.sheetView.sheet draggingEndedWithVelocity:CGPointMake(0, -1)];
|
|
|
|
// Then
|
|
XCTAssertNotEqual(self.sheetView.sheetState, MDCSheetStateClosed);
|
|
}
|
|
|
|
- (void)testSettingDismissOnDraggingDownSheetViewToYesShouldCloseWithDragUp {
|
|
// Given
|
|
self.sheetView.dismissOnDraggingDownSheet = YES;
|
|
self.sheetView.sheetState = MDCSheetStatePreferred;
|
|
|
|
// When
|
|
[self.sheetView draggableView:self.sheetView.sheet draggingEndedWithVelocity:CGPointMake(0, -1)];
|
|
|
|
// Then
|
|
XCTAssertEqual(self.sheetView.sheetState, MDCSheetStatePreferred);
|
|
}
|
|
|
|
- (void)testSettingDismissOnDraggingDownSheetViewToYesShouldCloseWithDragUpWithPreferredHeight {
|
|
// Given
|
|
self.sheetView.dismissOnDraggingDownSheet = YES;
|
|
self.sheetView.sheetState = MDCSheetStatePreferred;
|
|
self.sheetView.preferredSheetHeight = 222;
|
|
|
|
// When
|
|
[self.sheetView draggableView:self.sheetView.sheet draggingEndedWithVelocity:CGPointMake(0, -1)];
|
|
|
|
// Then
|
|
XCTAssertEqual(self.sheetView.sheetState, MDCSheetStatePreferred);
|
|
}
|
|
|
|
@end
|
|
|
|
NS_ASSUME_NONNULL_END
|