StackGenVis: Alignment of Data, Algorithms, and Models for Stacking Ensemble Learning Using Performance Metrics https://doi.org/10.1109/TVCG.2020.3030352
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
StackGenVis/frontend/node_modules/vue-numeric/test/specs/vue-numeric.spec.js

289 lines
10 KiB

4 years ago
/* eslint-env mocha */
import Vue from 'vue'
import { expect } from 'chai'
import { mount } from 'avoriaz'
import VueNumeric from '@/vue-numeric'
import sinon from 'sinon'
describe('vue-numeric.vue', () => {
it('Use default decimal separator', () => {
const wrapper = mount(VueNumeric, { propsData: { value: 2000 }})
expect(wrapper.data().amount).to.equal('2,000')
})
it('format values with currency prefix', () => {
const wrapper = mount(VueNumeric, { propsData: { value: 2000, currency: 'USD' }})
expect(wrapper.data().amount).to.equal('USD 2,000')
})
it('format values with currency suffix', () => {
const wrapper = mount(VueNumeric, { propsData: { value: 2000, currency: 'CZK', currencySymbolPosition: 'suffix' }})
expect(wrapper.data().amount).to.equal('2,000 CZK')
})
it('format values with decimals', () => {
const wrapper = mount(VueNumeric, { propsData: { value: 2000.34, precision: 2, currency: '$' }})
expect(wrapper.data().amount).to.equal('$ 2,000.34')
})
it('format values with decimals even when no decimal specified', () => {
const wrapper = mount(VueNumeric, { propsData: { value: 2000, precision: 2, currency: '$' }})
expect(wrapper.data().amount).to.equal('$ 2,000.00')
})
it('format values with decimals rounded', () => {
const wrapper = mount(VueNumeric, { propsData: { value: 2000.36, precision: 1, currency: '$' }})
expect(wrapper.data().amount).to.equal('$ 2,000.4')
})
it('format values with . separator', () => {
const wrapper = mount(VueNumeric, { propsData: { value: 2000000, currency: '$', separator: '.', precision: 2 }})
expect(wrapper.data().amount).to.equal('$ 2.000.000,00')
})
it('format values with , separator', () => {
const wrapper = mount(VueNumeric, { propsData: { value: 2000000, currency: '$', separator: ',', precision: 2 }})
expect(wrapper.data().amount).to.equal('$ 2,000,000.00')
})
it('format values with space separator', () => {
const wrapper = mount(VueNumeric, { propsData: { value: 2000000, currency: '$', separator: 'space', precision: 2 }})
expect(wrapper.data().amount).to.equal('$ 2 000 000,00')
})
it('format values with correct decimals symbol when using different thousand separator', () => {
const wrapper = mount(VueNumeric, { propsData: { value: 20000.36, precision: 1, currency: '$', separator: '.' }})
expect(wrapper.data().amount).to.equal('$ 20.000,4')
})
it('outputs Number type by default', () => {
const component = Vue.extend({
data: () => ({ total: 100 }),
template: '<div><vue-numeric v-model="total" :min="1" :max="100"></vue-numeric></div>',
components: { VueNumeric }
})
const wrapper = mount(component)
expect(typeof wrapper.data().total).to.equal('number')
})
it('outputs String if specified', () => {
const component = Vue.extend({
data: () => ({ total: 100 }),
template: '<div><vue-numeric v-model="total" outputType="String" :min="1" :max="100"></vue-numeric></div>',
components: { VueNumeric }
})
const wrapper = mount(component)
expect(typeof wrapper.data().total).to.equal('string')
})
it('is <span> tag in read-only mode', () => {
const wrapper = mount(VueNumeric, { propsData: { value: 2000, currency: '$', readOnly: true, readOnlyClass: 'test-class' }})
wrapper.update()
expect(wrapper.is('span')).to.equal(true)
expect(wrapper.hasClass('test-class')).to.equal(true)
expect(wrapper.text()).is.equal('$ 2,000')
})
it('apply class when read-only mode enabled', done => {
const propsData = { value: 3000, readOnly: false, readOnlyClass: 'testclass' }
const wrapper = mount(VueNumeric, { propsData })
wrapper.setProps({ readOnly: true })
wrapper.instance().$nextTick(() => {
expect(wrapper.instance().$el.className).to.equal('testclass')
done()
})
})
it('does not apply class when read-only mode disabled', done => {
const propsData = { value: 3000, readOnly: true, readOnlyClass: 'testclass' }
const wrapper = mount(VueNumeric, { propsData })
wrapper.setProps({ readOnly: false })
wrapper.instance().$nextTick(() => {
expect(wrapper.instance().$el.className).to.equal('')
done()
})
})
it('cannot exceed max props', () => {
const component = Vue.extend({
data: () => ({ total: 150 }),
template: '<div><vue-numeric v-model="total" :max="100"></vue-numeric></div>',
components: { VueNumeric }
})
const wrapper = mount(component)
expect(wrapper.data().total).to.equal(100)
})
it('cannot below min props', () => {
const component = Vue.extend({
data: () => ({ total: 150 }),
template: '<div><vue-numeric v-model="total" :min="200"></vue-numeric></div>',
components: { VueNumeric }
})
const wrapper = mount(component)
expect(wrapper.data().total).to.equal(200)
})
it('process valid value ', () => {
const component = Vue.extend({
data: () => ({ total: 100 }),
template: '<div><vue-numeric v-model="total" :min="10" :max="200"></vue-numeric></div>',
components: { VueNumeric }
})
const wrapper = mount(component)
expect(wrapper.data().total).to.equal(100)
})
it('allow minus value when minus props is true', () => {
const component = Vue.extend({
data: () => ({ total: -150 }),
template: '<div><vue-numeric v-model="total" :min="-150" :minus="true"></vue-numeric></div>',
components: { VueNumeric }
})
const wrapper = mount(component)
expect(wrapper.data().total).to.equal(-150)
})
it('disallow minus value when minus props is false', () => {
const component = Vue.extend({
data: () => ({ total: -150 }),
template: '<div><vue-numeric v-model="total" :min="-150" :minus="false"></vue-numeric></div>',
components: { VueNumeric }
})
const wrapper = mount(component)
expect(wrapper.data().total).to.equal(0)
})
it('updates delayed value with format if without focus', done => {
const el = document.createElement('div')
const vm = new Vue({
el,
data: () => ({ total: 0 }),
template: '<div><vue-numeric v-model="total"></vue-numeric></div>',
components: { VueNumeric }
}).$mount()
setTimeout(() => {
vm.total = 3000
}, 100);
setTimeout(() => {
expect(vm.$el.firstChild.value.trim()).to.equal('3,000')
done()
}, 500);
})
it('remove space if currency props undefined', () => {
const wrapper = mount(VueNumeric, {propsData: { value: 2000 }})
expect(wrapper.data().amount).to.equal('2,000')
})
it('format value on blur', () => {
const wrapper = mount(VueNumeric, {propsData: { value: 2000 }})
wrapper.trigger('blur')
expect(wrapper.data().amount).to.equal('2,000')
})
it('clear the field if zero value', () => {
const wrapper = mount(VueNumeric, {propsData: { value: 0, separator: '.', precision: 2 }})
wrapper.trigger('focus')
expect(wrapper.data().amount).to.equal(null)
})
it('remove thousand separator and symbol on focus with , decimal', () => {
const wrapper = mount(VueNumeric, {propsData: { value: 2000.21, separator: '.', precision: 2 }})
wrapper.trigger('focus')
expect(wrapper.data().amount).to.equal('2000,21')
})
it('remove thousand separator and symbol on focus with . decimal', () => {
const wrapper = mount(VueNumeric, {propsData: { value: 2000.21, separator: ',', precision: 2 }})
wrapper.trigger('focus')
expect(wrapper.data().amount).to.equal('2000.21')
})
it('process value on input', () => {
const process = sinon.stub()
const wrapper = mount(VueNumeric, { propsData: { value: 2000 }, methods: { process }})
wrapper.trigger('input')
expect(process.called).to.equal(true)
})
it('does not show default value when placeholder if defined', () => {
const wrapper = mount(VueNumeric, { propsData: { value: 2000, placeholder: 'number here' }})
expect(wrapper.data().amount).to.equal('')
})
it('sets the value to 0 when no empty value is provided and input is empty', () => {
const wrapper = mount(VueNumeric, { propsData: { value: '' }})
expect(wrapper.data().amount).to.equal('0')
})
it('uses the provided empty value when input is empty', () => {
const wrapper = mount(VueNumeric, { propsData: { value: '', emptyValue: 1 }})
expect(wrapper.data().amount).to.equal('1')
})
it('apply min props value if user input negative value when minus props disabled', () => {
const component = Vue.extend({
data: () => ({ total: -200 }),
template: '<div><vue-numeric v-model="total" :min="150" :minus="false"></vue-numeric></div>',
components: { VueNumeric }
})
const wrapper = mount(component)
expect(wrapper.data().total).to.equal(150)
})
it('apply 0 value if user input negative value when minus props disabled and min props is negative too', () => {
const component = Vue.extend({
data: () => ({ total: -200 }),
template: '<div><vue-numeric v-model="total" :min="-150" :minus="false"></vue-numeric></div>',
components: { VueNumeric }
})
const wrapper = mount(component)
expect(wrapper.data().total).to.equal(0)
})
it('apply new separator immediately if it is changed', () => {
const wrapper = mount(VueNumeric, { propsData: { value: 2000, separator: ',' }})
wrapper.setProps({ separator: '.' })
expect(wrapper.data().amount).to.equal('2.000')
})
it('apply new currency prop immediately if it is changed', () => {
const wrapper = mount(VueNumeric, { propsData: { value: 0, currency: '$' }})
wrapper.setProps({ currency: 'USD' })
expect(wrapper.data().amount).to.equal('USD 0')
})
it('apply new precision immediately if it is changed', () => {
const wrapper = mount(VueNumeric, { propsData: { value: 2000.17, precision: 2 }})
wrapper.setProps({ precision: 1 })
expect(wrapper.data().amount).to.equal('2,000.2')
})
it('allow to use arbitrary separators', () => {
const wrapper = mount(VueNumeric, {
propsData: {
value: 1000.94 ,
precision: 2,
thousandSeparator: ' ',
decimalSeparator: ','
}
})
expect(wrapper.data().amount).to.equal('1 000,94')
})
})