Skip to content

Commit 2027a2c

Browse files
committed
[Slider] added some Accessibility tests
Summary: added test for traits removed uiSlider test Reviewers: #material_components_ios_owners, iangordon Reviewed By: #material_components_ios_owners, iangordon Subscribers: featherless Projects: #material_components_ios Differential Revision: http://codereview.cc/D97
1 parent eee10ae commit 2027a2c

File tree

3 files changed

+100
-4
lines changed

3 files changed

+100
-4
lines changed

components/Slider/Slider.xcodeproj/project.pbxproj

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -500,6 +500,7 @@
500500
LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks";
501501
PRODUCT_BUNDLE_IDENTIFIER = com.google.MaterialComponents.Slider;
502502
PRODUCT_NAME = "$(TARGET_NAME)";
503+
PROVISIONING_PROFILE = "";
503504
};
504505
name = Debug;
505506
};
@@ -512,6 +513,7 @@
512513
LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks";
513514
PRODUCT_BUNDLE_IDENTIFIER = com.google.MaterialComponents.Slider;
514515
PRODUCT_NAME = "$(TARGET_NAME)";
516+
PROVISIONING_PROFILE = "";
515517
};
516518
name = Release;
517519
};

components/Slider/SliderTests/SliderTests.m

Lines changed: 86 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -294,6 +294,91 @@ - (void)testTrackColorNullRestable {
294294
XCTAssertEqualObjects(actualColor, expectedColor);
295295
}
296296

297+
#pragma mark accessibility
298+
299+
- (void)testAccessibilityValue {
300+
// Given
301+
MDCSlider *slider = [[MDCSlider alloc] init];
302+
CGFloat newValue = [self randomPercent];
303+
304+
// When
305+
slider.value = newValue;
306+
307+
// Then
308+
NSNumberFormatter *numberFormatter = [[NSNumberFormatter alloc] init];
309+
numberFormatter.numberStyle = NSNumberFormatterPercentStyle;
310+
NSString *expected = [numberFormatter stringFromNumber:[NSNumber numberWithFloat:slider.value]];
311+
XCTAssertEqualObjects([slider accessibilityValue], expected);
312+
}
313+
314+
- (void)testAccessibilityValueWithLargerMax {
315+
// Given
316+
MDCSlider *slider = [[MDCSlider alloc] init];
317+
slider.maximumValue = [self randomNumber];
318+
CGFloat newValue = [self randomPercent];
319+
320+
// When
321+
slider.value = newValue;
322+
323+
// Then
324+
NSNumberFormatter *numberFormatter = [[NSNumberFormatter alloc] init];
325+
numberFormatter.numberStyle = NSNumberFormatterPercentStyle;
326+
CGFloat percent = (slider.value - slider.minimumValue) / (slider.maximumValue - slider.minimumValue);
327+
NSString *expected = [numberFormatter stringFromNumber:[NSNumber numberWithFloat:percent]];
328+
XCTAssertEqualObjects([slider accessibilityValue], expected);
329+
}
330+
331+
- (void)testAccessibilityIncrement {
332+
// Given
333+
MDCSlider *slider = [[MDCSlider alloc] init];
334+
slider.value = [self randomPercent] - 0.1f;
335+
CGFloat originalValue = slider.value;
336+
337+
// When
338+
[slider accessibilityIncrement];
339+
340+
// Then
341+
XCTAssertEqual(originalValue + 0.1f, slider.value);
342+
}
343+
344+
- (void)testAccessibilityDecrement {
345+
// Given
346+
MDCSlider *slider = [[MDCSlider alloc] init];
347+
slider.value = [self randomPercent] + 0.1f;
348+
CGFloat originalValue = slider.value;
349+
350+
// When
351+
[slider accessibilityDecrement];
352+
353+
// Then
354+
XCTAssertEqual(originalValue - 0.1f, slider.value);
355+
}
356+
357+
- (void)testAccessibilityIncrementWithLargerMax {
358+
// Given
359+
MDCSlider *slider = [[MDCSlider alloc] init];
360+
slider.maximumValue = [self randomNumber];
361+
slider.value = ([self randomPercent] - 0.1f) * slider.maximumValue;
362+
CGFloat originalValue = slider.value;
363+
364+
// When
365+
[slider accessibilityIncrement];
366+
367+
// Then
368+
XCTAssertEqual(originalValue + 0.1f * slider.maximumValue, slider.value);
369+
}
370+
371+
- (void)testAccessibilityTraits {
372+
// Given
373+
MDCSlider *slider = [[MDCSlider alloc] init];
374+
slider.enabled = arc4random_uniform(2); // It does not matter if the slider is enabled or disabled.
375+
376+
// When
377+
378+
// Then
379+
XCTAssertTrue(slider.accessibilityTraits & UIAccessibilityTraitAdjustable);
380+
}
381+
297382
#pragma mark private test helpers
298383

299384
- (UIColor *)blueColor {
@@ -305,7 +390,7 @@ - (CGFloat)randomNumber {
305390
}
306391

307392
- (CGFloat)randomPercent {
308-
return 1 / (CGFloat)(arc4random_uniform(999) + 1);
393+
return (CGFloat)(arc4random_uniform(1001)) / 1000;
309394
}
310395

311396
@end

components/Slider/src/MDCSlider.m

Lines changed: 12 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -23,7 +23,7 @@
2323
static const CGFloat kSliderMinTouchSize = 48.0f;
2424
static const CGFloat kSliderThumbRadius = 6.0f;
2525
static const CGFloat kSliderThumbMaxRippleRadius = 16.0f;
26-
static const CGFloat kSliderAccessibilityIncrement = 0.1f; // Matches UISlider's increment.
26+
static const CGFloat kSliderAccessibilityIncrement = 0.1f; // Matches UISlider's percent increment.
2727
static const CGFloat kSliderLightThemeTrackAlpha = 0.26f;
2828

2929
@interface MDCSlider () <MDCThumbTrackDelegate>
@@ -67,7 +67,7 @@ - (instancetype)initWithFrame:(CGRect)frame {
6767

6868
#pragma mark - ThumbTrack passthrough methods
6969

70-
-(void)setTrackBackgroundColor:(UIColor *)trackBackgroundColor {
70+
- (void)setTrackBackgroundColor:(UIColor *)trackBackgroundColor {
7171
_thumbTrack.trackOffColor = trackBackgroundColor ?: [[self class] defaultTrackOffColor];
7272
;
7373
}
@@ -165,10 +165,19 @@ - (BOOL)isAccessibilityElement {
165165
}
166166

167167
- (NSString *)accessibilityValue {
168-
return [NSString stringWithFormat:@"%0.1f", self.value];
168+
static dispatch_once_t onceToken;
169+
static NSNumberFormatter *numberFormatter;
170+
dispatch_once(&onceToken, ^{
171+
numberFormatter = [[NSNumberFormatter alloc] init];
172+
numberFormatter.numberStyle = NSNumberFormatterPercentStyle;
173+
});
174+
CGFloat percentage = (self.value - self.minimumValue) / (self.maximumValue - self.minimumValue);
175+
return [numberFormatter stringFromNumber:@(percentage)];
169176
}
170177

171178
- (UIAccessibilityTraits)accessibilityTraits {
179+
// Adding UIAccessibilityTraitAdjustable also causes an iOS accessibility hint to be spoken:
180+
// "Swipe up or down with one finger to adjust the value."
172181
UIAccessibilityTraits traits = super.accessibilityTraits | UIAccessibilityTraitAdjustable;
173182
if (!self.enabled) {
174183
traits |= UIAccessibilityTraitNotEnabled;

0 commit comments

Comments
 (0)