From bcc5292dd95e5824da41a19bfbf64ebc25d79102 Mon Sep 17 00:00:00 2001 From: Robert Jaros Date: Tue, 16 Jan 2018 00:13:54 +0100 Subject: Spinner form controls Unit tests --- src/main/assets/css/style.css | 21 ++ src/main/kotlin/pl/treksoft/kvision/Showcase.kt | 29 +++ .../kotlin/pl/treksoft/kvision/core/KVManager.kt | 2 + src/main/kotlin/pl/treksoft/kvision/core/Widget.kt | 21 +- .../pl/treksoft/kvision/form/spinner/Spinner.kt | 148 +++++++++++++ .../treksoft/kvision/form/spinner/SpinnerInput.kt | 242 +++++++++++++++++++++ .../kvision/form/text/AbstractTextInput.kt | 5 + .../kotlin/pl/treksoft/kvision/snabbdom/Types.kt | 2 + .../kvision/form/spinner/SpinnerInputSpec.kt | 54 +++++ .../treksoft/kvision/form/spinner/SpinnerSpec.kt | 53 +++++ .../kvision/form/time/DateTimeInputSpec.kt | 28 +++ .../pl/treksoft/kvision/form/time/DateTimeSpec.kt | 34 +++ 12 files changed, 637 insertions(+), 2 deletions(-) create mode 100644 src/main/kotlin/pl/treksoft/kvision/form/spinner/Spinner.kt create mode 100644 src/main/kotlin/pl/treksoft/kvision/form/spinner/SpinnerInput.kt create mode 100644 src/test/kotlin/test/pl/treksoft/kvision/form/spinner/SpinnerInputSpec.kt create mode 100644 src/test/kotlin/test/pl/treksoft/kvision/form/spinner/SpinnerSpec.kt create mode 100644 src/test/kotlin/test/pl/treksoft/kvision/form/time/DateTimeInputSpec.kt create mode 100644 src/test/kotlin/test/pl/treksoft/kvision/form/time/DateTimeSpec.kt (limited to 'src') diff --git a/src/main/assets/css/style.css b/src/main/assets/css/style.css index 1917ba15..c256fc1f 100644 --- a/src/main/assets/css/style.css +++ b/src/main/assets/css/style.css @@ -85,3 +85,24 @@ trix-toolbar .trix-button-group { .form-inline .form-group, .form-inline .control-label { vertical-align: top; } + +.bootstrap-touchspin .input-group-btn-vertical> .input-sm { + padding: 7px 10px; + height: 6px; +} + +.bootstrap-touchspin .input-group-btn-vertical> .input-lg { + height: 24px; +} + +.kv-spinner-btn-none .input-group-btn-vertical { + display: none; +} + +.kv-spinner-btn-none .form-control { + border-radius: 4px !important; +} + +.kv-spinner-btn-vertical .form-control { + border-radius: 4px 0px 0px 4px !important; +} diff --git a/src/main/kotlin/pl/treksoft/kvision/Showcase.kt b/src/main/kotlin/pl/treksoft/kvision/Showcase.kt index 82651b71..a27fae2d 100644 --- a/src/main/kotlin/pl/treksoft/kvision/Showcase.kt +++ b/src/main/kotlin/pl/treksoft/kvision/Showcase.kt @@ -20,6 +20,9 @@ import pl.treksoft.kvision.form.select.Select import pl.treksoft.kvision.form.select.SelectInput import pl.treksoft.kvision.form.select.SelectOptGroup import pl.treksoft.kvision.form.select.SelectOption +import pl.treksoft.kvision.form.spinner.FORCETYPE +import pl.treksoft.kvision.form.spinner.Spinner +import pl.treksoft.kvision.form.spinner.SpinnerInput import pl.treksoft.kvision.form.string import pl.treksoft.kvision.form.text.Password import pl.treksoft.kvision.form.text.RichText @@ -414,6 +417,7 @@ class Showcase : ApplicationBase() { val checkbox: Boolean by map val radio: Boolean by map val select: String? by map + val spinner: Double? by map } val formPanel = FormPanel() { @@ -436,6 +440,7 @@ class Showcase : ApplicationBase() { // selectWidthType = SELECTWIDTHTYPE.FIT emptyOption = true }, required = true) + add("spinner", Spinner(label = "Spinner"), required = true) validator = { var result = it["text"] == it["textarea"] @@ -448,14 +453,38 @@ class Showcase : ApplicationBase() { validatorMessage = { "Pole Tekst i Obszar muszą być takie same!" } } root.add(formPanel) + val spinner = SpinnerInput(15.05, min = -100000, max = 100000, decimals = 4, forceType = FORCETYPE.ROUND, step = 0.0001).apply { + size = INPUTSIZE.LARGE + } + val ttt = TextInput(value = "abc").apply { + size = INPUTSIZE.LARGE + } + spinner.setEventListener { + onMinBsSpinner = { e -> + console.log(e) + } + onMaxBsSpinner = { e -> + console.log(e) + } + } val formButton = Button("Pokaż dane").setEventListener", element?.innerHTML, "Should render correct spinner input form control") + ti.validatorError = "Validation Error" + assertEquals("
Validation Error
", element?.innerHTML, "Should render correct spinner input form control with validation error") + } + } + + @Test + fun spinUp() { + run { + val root = Root("test") + val si = Spinner(value = 13) + root.add(si) + assertEquals(13, si.value, "Should return initial value before spinUp") + si.spinUp() + assertEquals(14, si.value, "Should return changed value after spinUp") + } + } + + @Test + fun spinDown() { + run { + val root = Root("test") + val si = Spinner(value = 13) + root.add(si) + assertEquals(13, si.value, "Should return initial value before spinDown") + si.spinDown() + assertEquals(12, si.value, "Should return changed value after spinDown") + } + } +} \ No newline at end of file diff --git a/src/test/kotlin/test/pl/treksoft/kvision/form/time/DateTimeInputSpec.kt b/src/test/kotlin/test/pl/treksoft/kvision/form/time/DateTimeInputSpec.kt new file mode 100644 index 00000000..fe6c2b45 --- /dev/null +++ b/src/test/kotlin/test/pl/treksoft/kvision/form/time/DateTimeInputSpec.kt @@ -0,0 +1,28 @@ +package test.pl.treksoft.kvision.form.time + +import pl.treksoft.kvision.core.Root +import pl.treksoft.kvision.form.time.DateTimeInput +import pl.treksoft.kvision.utils.toStringF +import test.pl.treksoft.kvision.DomSpec +import kotlin.js.Date +import kotlin.test.Test +import kotlin.test.assertEquals + +class DateTimeInputSpec : DomSpec { + + @Test + fun render() { + run { + val root = Root("test") + val data = Date() + val dti = DateTimeInput(value = data).apply { + placeholder = "place" + id = "idti" + } + root.add(dti) + val value = dti.getElementJQuery()?.`val`() + assertEquals(data.toStringF(dti.format), value, "Should render date time input with correctly formatted value") + } + } + +} \ No newline at end of file diff --git a/src/test/kotlin/test/pl/treksoft/kvision/form/time/DateTimeSpec.kt b/src/test/kotlin/test/pl/treksoft/kvision/form/time/DateTimeSpec.kt new file mode 100644 index 00000000..1a8665b1 --- /dev/null +++ b/src/test/kotlin/test/pl/treksoft/kvision/form/time/DateTimeSpec.kt @@ -0,0 +1,34 @@ +package test.pl.treksoft.kvision.form.time + +import pl.treksoft.kvision.core.Root +import pl.treksoft.kvision.form.time.DateTime +import pl.treksoft.kvision.utils.toStringF +import test.pl.treksoft.kvision.DomSpec +import kotlin.browser.document +import kotlin.js.Date +import kotlin.test.Test +import kotlin.test.assertEquals + +class DateTimeSpec : DomSpec { + + @Test + fun render() { + run { + val root = Root("test") + val data = Date() + val ti = DateTime(value = data, label = "Label").apply { + placeholder = "place" + name = "name" + disabled = true + } + root.add(ti) + val element = document.getElementById("test") + val id = ti.input.id + val datastr = data.toStringF(ti.format) + assertEquals("
", element?.innerHTML, "Should render correct date time input form control") + ti.validatorError = "Validation Error" + assertEquals("
Validation Error
", element?.innerHTML, "Should render correct date time input form control with validation error") + } + } + +} \ No newline at end of file -- cgit