minuteInterval added

This commit is contained in:
Vladimir Enchev
2015-11-26 17:18:41 +02:00
parent 2eec961f9e
commit ea6fa315e1
4 changed files with 95 additions and 11 deletions

View File

@ -58,12 +58,21 @@ if (platform.device.os === platform.platformNames.ios) {
}
}
export function test_WhenCreated_MinuteIntervalIs1() {
helper.buildUIAndRunTest(_createTimePicker(), function (views: Array<viewModule.View>) {
var timePicker = <timePickerModule.TimePicker>views[0];
var actualValue = timePicker.minuteInterval;
var expectedValue = 1;
TKUnit.assertEqual(actualValue, expectedValue);
});
}
export function test_WhenCreated_HourIsCurrentHour() {
helper.buildUIAndRunTest(_createTimePicker(), function (views: Array<viewModule.View>) {
var timePicker = <timePickerModule.TimePicker>views[0];
var actualValue = timePicker.hour;
var expectedValue = timePickerTestsNative.getNativeHour(timePicker);
TKUnit.assert(actualValue === expectedValue, "Actual: " + actualValue + "; Expected: " + expectedValue);
TKUnit.assertEqual(actualValue, expectedValue);
});
}
@ -72,7 +81,7 @@ export function test_WhenCreated_MinHourIs0() {
var timePicker = <timePickerModule.TimePicker>views[0];
var actualValue = timePicker.minHour;
var expectedValue = 0;
TKUnit.assert(actualValue === expectedValue, "Actual: " + actualValue + "; Expected: " + expectedValue);
TKUnit.assertEqual(actualValue, expectedValue);
});
}
@ -81,7 +90,7 @@ export function test_WhenCreated_MaxHourIs23() {
var timePicker = <timePickerModule.TimePicker>views[0];
var actualValue = timePicker.maxHour;
var expectedValue = 23;
TKUnit.assert(actualValue === expectedValue, "Actual: " + actualValue + "; Expected: " + expectedValue);
TKUnit.assertEqual(actualValue, expectedValue);
});
}
@ -90,7 +99,7 @@ export function test_WhenCreated_MinuteIsCurrentMinute() {
var timePicker = <timePickerModule.TimePicker>views[0];
var actualValue = timePicker.minute;
var expectedValue = timePickerTestsNative.getNativeMinute(timePicker);
TKUnit.assert(actualValue === expectedValue, "Actual: " + actualValue + "; Expected: " + expectedValue);
TKUnit.assertEqual(actualValue, expectedValue);
});
}
@ -99,7 +108,7 @@ export function test_WhenCreated_MinMinuteIs0() {
var timePicker = <timePickerModule.TimePicker>views[0];
var actualValue = timePicker.minMinute;
var expectedValue = 0;
TKUnit.assert(actualValue === expectedValue, "Actual: " + actualValue + "; Expected: " + expectedValue);
TKUnit.assertEqual(actualValue, expectedValue);
});
}
@ -108,7 +117,34 @@ export function test_WhenCreated_MaxMinuteIs59() {
var timePicker = <timePickerModule.TimePicker>views[0];
var actualValue = timePicker.maxMinute;
var expectedValue = 59;
TKUnit.assert(actualValue === expectedValue, "Actual: " + actualValue + "; Expected: " + expectedValue);
TKUnit.assertEqual(actualValue, expectedValue);
});
}
export function testMinuteIntervalThrowExceptionWhenLessThan1() {
helper.buildUIAndRunTest(_createTimePicker(), function (views: Array<viewModule.View>) {
var timePicker = <timePickerModule.TimePicker>views[0];
TKUnit.assertThrows(function () {
timePicker.minuteInterval = 0;
}, "Setting minuteInterval property to a value less than 1 should throw.");
});
}
export function testMinuteIntervalThrowExceptionWhenGreaterThan30() {
helper.buildUIAndRunTest(_createTimePicker(), function (views: Array<viewModule.View>) {
var timePicker = <timePickerModule.TimePicker>views[0];
TKUnit.assertThrows(function () {
timePicker.minuteInterval = 31;
}, "Setting minuteInterval property to a value greater than 30 should throw.");
});
}
export function testMinuteIntervalThrowExceptionWhenNotFold60() {
helper.buildUIAndRunTest(_createTimePicker(), function (views: Array<viewModule.View>) {
var timePicker = <timePickerModule.TimePicker>views[0];
TKUnit.assertThrows(function () {
timePicker.minuteInterval = 7;
}, "Setting minuteInterval property to a value not fold 60 should throw.");
});
}
@ -214,7 +250,7 @@ export function testHourFromLocalToNative() {
var expectedValue = 13;
timePicker.hour = expectedValue;
var actualValue = timePickerTestsNative.getNativeHour(timePicker);
TKUnit.assert(actualValue === expectedValue, "Actual: " + actualValue + "; Expected: " + expectedValue);
TKUnit.assertEqual(actualValue, expectedValue);
});
}
@ -224,7 +260,7 @@ export function testMinuteFromLocalToNative() {
var expectedValue = 59;
timePicker.minute = expectedValue;
var actualValue = timePickerTestsNative.getNativeMinute(timePicker);
TKUnit.assert(actualValue === expectedValue, "Actual: " + actualValue + "; Expected: " + expectedValue);
TKUnit.assertEqual(actualValue, expectedValue);
});
}
@ -234,7 +270,7 @@ export function testHourFromNativeToLocal() {
var expectedValue = 14;
timePickerTestsNative.setNativeHour(timePicker, expectedValue);
var actualValue = timePicker.hour;
TKUnit.assert(actualValue === expectedValue, "Actual: " + actualValue + "; Expected: " + expectedValue);
TKUnit.assertEqual(actualValue, expectedValue);
});
}
@ -244,7 +280,7 @@ export function testMinuteFromNativeToLocal() {
var expectedValue = 33;
timePickerTestsNative.setNativeMinute(timePicker, expectedValue);
var actualValue = timePicker.minute;
TKUnit.assert(actualValue === expectedValue, "Actual: " + actualValue + "; Expected: " + expectedValue);
TKUnit.assertEqual(actualValue, expectedValue);
});
}

