Skip to content

Commit 6184338

Browse files
authored
fix(slider): correct maxValue setter for android (#4346)
The setter should invoke setNativeValuesSilently with the new value and max value respectively. fixes #4343
1 parent 9bba250 commit 6184338

2 files changed

Lines changed: 106 additions & 32 deletions

File tree

‎tests/app/ui/slider/slider-tests.ts‎

Lines changed: 104 additions & 29 deletions
Original file line numberDiff line numberDiff line change
@@ -23,7 +23,15 @@ import { Slider } from "tns-core-modules/ui/slider";
2323
// exports.pageLoaded = pageLoaded;
2424
// << article-binding-slider-properties
2525

26-
const TEST_VALUE = 5;
26+
interface SliderValues {
27+
min?: number,
28+
max?: number,
29+
value?: number,
30+
}
31+
32+
const TEST_VALUE = 50;
33+
const MAX_TEST_VALUE = 70;
34+
const MIN_TEST_VALUE = 10;
2735
const VALUE_EVENT = "valueChange";
2836
const MIN_VALUE_EVENT = "minValueChange";
2937
const MAX_VALUE_EVENT = "maxValueChange";
@@ -131,12 +139,90 @@ export function test_default_native_values() {
131139
helper.buildUIAndRunTest(slider, testAction);
132140
}
133141

142+
export function test_set_min_max_value() {
143+
const slider = new Slider();
144+
slider.minValue = MIN_TEST_VALUE;
145+
slider.maxValue = MAX_TEST_VALUE;
146+
slider.value = TEST_VALUE;
147+
148+
function testAction(views: Array<View>) {
149+
assertSliderValuesDefault(slider);
150+
};
151+
152+
helper.buildUIAndRunTest(slider, testAction);
153+
}
154+
155+
export function test_set_min_value_max() {
156+
const slider = new Slider();
157+
slider.minValue = MIN_TEST_VALUE;
158+
slider.value = TEST_VALUE;
159+
slider.maxValue = MAX_TEST_VALUE;
160+
161+
function testAction(views: Array<View>) {
162+
assertSliderValuesDefault(slider);
163+
};
164+
165+
helper.buildUIAndRunTest(slider, testAction);
166+
}
167+
168+
export function test_set_max_min_value() {
169+
const slider = new Slider();
170+
slider.maxValue = MAX_TEST_VALUE;
171+
slider.minValue = MIN_TEST_VALUE;
172+
slider.value = TEST_VALUE;
173+
174+
function testAction(views: Array<View>) {
175+
assertSliderValuesDefault(slider);
176+
};
177+
178+
helper.buildUIAndRunTest(slider, testAction);
179+
}
180+
181+
export function test_set_max_value_min() {
182+
const slider = new Slider();
183+
slider.maxValue = MAX_TEST_VALUE;
184+
slider.value = TEST_VALUE;
185+
slider.minValue = MIN_TEST_VALUE;
186+
187+
function testAction(views: Array<View>) {
188+
assertSliderValuesDefault(slider);
189+
};
190+
191+
helper.buildUIAndRunTest(slider, testAction);
192+
}
193+
194+
export function test_set_value_min_max() {
195+
const slider = new Slider();
196+
slider.value = TEST_VALUE;
197+
slider.minValue = MIN_TEST_VALUE;
198+
slider.maxValue = MAX_TEST_VALUE;
199+
200+
function testAction(views: Array<View>) {
201+
assertSliderValuesDefault(slider);
202+
};
203+
204+
helper.buildUIAndRunTest(slider, testAction);
205+
}
206+
207+
export function test_set_value_max_min() {
208+
const slider = new Slider();
209+
slider.value = TEST_VALUE;
210+
slider.maxValue = MAX_TEST_VALUE;
211+
slider.minValue = MIN_TEST_VALUE;
212+
213+
function testAction(views: Array<View>) {
214+
assertSliderValuesDefault(slider);
215+
};
216+
217+
helper.buildUIAndRunTest(slider, testAction);
218+
}
219+
134220
export function test_set_value_less_than_min_should_set_value_to_min() {
135221
const slider = new Slider();
136222

137223
function testAction(views: Array<View>) {
138224
slider.value = -10;
139-
TKUnit.assertEqual(slider.value, 0, "slider.value");
225+
assertSliderValues(slider, { value: 0 });
140226
};
141227

142228
helper.buildUIAndRunTest(slider, testAction);
@@ -148,7 +234,7 @@ export function test_set_value_greater_than_max_should_set_value_to_max() {
148234
function testAction(views: Array<View>) {
149235
slider.maxValue = 10;
150236
slider.value = 20;
151-
TKUnit.assertEqual(slider.value, 10, "slider.value");
237+
assertSliderValues(slider, { value: 10 });
152238
};
153239

154240
helper.buildUIAndRunTest(slider, testAction);
@@ -181,10 +267,7 @@ export function test_set_maxValue_should_adjust_value_but_respect_minValue() {
181267

182268
function testAction(views: Array<View>) {
183269
slider.maxValue = 30;
184-
185-
TKUnit.assertEqual(slider.maxValue, 50, "slider.maxValue");
186-
TKUnit.assertEqual(slider.minValue, 50, "slider.minValue");
187-
TKUnit.assertEqual(slider.value, 50, "slider.value");
270+
assertSliderValues(slider, { min: 50, max: 50, value: 50 });
188271
};
189272

190273
helper.buildUIAndRunTest(slider, testAction);
@@ -198,9 +281,7 @@ export function test_set_minValue_should_adjust_value() {
198281

199282
function testAction(views: Array<View>) {
200283
slider.minValue = 60;
201-
202-
TKUnit.assertEqual(slider.minValue, 60, "slider.minValue");
203-
TKUnit.assertEqual(slider.value, 60, "slider.value");
284+
assertSliderValues(slider, { min: 60, value: 60 });
204285
};
205286

206287
helper.buildUIAndRunTest(slider, testAction);
@@ -213,11 +294,9 @@ export function test_set_minValue_should_adjust_value_and_maxValue() {
213294
slider.minValue = 0;
214295

215296
function testAction(views: Array<View>) {
216-
slider.minValue = 120;
217-
218-
TKUnit.assertEqual(slider.minValue, 120, "slider.minValue");
219-
TKUnit.assertEqual(slider.maxValue, 120, "slider.maxValue");
220-
TKUnit.assertEqual(slider.value, 120, "slider.value");
297+
const newMin = 120;
298+
slider.minValue = newMin;
299+
assertSliderValues(slider, { min: newMin, max: newMin, value: newMin });
221300
};
222301

223302
helper.buildUIAndRunTest(slider, testAction);
@@ -381,26 +460,22 @@ export function test_binding_value_to_bindingContext() {
381460
helper.buildUIAndRunTest(slider, testAction);
382461
}
383462

384-
export function test_set_value_min_max_have_correct_values_after_load() {
385-
const slider = new Slider();
386-
slider.minValue = 10;
387-
slider.maxValue = 300;
388-
slider.value = 250;
389-
390-
function testAction(views: Array<View>) {
391-
TKUnit.assertEqual(slider.minValue, 10, "slider.minValue");
392-
TKUnit.assertEqual(slider.value, 250, "slider.value");
393-
TKUnit.assertEqual(slider.maxValue, 300, "slider.maxValue");
394-
};
463+
function assertSliderValuesDefault(slider: Slider) {
464+
return assertSliderValues(slider, { min: MIN_TEST_VALUE, max: MAX_TEST_VALUE, value: TEST_VALUE });
465+
}
395466

396-
helper.buildUIAndRunTest(slider, testAction);
467+
function assertSliderValues(slider: Slider, { min, max, value }: SliderValues) {
468+
// tslint:disable
469+
min !== undefined && TKUnit.assertEqual(slider.minValue, min, "slider.minValue");
470+
max !== undefined && TKUnit.assertEqual(slider.maxValue, max, "slider.maxValue");
471+
value !== undefined && TKUnit.assertEqual(slider.value, value, "slider.value");
472+
// tslint:enable
397473
}
398474

399475
function getNativeValue(slider: Slider): number {
400476
if (slider.android) {
401477
return slider.android.getProgress();
402-
}
403-
else if (slider.ios) {
478+
} else if (slider.ios) {
404479
return slider.ios.value;
405480
}
406481
}

‎tns-core-modules/ui/slider/slider.android.ts‎

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -80,8 +80,7 @@ export class Slider extends SliderBase {
8080
try {
8181
nativeView.setMax(newMaxValue);
8282
nativeView.setProgress(newValue);
83-
}
84-
finally {
83+
} finally {
8584
this._supressNativeValue = false;
8685
}
8786
}
@@ -102,7 +101,7 @@ export class Slider extends SliderBase {
102101
return 100;
103102
}
104103
[maxValueProperty.setNative](value: number) {
105-
this.nativeView.setMax(value - this.minValue);
104+
this.setNativeValuesSilently(value - this.minValue, value);
106105
}
107106

108107
[colorProperty.getDefault](): number {

0 commit comments

Comments
 (0)