quasar
Version:
Build high-performance VueJS user interfaces (SPA, PWA, SSR, Mobile and Desktop) in record time
341 lines (271 loc) • 7.5 kB
JavaScript
/**
* Ignored specs:
* [(modifier)center]
*/
import { mount, flushPromises } from '@vue/test-utils'
import { describe, test, expect } from 'vitest'
import { defineComponent, ref } from 'vue'
import Ripple from './Ripple.js'
describe('[Ripple API]', () => {
describe('[Value]', () => {
test('no value', async () => {
const TestComponent = defineComponent({
template: '<div v-ripple />',
directives: { Ripple }
})
const wrapper = mount(TestComponent)
await wrapper.trigger('click')
expect(
wrapper.find('.q-ripple')
.exists()
).toBe(true)
})
test('as Boolean true', async () => {
const TestComponent = defineComponent({
template: '<div v-ripple="true" />',
directives: { Ripple }
})
const wrapper = mount(TestComponent)
await wrapper.trigger('click')
expect(
wrapper.find('.q-ripple')
.exists()
).toBe(true)
})
test('as Boolean false', async () => {
const TestComponent = defineComponent({
template: '<div v-ripple="false" />',
directives: { Ripple }
})
const wrapper = mount(TestComponent)
await wrapper.trigger('click')
expect(
wrapper.find('.q-ripple')
.exists()
).toBe(false)
})
test('as empty Object', async () => {
const TestComponent = defineComponent({
template: '<div v-ripple="val" />',
directives: { Ripple },
setup () {
return {
val: {}
}
}
})
const wrapper = mount(TestComponent)
await wrapper.trigger('click')
expect(
wrapper.find('.q-ripple')
.exists()
).toBe(true)
})
test('as full Object', async () => {
const TestComponent = defineComponent({
template: '<div v-ripple="val" />',
directives: { Ripple },
setup () {
return {
val: {
stop: true,
center: true,
color: 'orange-5',
keyCodes: []
}
}
}
})
const wrapper = mount(TestComponent)
await wrapper.trigger('click')
expect(
wrapper.find('.q-ripple')
.exists()
).toBe(true)
})
test('as { early: true }', async () => {
const TestComponent = defineComponent({
template: '<div v-ripple="val" />',
directives: { Ripple },
setup () {
return {
val: { early: true }
}
}
})
const wrapper = mount(TestComponent)
await wrapper.trigger('pointerdown')
expect(
wrapper.find('.q-ripple')
.exists()
).toBe(true)
})
test('as { color: orange-5 }', async () => {
const TestComponent = defineComponent({
template: '<div v-ripple="val" />',
directives: { Ripple },
setup () {
return {
val: { color: 'orange-5' }
}
}
})
const wrapper = mount(TestComponent)
await wrapper.trigger('click')
expect(
wrapper.get('.q-ripple')
.classes()
).toContain('text-orange-5')
})
test('as { stop: true }', async () => {
const TestComponent = defineComponent({
template: '<div><i v-ripple="val" /></div>',
directives: { Ripple },
setup () {
return {
val: { stop: true }
}
}
})
const wrapper = mount(TestComponent)
await wrapper.get('i').trigger('click')
expect(
wrapper.emitted()
).not.toHaveProperty('click')
expect(
wrapper.find('.q-ripple')
.exists()
).toBe(true)
})
test('as { keyCodes: [ 65 ] }', async () => {
const TestComponent = defineComponent({
template: '<div v-ripple="val" />',
directives: { Ripple },
setup () {
return {
val: { keyCodes: [ 65 ] }
}
}
})
const wrapper = mount(TestComponent)
await wrapper.trigger('keyup', { keyCode: 65 })
expect(
wrapper.find('.q-ripple')
.exists()
).toBe(true)
})
test('as { early: true, keyCodes: [ 65 ] }', async () => {
const TestComponent = defineComponent({
template: '<div v-ripple="val" />',
directives: { Ripple },
setup () {
return {
val: {
early: true,
keyCodes: [ 65 ]
}
}
}
})
const wrapper = mount(TestComponent)
await wrapper.trigger('keydown', { keyCode: 65 })
expect(
wrapper.find('.q-ripple')
.exists()
).toBe(true)
})
test('is reactive', async () => {
const val = ref({ stop: true })
const TestComponent = defineComponent({
template: '<div><i v-ripple="val" /></div>',
directives: { Ripple },
setup () {
return { val }
}
})
const wrapper = mount(TestComponent)
await wrapper.get('i').trigger('click')
expect(
wrapper.emitted()
).not.toHaveProperty('click')
val.value = { color: 'red' }
await flushPromises()
await wrapper.get('i').trigger('click')
expect(
wrapper.find('i > .q-ripple.text-red')
.exists()
).toBe(true)
expect(
wrapper.emitted()
).toHaveProperty('click')
})
test('merges modifiers with value', async () => {
const TestComponent = defineComponent({
template: '<div v-ripple.early="val" />',
directives: { Ripple },
setup () {
return {
val: { color: 'orange-5' }
}
}
})
const wrapper = mount(TestComponent)
await wrapper.trigger('pointerdown')
expect(
wrapper.find('.q-ripple')
.exists()
).toBe(true)
expect(
wrapper.get('.q-ripple')
.classes()
).toContain('text-orange-5')
})
})
describe('[Argument]', () => {
test('has effect', async () => {
const TestComponent = defineComponent({
template: '<div v-ripple:orange-5 />',
directives: { Ripple }
})
const wrapper = mount(TestComponent)
await wrapper.trigger('click')
expect(
wrapper.get('.q-ripple')
.classes()
).toContain('text-orange-5')
})
})
describe('[Modifiers]', () => {
describe('[(modifier)early]', () => {
test('has effect', async () => {
const TestComponent = defineComponent({
template: '<div v-ripple.early />',
directives: { Ripple }
})
const wrapper = mount(TestComponent)
await wrapper.trigger('pointerdown')
expect(
wrapper.find('.q-ripple')
.exists()
).toBe(true)
})
})
describe('[(modifier)stop]', () => {
test('has effect', async () => {
const TestComponent = defineComponent({
template: '<div><i v-ripple.stop /></div>',
directives: { Ripple }
})
const wrapper = mount(TestComponent)
await wrapper.get('i').trigger('click')
expect(
wrapper.emitted()
).not.toHaveProperty('click')
expect(
wrapper.find('.q-ripple')
.exists()
).toBe(true)
})
})
})
})