diff --git a/src/components/Splitpanes.vue b/src/components/Splitpanes.vue
index ac5595c..c61e163 100644
--- a/src/components/Splitpanes.vue
+++ b/src/components/Splitpanes.vue
@@ -30,7 +30,7 @@
]"
>
diff --git a/tests/unit/components/Splitpanes.spec.js b/tests/unit/components/Splitpanes.spec.js
new file mode 100644
index 0000000..a39bf5e
--- /dev/null
+++ b/tests/unit/components/Splitpanes.spec.js
@@ -0,0 +1,141 @@
+import { expect } from 'chai'
+import { shallowMount } from '@vue/test-utils'
+import Splitpanes from '@/components/Splitpanes.vue'
+
+describe('Splitpanes.vue', () => {
+ it('renders correctly - vertical', () => {
+ // mount the component
+ const wrapper = shallowMount(Splitpanes, {
+ slots: {
+ leftPane: '
',
+ rightPane: '
'
+ },
+ propsData: {
+ before: { size: 60, max: 100 },
+ after: { size: 40, max: 100 }
+ }
+ })
+
+
+ expect(wrapper.findAll('.splitpanes-pane')).to.have.lengthOf(2)
+ expect(wrapper.findAll('.splitpanes-pane').at(0).element.style.width).to.equal('60%')
+ expect(wrapper.findAll('.splitpanes-pane').at(1).element.style.width).to.equal('40%')
+ })
+
+ it('renders correctly - horizontal', () => {
+ // mount the component
+ const wrapper = shallowMount(Splitpanes, {
+ slots: {
+ leftPane: '
',
+ rightPane: '
'
+ },
+ propsData: {
+ before: { size: 60, max: 100 },
+ after: { size: 40, max: 100 },
+ horizontal: true
+ }
+ })
+
+
+ expect(wrapper.findAll('.splitpanes-pane')).to.have.lengthOf(2)
+ expect(wrapper.findAll('.splitpanes-pane').at(0).element.style.height).to.equal('60%')
+ expect(wrapper.findAll('.splitpanes-pane').at(1).element.style.height).to.equal('40%')
+ })
+
+ it('toggles correctly', async () => {
+ // mount the component
+ const wrapper = shallowMount(Splitpanes, {
+ slots: {
+ leftPane: '
',
+ rightPane: '
'
+ },
+ propsData: {
+ before: { size: 60, max: 100 },
+ after: { size: 40, max: 100 }
+ }
+ })
+
+ await wrapper.find('.toggle-btn').trigger('click')
+ expect(wrapper.findAll('.splitpanes-pane').at(0).element.style.width).to.equal('0%')
+ expect(wrapper.findAll('.splitpanes-pane').at(1).element.style.width).to.equal('100%')
+
+ await wrapper.find('.toggle-btn').trigger('click')
+ expect(wrapper.findAll('.splitpanes-pane').at(0).element.style.width).to.equal('60%')
+ expect(wrapper.findAll('.splitpanes-pane').at(1).element.style.width).to.equal('40%')
+
+ await wrapper.findAll('.toggle-btn').at(1).trigger('click')
+ expect(wrapper.findAll('.splitpanes-pane').at(0).element.style.width).to.equal('100%')
+ expect(wrapper.findAll('.splitpanes-pane').at(1).element.style.width).to.equal('0%')
+
+ await wrapper.find('.toggle-btn').trigger('click')
+ expect(wrapper.findAll('.splitpanes-pane').at(0).element.style.width).to.equal('60%')
+ expect(wrapper.findAll('.splitpanes-pane').at(1).element.style.width).to.equal('40%')
+ })
+
+ it('drag - vertical', async () => {
+ const root = document.createElement('div')
+ const place = document.createElement('div')
+ root.style.width = '600px'
+ root.style.height = '500px'
+ root.appendChild(place)
+ document.body.appendChild(root)
+
+ // mount the component
+ const wrapper = shallowMount(Splitpanes, {
+ attachTo: place,
+ slots: {
+ leftPane: '
',
+ rightPane: '
'
+ },
+ propsData: {
+ before: { size: 60, max: 100 },
+ after: { size: 40, max: 100 }
+ }
+ })
+
+ await wrapper.find('.splitpanes-splitter').trigger('mousedown')
+ document.dispatchEvent(new MouseEvent("mousemove", {
+ clientX: 300,
+ clientY: 80
+ }))
+ document.dispatchEvent(new MouseEvent("mouseup"))
+ await wrapper.vm.$nextTick()
+ expect(wrapper.findAll('.splitpanes-pane').at(0).element.style.width).to.equal('50%')
+ wrapper.destroy()
+ root.remove()
+ })
+
+ it('drag - horizontal', async () => {
+ const root = document.createElement('div')
+ const place = document.createElement('div')
+ root.style.width = '600px'
+ root.style.height = '500px'
+ root.appendChild(place)
+ document.body.appendChild(root)
+
+ // mount the component
+ const wrapper = shallowMount(Splitpanes, {
+ attachTo: place,
+ slots: {
+ leftPane: '
',
+ rightPane: '
'
+ },
+ propsData: {
+ before: { size: 10, max: 100 },
+ after: { size: 90, max: 100 },
+ horizontal: true
+ }
+ })
+
+ await wrapper.find('.splitpanes-splitter').trigger('mousedown')
+ document.dispatchEvent(new MouseEvent("mousemove", {
+ clientX: 10,
+ clientY: 250
+ }))
+ document.dispatchEvent(new MouseEvent("mouseup"))
+ await wrapper.vm.$nextTick()
+ expect(wrapper.findAll('.splitpanes-pane').at(0).element.style.height).to.equal('50%')
+ wrapper.destroy()
+ root.remove()
+ })
+})