View File

@ -12,6 +12,10 @@ function isMinuteValid(value: number): boolean {
return types.isNumber(value) && value >= 0 && value <= 59;
}
function isMinuteIntervalValid(value: number): boolean {
return types.isNumber(value) && value >= 1 && value <= 30 && 60 % value === 0;
}
export interface Time {
hour: number;
minute: number;
@ -33,7 +37,17 @@ export function isValidTime(picker: definition.TimePicker): boolean {
return isGreaterThanMinTime(picker) && isLessThanMaxTime(picker);
}
export function getValidTime(picker: definition.TimePicker, hour?: number, minute?: number): Time {
export function getValidTime(picker: definition.TimePicker, hour: number, minute: number): Time {
if (picker.minuteInterval > 1) {
let minuteFloor = minute - (minute % picker.minuteInterval);
minute = minuteFloor + (minute === minuteFloor + 1 ? picker.minuteInterval : 0);
if (minute === 60) {
hour++;
minute = 0;
}
}
let time = { hour: hour, minute: minute };
if (!isGreaterThanMinTime(picker, hour, minute)) {
@ -119,6 +133,12 @@ function onMaxHourPropertyChanged(data: dependencyObservable.PropertyChangeData)
}
}
function onMinuteIntervalPropertyChanged(data: dependencyObservable.PropertyChangeData) {
var picker = <definition.TimePicker>data.object;
picker._setNativeMinuteIntervalTime();
}
export class TimePicker extends view.View implements definition.TimePicker {
public static hourProperty = new dependencyObservable.Property("hour", "TimePicker",
new proxy.PropertyMetadata(0, dependencyObservable.PropertyMetadataSettings.None, onHourPropertyChanged, isHourValid));
@ -138,6 +158,9 @@ export class TimePicker extends view.View implements definition.TimePicker {
public static maxMinuteProperty = new dependencyObservable.Property("maxMinute", "TimePicker",
new proxy.PropertyMetadata(59, dependencyObservable.PropertyMetadataSettings.None, onMaxMinutePropertyChanged, isMinuteValid));
public static minuteIntervalProperty = new dependencyObservable.Property("minuteInterval", "TimePicker",
new proxy.PropertyMetadata(1, dependencyObservable.PropertyMetadataSettings.None, onMinuteIntervalPropertyChanged, isMinuteIntervalValid));
constructor() {
super();
}
@ -156,6 +179,13 @@ export class TimePicker extends view.View implements definition.TimePicker {
this._setValue(TimePicker.minuteProperty, value);
}
get minuteInterval(): number {
return this._getValue(TimePicker.minuteIntervalProperty);
}
set minuteInterval(value: number) {
this._setValue(TimePicker.minuteIntervalProperty, value);
}
get maxHour(): number {
return this._getValue(TimePicker.maxHourProperty);
}
@ -195,4 +225,8 @@ export class TimePicker extends view.View implements definition.TimePicker {
public _setNativeMaxTime() {
//
}
public _setNativeMinuteIntervalTime() {
//
}
}

View File

@ -54,8 +54,16 @@ declare module "ui/time-picker" {
*/
minMinute: number;
/**
* Gets or sets the minute interval.
*/
minuteInterval: number;
//@private
_setNativeTime(): void;
_setNativeMinTime(): void;
_setNativeMaxTime(): void;
_setNativeMinuteIntervalTime(): void;
//@endprivate
}
}

View File

@ -55,6 +55,12 @@ export class TimePicker extends common.TimePicker {
this.ios.maximumDate = getDate(this.maxHour, this.maxMinute);
}
}
public _setNativeMinuteIntervalTime() {
if (this.ios) {
this.ios.minuteInterval = this.minuteInterval;
}
}
}
class UITimePickerChangeHandlerImpl extends NSObject {