diff options
39 files changed, 126 insertions, 143 deletions
diff --git a/src/main/kotlin/pl/treksoft/kvision/KVManager.kt b/src/main/kotlin/pl/treksoft/kvision/KVManager.kt index d3001b1d..4ab7c1d0 100644 --- a/src/main/kotlin/pl/treksoft/kvision/KVManager.kt +++ b/src/main/kotlin/pl/treksoft/kvision/KVManager.kt @@ -143,8 +143,10 @@ internal object KVManager { @Suppress("UnsafeCastFromDynamic") internal fun clearResizeEvent(component: Component) { - component.getElement()?.let { - elementResizeEvent.unbind(it) + if (component.getElement().asDynamic().__resizeTrigger__.contentDocument != null) { + component.getElement()?.let { + elementResizeEvent.unbind(it) + } } } } diff --git a/src/test/kotlin/test/pl/treksoft/kvision/TestUtil.kt b/src/test/kotlin/test/pl/treksoft/kvision/TestUtil.kt index 56a33690..b67ab307 100644 --- a/src/test/kotlin/test/pl/treksoft/kvision/TestUtil.kt +++ b/src/test/kotlin/test/pl/treksoft/kvision/TestUtil.kt @@ -26,6 +26,8 @@ import pl.treksoft.jquery.jQuery import pl.treksoft.kvision.core.Widget import pl.treksoft.kvision.panel.Root import kotlin.browser.document +import kotlin.test.assertEquals +import kotlin.test.assertTrue interface TestSpec { fun beforeTest() @@ -63,6 +65,20 @@ interface DomSpec : TestSpec { jQuery(`object` = ".modal-backdrop").remove() } + fun assertEqualsHtml(expected: String?, actual: String?, message: String?) { + if (expected != null && actual != null) { + val exp = jQuery(html = expected) + val act = jQuery(html = actual) + val result = exp[0]?.isEqualNode(act[0]) + if (result == true) { + assertTrue(result == true, message) + } else { + assertEquals(expected, actual, message) + } + } else { + assertEquals(expected, actual, message) + } + } } interface WSpec : DomSpec { diff --git a/src/test/kotlin/test/pl/treksoft/kvision/core/WidgetWrapperSpec.kt b/src/test/kotlin/test/pl/treksoft/kvision/core/WidgetWrapperSpec.kt index ff224b99..e2e6ef70 100644 --- a/src/test/kotlin/test/pl/treksoft/kvision/core/WidgetWrapperSpec.kt +++ b/src/test/kotlin/test/pl/treksoft/kvision/core/WidgetWrapperSpec.kt @@ -21,10 +21,10 @@ */ package test.pl.treksoft.kvision.core -import pl.treksoft.kvision.panel.Root import pl.treksoft.kvision.core.UNIT import pl.treksoft.kvision.core.Widget import pl.treksoft.kvision.core.WidgetWrapper +import pl.treksoft.kvision.panel.Root import test.pl.treksoft.kvision.DomSpec import kotlin.browser.document import kotlin.test.Test @@ -41,7 +41,7 @@ class WidgetWrapperSpec : DomSpec { wrapper.width = 100 to UNIT.em root.add(wrapper) val element = document.getElementById("test") - assertEquals( + assertEqualsHtml( "<div style=\"width: 100em;\"><div></div></div>", element?.innerHTML, "Should render widget inside custom wrapper" diff --git a/src/test/kotlin/test/pl/treksoft/kvision/data/DataContainerSpec.kt b/src/test/kotlin/test/pl/treksoft/kvision/data/DataContainerSpec.kt index 39d58f26..809f5880 100644 --- a/src/test/kotlin/test/pl/treksoft/kvision/data/DataContainerSpec.kt +++ b/src/test/kotlin/test/pl/treksoft/kvision/data/DataContainerSpec.kt @@ -22,14 +22,13 @@ package test.pl.treksoft.kvision.data import com.lightningkite.kotlin.observable.list.observableListOf -import pl.treksoft.kvision.html.Label -import pl.treksoft.kvision.panel.Root import pl.treksoft.kvision.data.BaseDataComponent import pl.treksoft.kvision.data.DataContainer +import pl.treksoft.kvision.html.Label +import pl.treksoft.kvision.panel.Root import test.pl.treksoft.kvision.DomSpec import kotlin.browser.document import kotlin.test.Test -import kotlin.test.assertEquals class DataContainerSpec : DomSpec { @@ -46,19 +45,19 @@ class DataContainerSpec : DomSpec { val container = DataContainer(model, { index -> Label(model[index].value) }) root.add(container) val element = document.getElementById("test") - assertEquals( + assertEqualsHtml( "<div style=\"display: flex; flex-direction: column;\"><div><span>First</span></div><div><span>Second</span></div></div>", element?.innerHTML, "Should render correct data container" ) model.add(Model("Third")) - assertEquals( + assertEqualsHtml( "<div style=\"display: flex; flex-direction: column;\"><div><span>First</span></div><div><span>Second</span></div><div><span>Third</span></div></div>", element?.innerHTML, "Should render correct data container after model change" ) model[1].value = "Changed" - assertEquals( + assertEqualsHtml( "<div style=\"display: flex; flex-direction: column;\"><div><span>First</span></div><div><span>Changed</span></div><div><span>Third</span></div></div>", element?.innerHTML, "Should render correct data container after model element change" diff --git a/src/test/kotlin/test/pl/treksoft/kvision/dropdown/DropDownSpec.kt b/src/test/kotlin/test/pl/treksoft/kvision/dropdown/DropDownSpec.kt index a86a7e12..4d1b9334 100644 --- a/src/test/kotlin/test/pl/treksoft/kvision/dropdown/DropDownSpec.kt +++ b/src/test/kotlin/test/pl/treksoft/kvision/dropdown/DropDownSpec.kt @@ -27,7 +27,6 @@ import pl.treksoft.kvision.panel.Root import test.pl.treksoft.kvision.DomSpec import kotlin.browser.document import kotlin.test.Test -import kotlin.test.assertEquals import kotlin.test.assertTrue class DropDownSpec : DomSpec { @@ -41,7 +40,7 @@ class DropDownSpec : DomSpec { dd.toggle() val element = document.getElementById("test") val id = dd.button.id - assertEquals( + assertEqualsHtml( "<div class=\"dropdown open\"><button class=\"dropdown btn btn-default\" id=\"$id\" type=\"button\" data-toggle=\"dropdown\" aria-haspopup=\"true\" aria-expanded=\"false\"><span class=\"glyphicon glyphicon-flag\"></span> Dropdown</button><ul class=\"dropdown-menu\" aria-labelledby=\"$id\" aria-expanded=\"true\"><li><a href=\"#!/x\">abc</a></li><li><a href=\"#!/y\">def</a></li></ul></div>", element?.innerHTML, "Should render correct drop down" @@ -58,7 +57,7 @@ class DropDownSpec : DomSpec { dd.toggle() val element = document.getElementById("test") val id = dd.button.id - assertEquals( + assertEqualsHtml( "<div class=\"dropup open\"><button class=\"dropdown btn btn-default\" id=\"$id\" type=\"button\" data-toggle=\"dropdown\" aria-haspopup=\"true\" aria-expanded=\"false\"><span class=\"glyphicon glyphicon-flag\"></span> Dropdown</button><ul class=\"dropdown-menu\" aria-labelledby=\"$id\" aria-expanded=\"true\"><li><a href=\"#!/x\">abc</a></li><li><a href=\"#!/y\">def</a></li></ul></div>", element?.innerHTML, "Should render correct drop down" @@ -75,7 +74,7 @@ class DropDownSpec : DomSpec { dd.toggle() val element = document.getElementById("test") val id = dd.button.id - assertEquals( + assertEqualsHtml( "<div class=\"dropdown open\"><button class=\"dropdown btn btn-default\" id=\"$id\" type=\"button\" data-toggle=\"dropdown\" aria-haspopup=\"true\" aria-expanded=\"false\"><span class=\"glyphicon glyphicon-flag\"></span> Dropdown</button><ul class=\"dropdown-menu\" aria-labelledby=\"$id\" aria-expanded=\"true\"><li class=\"dropdown-header\">abc</li></ul></div>", element?.innerHTML, "Should render correct drop down" @@ -92,7 +91,7 @@ class DropDownSpec : DomSpec { dd.toggle() val element = document.getElementById("test") val id = dd.button.id - assertEquals( + assertEqualsHtml( "<div class=\"dropdown open\"><button class=\"dropdown btn btn-default\" id=\"$id\" type=\"button\" data-toggle=\"dropdown\" aria-haspopup=\"true\" aria-expanded=\"false\"><span class=\"glyphicon glyphicon-flag\"></span> Dropdown</button><ul class=\"dropdown-menu\" aria-labelledby=\"$id\" aria-expanded=\"true\"><li class=\"divider\" role=\"separator\">abc</li></ul></div>", element?.innerHTML, "Should render correct drop down" @@ -109,7 +108,7 @@ class DropDownSpec : DomSpec { dd.toggle() val element = document.getElementById("test") val id = dd.button.id - assertEquals( + assertEqualsHtml( "<div class=\"dropdown open\"><button class=\"dropdown btn btn-default\" id=\"$id\" type=\"button\" data-toggle=\"dropdown\" aria-haspopup=\"true\" aria-expanded=\"false\"><span class=\"glyphicon glyphicon-flag\"></span> Dropdown</button><ul class=\"dropdown-menu\" aria-labelledby=\"$id\" aria-expanded=\"true\"><li class=\"disabled\"><a href=\"#\">abc</a></li></ul></div>", element?.innerHTML, "Should render correct drop down" diff --git a/src/test/kotlin/test/pl/treksoft/kvision/form/FieldLabelSpec.kt b/src/test/kotlin/test/pl/treksoft/kvision/form/FieldLabelSpec.kt index c818d5fd..fbbfd5bb 100644 --- a/src/test/kotlin/test/pl/treksoft/kvision/form/FieldLabelSpec.kt +++ b/src/test/kotlin/test/pl/treksoft/kvision/form/FieldLabelSpec.kt @@ -37,7 +37,7 @@ class FieldLabelSpec : DomSpec { val fl = FieldLabel("input", "Label") root.add(fl) val element = document.getElementById("test") - assertEquals( + assertEqualsHtml( "<label class=\"control-label\" for=\"input\">Label</label>", element?.innerHTML, "Should render correct label" diff --git a/src/test/kotlin/test/pl/treksoft/kvision/form/HelpBlockSpec.kt b/src/test/kotlin/test/pl/treksoft/kvision/form/HelpBlockSpec.kt index d8a142a4..69e7b8df 100644 --- a/src/test/kotlin/test/pl/treksoft/kvision/form/HelpBlockSpec.kt +++ b/src/test/kotlin/test/pl/treksoft/kvision/form/HelpBlockSpec.kt @@ -21,12 +21,11 @@ */ package test.pl.treksoft.kvision.form -import pl.treksoft.kvision.panel.Root import pl.treksoft.kvision.form.HelpBlock +import pl.treksoft.kvision.panel.Root import test.pl.treksoft.kvision.DomSpec import kotlin.browser.document import kotlin.test.Test -import kotlin.test.assertEquals class HelpBlockSpec : DomSpec { @@ -37,7 +36,7 @@ class HelpBlockSpec : DomSpec { val fl = HelpBlock("Form Error") root.add(fl) val element = document.getElementById("test") - assertEquals( + assertEqualsHtml( "<span class=\"help-block small\">Form Error</span>", element?.innerHTML, "Should render correct help block" diff --git a/src/test/kotlin/test/pl/treksoft/kvision/form/check/CheckBoxSpec.kt b/src/test/kotlin/test/pl/treksoft/kvision/form/check/CheckBoxSpec.kt index 752bb378..95d53b3b 100644 --- a/src/test/kotlin/test/pl/treksoft/kvision/form/check/CheckBoxSpec.kt +++ b/src/test/kotlin/test/pl/treksoft/kvision/form/check/CheckBoxSpec.kt @@ -21,13 +21,12 @@ */ package test.pl.treksoft.kvision.form.check -import pl.treksoft.kvision.panel.Root -import pl.treksoft.kvision.form.check.CheckBoxStyle import pl.treksoft.kvision.form.check.CheckBox +import pl.treksoft.kvision.form.check.CheckBoxStyle +import pl.treksoft.kvision.panel.Root import test.pl.treksoft.kvision.DomSpec import kotlin.browser.document import kotlin.test.Test -import kotlin.test.assertEquals class CheckBoxSpec : DomSpec { @@ -45,7 +44,7 @@ class CheckBoxSpec : DomSpec { root.add(ci) val element = document.getElementById("test") val id = ci.input.id - assertEquals( + assertEqualsHtml( "<div class=\"checkbox checkbox-danger checkbox-circle checkbox-inline\"><input class=\"styled\" id=\"$id\" type=\"checkbox\" checked=\"checked\" name=\"name\" disabled=\"disabled\"><label for=\"$id\">Label</label></div>", element?.innerHTML, "Should render correct checkbox form control" @@ -53,7 +52,7 @@ class CheckBoxSpec : DomSpec { ci.style = CheckBoxStyle.INFO ci.circled = false ci.inline = false - assertEquals( + assertEqualsHtml( "<div class=\"checkbox checkbox-info\"><input class=\"styled\" id=\"$id\" type=\"checkbox\" checked=\"checked\" name=\"name\" disabled=\"disabled\"><label for=\"$id\">Label</label></div>", element?.innerHTML, "Should render correct checkbox form control" diff --git a/src/test/kotlin/test/pl/treksoft/kvision/form/check/CheckInputSpec.kt b/src/test/kotlin/test/pl/treksoft/kvision/form/check/CheckInputSpec.kt index eeea3052..6b163047 100644 --- a/src/test/kotlin/test/pl/treksoft/kvision/form/check/CheckInputSpec.kt +++ b/src/test/kotlin/test/pl/treksoft/kvision/form/check/CheckInputSpec.kt @@ -21,13 +21,12 @@ */ package test.pl.treksoft.kvision.form.check -import pl.treksoft.kvision.panel.Root -import pl.treksoft.kvision.form.check.CheckInputType import pl.treksoft.kvision.form.check.CheckInput +import pl.treksoft.kvision.form.check.CheckInputType +import pl.treksoft.kvision.panel.Root import test.pl.treksoft.kvision.DomSpec import kotlin.browser.document import kotlin.test.Test -import kotlin.test.assertEquals class CheckInputSpec : DomSpec { @@ -42,7 +41,7 @@ class CheckInputSpec : DomSpec { } root.add(ci) val element = document.getElementById("test") - assertEquals( + assertEqualsHtml( "<input id=\"idti\" type=\"checkbox\" checked=\"checked\" name=\"name\" disabled=\"disabled\">", element?.innerHTML, "Should render correct checkbox control" @@ -61,7 +60,7 @@ class CheckInputSpec : DomSpec { } root.add(ci) val element = document.getElementById("test") - assertEquals( + assertEqualsHtml( "<input id=\"idti\" type=\"radio\" checked=\"checked\" name=\"name\" value=\"abc\">", element?.innerHTML, "Should render correct radio button control" diff --git a/src/test/kotlin/test/pl/treksoft/kvision/form/check/RadioGroupSpec.kt b/src/test/kotlin/test/pl/treksoft/kvision/form/check/RadioGroupSpec.kt index 62b10f68..21a9bf41 100644 --- a/src/test/kotlin/test/pl/treksoft/kvision/form/check/RadioGroupSpec.kt +++ b/src/test/kotlin/test/pl/treksoft/kvision/form/check/RadioGroupSpec.kt @@ -21,13 +21,12 @@ */ package test.pl.treksoft.kvision.form.check -import pl.treksoft.kvision.panel.Root import pl.treksoft.kvision.form.check.Radio import pl.treksoft.kvision.form.check.RadioGroup +import pl.treksoft.kvision.panel.Root import test.pl.treksoft.kvision.DomSpec import kotlin.browser.document import kotlin.test.Test -import kotlin.test.assertEquals class RadioGroupSpec : DomSpec { @@ -44,7 +43,7 @@ class RadioGroupSpec : DomSpec { val id = ci.flabel.forId val rid1 = ci.getChildren().filterIsInstance<Radio>().first().input.id val rid2 = ci.getChildren().filterIsInstance<Radio>().last().input.id - assertEquals( + assertEqualsHtml( "<div class=\"form-group kv-radiogroup-inline\"><label class=\"control-label\" for=\"$id\">Label</label><div class=\"radio\"><input id=\"$rid1\" type=\"radio\" name=\"$id\" disabled=\"disabled\" value=\"a\"><label for=\"$rid1\">A</label></div><div class=\"radio\"><input id=\"$rid2\" type=\"radio\" name=\"$id\" disabled=\"disabled\" value=\"b\"><label for=\"$rid2\">B</label></div></div>", element?.innerHTML, "Should render correct radio button group form control" diff --git a/src/test/kotlin/test/pl/treksoft/kvision/form/check/RadioSpec.kt b/src/test/kotlin/test/pl/treksoft/kvision/form/check/RadioSpec.kt index d0e72dea..b43c2caa 100644 --- a/src/test/kotlin/test/pl/treksoft/kvision/form/check/RadioSpec.kt +++ b/src/test/kotlin/test/pl/treksoft/kvision/form/check/RadioSpec.kt @@ -21,13 +21,12 @@ */ package test.pl.treksoft.kvision.form.check -import pl.treksoft.kvision.panel.Root -import pl.treksoft.kvision.form.check.RadioStyle import pl.treksoft.kvision.form.check.Radio +import pl.treksoft.kvision.form.check.RadioStyle +import pl.treksoft.kvision.panel.Root import test.pl.treksoft.kvision.DomSpec import kotlin.browser.document import kotlin.test.Test -import kotlin.test.assertEquals class RadioSpec : DomSpec { @@ -44,7 +43,7 @@ class RadioSpec : DomSpec { root.add(ci) val element = document.getElementById("test") val id = ci.input.id - assertEquals( + assertEqualsHtml( "<div class=\"radio radio-danger radio-inline\"><input id=\"$id\" type=\"radio\" checked=\"checked\" name=\"name\" disabled=\"disabled\" value=\"abc\"><label for=\"$id\">Label</label></div>", element?.innerHTML, "Should render correct radio button form control" @@ -52,7 +51,7 @@ class RadioSpec : DomSpec { ci.style = RadioStyle.INFO ci.squared = true ci.inline = false - assertEquals( + assertEqualsHtml( "<div class=\"checkbox kv-radio-checkbox checkbox-info\"><input id=\"$id\" type=\"radio\" checked=\"checked\" name=\"name\" disabled=\"disabled\" value=\"abc\"><label for=\"$id\">Label</label></div>", element?.innerHTML, "Should render correct radio button form control" diff --git a/src/test/kotlin/test/pl/treksoft/kvision/form/select/SelectOptGroupSpec.kt b/src/test/kotlin/test/pl/treksoft/kvision/form/select/SelectOptGroupSpec.kt index d9e2cad8..b906d09e 100644 --- a/src/test/kotlin/test/pl/treksoft/kvision/form/select/SelectOptGroupSpec.kt +++ b/src/test/kotlin/test/pl/treksoft/kvision/form/select/SelectOptGroupSpec.kt @@ -21,13 +21,12 @@ */ package test.pl.treksoft.kvision.form.select -import pl.treksoft.kvision.panel.Root import pl.treksoft.kvision.form.select.SelectOptGroup import pl.treksoft.kvision.form.select.SelectOption +import pl.treksoft.kvision.panel.Root import test.pl.treksoft.kvision.DomSpec import kotlin.browser.document import kotlin.test.Test -import kotlin.test.assertEquals class SelectOptGroupSpec : DomSpec { @@ -38,13 +37,13 @@ class SelectOptGroupSpec : DomSpec { val selectOptGroup = SelectOptGroup("Group", listOf("test1" to "Test 1", "test2" to "Test 2"), 2) root.add(selectOptGroup) val element = document.getElementById("test") - assertEquals( + assertEqualsHtml( "<optgroup label=\"Group\" data-max-options=\"2\"><option value=\"test1\">Test 1</option><option value=\"test2\">Test 2</option></optgroup>", element?.innerHTML, "Should render correct select option group" ) selectOptGroup.add(SelectOption("test3", "Test 3")) - assertEquals( + assertEqualsHtml( "<optgroup label=\"Group\" data-max-options=\"2\"><option value=\"test1\">Test 1</option><option value=\"test2\">Test 2</option><option value=\"test3\">Test 3</option></optgroup>", element?.innerHTML, "Should render correct select option group with added option" diff --git a/src/test/kotlin/test/pl/treksoft/kvision/form/select/SelectOptionSpec.kt b/src/test/kotlin/test/pl/treksoft/kvision/form/select/SelectOptionSpec.kt index 32080874..bbdfcd61 100644 --- a/src/test/kotlin/test/pl/treksoft/kvision/form/select/SelectOptionSpec.kt +++ b/src/test/kotlin/test/pl/treksoft/kvision/form/select/SelectOptionSpec.kt @@ -21,12 +21,11 @@ */ package test.pl.treksoft.kvision.form.select -import pl.treksoft.kvision.panel.Root import pl.treksoft.kvision.form.select.SelectOption +import pl.treksoft.kvision.panel.Root import test.pl.treksoft.kvision.DomSpec import kotlin.browser.document import kotlin.test.Test -import kotlin.test.assertEquals class SelectOptionSpec : DomSpec { @@ -37,19 +36,19 @@ class SelectOptionSpec : DomSpec { val selectOption = SelectOption("testValue", "testLabel") root.add(selectOption) val element = document.getElementById("test") - assertEquals( + assertEqualsHtml( "<option value=\"testValue\">testLabel</option>", element?.innerHTML, "Should render correct select option" ) selectOption.icon = "fa-flag" - assertEquals( + assertEqualsHtml( "<option value=\"testValue\" data-icon=\"fa fa-flag\">testLabel</option>", element?.innerHTML, "Should render correct select option with icon" ) selectOption.divider = true - assertEquals( + assertEqualsHtml( "<option data-divider=\"true\"></option>", element?.innerHTML, "Should render correct divider option" diff --git a/src/test/kotlin/test/pl/treksoft/kvision/form/spinner/SpinnerSpec.kt b/src/test/kotlin/test/pl/treksoft/kvision/form/spinner/SpinnerSpec.kt index a8474790..fe2424f4 100644 --- a/src/test/kotlin/test/pl/treksoft/kvision/form/spinner/SpinnerSpec.kt +++ b/src/test/kotlin/test/pl/treksoft/kvision/form/spinner/SpinnerSpec.kt @@ -21,8 +21,8 @@ */ package test.pl.treksoft.kvision.form.spinner -import pl.treksoft.kvision.panel.Root import pl.treksoft.kvision.form.spinner.Spinner +import pl.treksoft.kvision.panel.Root import test.pl.treksoft.kvision.DomSpec import kotlin.browser.document import kotlin.test.Test @@ -42,13 +42,13 @@ class SpinnerSpec : DomSpec { root.add(ti) val element = document.getElementById("test") val id = ti.input.id - assertEquals( + assertEqualsHtml( "<div class=\"form-group\"><label class=\"control-label\" for=\"$id\">Label</label><div class=\"input-group kv-spinner-btn-vertical\"><span><div class=\"input-group bootstrap-touchspin\"><span class=\"input-group-addon bootstrap-touchspin-prefix\" style=\"display: none;\"></span><input class=\"form-control\" id=\"$id\" type=\"text\" value=\"13\" placeholder=\"place\" name=\"name\" disabled=\"disabled\" style=\"display: block;\"><span class=\"input-group-addon bootstrap-touchspin-postfix\" style=\"display: none;\"></span><span class=\"input-group-btn-vertical\"><button class=\"btn btn-default bootstrap-touchspin-up\" type=\"button\"><i class=\"glyphicon glyphicon-chevron-up\"></i></button><button class=\"btn btn-default bootstrap-touchspin-down\" type=\"button\"><i class=\"glyphicon glyphicon-chevron-down\"></i></button></span></div></span></div></div>", element?.innerHTML, "Should render correct spinner input form control" ) ti.validatorError = "Validation Error" - assertEquals( + assertEqualsHtml( "<div class=\"form-group has-error\"><label class=\"control-label\" for=\"$id\">Label</label><div class=\"input-group kv-s |
