diff --git a/browser_tests/fixtures/VueNodeHelpers.ts b/browser_tests/fixtures/VueNodeHelpers.ts index e08b39bd7..6c84af9cd 100644 --- a/browser_tests/fixtures/VueNodeHelpers.ts +++ b/browser_tests/fixtures/VueNodeHelpers.ts @@ -159,8 +159,8 @@ export class VueNodeHelpers { getInputNumberControls(widget: Locator) { return { input: widget.locator('input'), - incrementButton: widget.locator('button').first(), - decrementButton: widget.locator('button').nth(1) + decrementButton: widget.getByTestId('decrement'), + incrementButton: widget.getByTestId('increment') } } } diff --git a/browser_tests/tests/mobileBaseline.spec.ts-snapshots/mobile-settings-dialog-mobile-chrome-linux.png b/browser_tests/tests/mobileBaseline.spec.ts-snapshots/mobile-settings-dialog-mobile-chrome-linux.png index 207d037bf..c179d1c75 100644 Binary files a/browser_tests/tests/mobileBaseline.spec.ts-snapshots/mobile-settings-dialog-mobile-chrome-linux.png and b/browser_tests/tests/mobileBaseline.spec.ts-snapshots/mobile-settings-dialog-mobile-chrome-linux.png differ diff --git a/browser_tests/tests/vueNodes/groups/groups.spec.ts-snapshots/vue-groups-create-group-chromium-linux.png b/browser_tests/tests/vueNodes/groups/groups.spec.ts-snapshots/vue-groups-create-group-chromium-linux.png index 98db3de78..0dcab673a 100644 Binary files a/browser_tests/tests/vueNodes/groups/groups.spec.ts-snapshots/vue-groups-create-group-chromium-linux.png and b/browser_tests/tests/vueNodes/groups/groups.spec.ts-snapshots/vue-groups-create-group-chromium-linux.png differ diff --git a/browser_tests/tests/vueNodes/groups/groups.spec.ts-snapshots/vue-groups-fit-to-contents-chromium-linux.png b/browser_tests/tests/vueNodes/groups/groups.spec.ts-snapshots/vue-groups-fit-to-contents-chromium-linux.png index b83a4ed59..7ac84c627 100644 Binary files a/browser_tests/tests/vueNodes/groups/groups.spec.ts-snapshots/vue-groups-fit-to-contents-chromium-linux.png and b/browser_tests/tests/vueNodes/groups/groups.spec.ts-snapshots/vue-groups-fit-to-contents-chromium-linux.png differ diff --git a/browser_tests/tests/vueNodes/interactions/canvas/zoom.spec.ts-snapshots/zoomed-in-ctrl-shift-chromium-linux.png b/browser_tests/tests/vueNodes/interactions/canvas/zoom.spec.ts-snapshots/zoomed-in-ctrl-shift-chromium-linux.png index f30ba7467..a642edb35 100644 Binary files a/browser_tests/tests/vueNodes/interactions/canvas/zoom.spec.ts-snapshots/zoomed-in-ctrl-shift-chromium-linux.png and b/browser_tests/tests/vueNodes/interactions/canvas/zoom.spec.ts-snapshots/zoomed-in-ctrl-shift-chromium-linux.png differ diff --git a/browser_tests/tests/vueNodes/interactions/links/linkInteraction.spec.ts-snapshots/vue-node-dragging-link-chromium-linux.png b/browser_tests/tests/vueNodes/interactions/links/linkInteraction.spec.ts-snapshots/vue-node-dragging-link-chromium-linux.png index 8c0051b30..01d5994ad 100644 Binary files a/browser_tests/tests/vueNodes/interactions/links/linkInteraction.spec.ts-snapshots/vue-node-dragging-link-chromium-linux.png and b/browser_tests/tests/vueNodes/interactions/links/linkInteraction.spec.ts-snapshots/vue-node-dragging-link-chromium-linux.png differ diff --git a/browser_tests/tests/vueNodes/interactions/links/linkInteraction.spec.ts-snapshots/vue-node-input-drag-ctrl-alt-chromium-linux.png b/browser_tests/tests/vueNodes/interactions/links/linkInteraction.spec.ts-snapshots/vue-node-input-drag-ctrl-alt-chromium-linux.png index 3f07068c9..2e52a3827 100644 Binary files a/browser_tests/tests/vueNodes/interactions/links/linkInteraction.spec.ts-snapshots/vue-node-input-drag-ctrl-alt-chromium-linux.png and b/browser_tests/tests/vueNodes/interactions/links/linkInteraction.spec.ts-snapshots/vue-node-input-drag-ctrl-alt-chromium-linux.png differ diff --git a/browser_tests/tests/vueNodes/interactions/links/linkInteraction.spec.ts-snapshots/vue-node-input-drag-reuses-origin-chromium-linux.png b/browser_tests/tests/vueNodes/interactions/links/linkInteraction.spec.ts-snapshots/vue-node-input-drag-reuses-origin-chromium-linux.png index 2085c39b3..f637fce10 100644 Binary files a/browser_tests/tests/vueNodes/interactions/links/linkInteraction.spec.ts-snapshots/vue-node-input-drag-reuses-origin-chromium-linux.png and b/browser_tests/tests/vueNodes/interactions/links/linkInteraction.spec.ts-snapshots/vue-node-input-drag-reuses-origin-chromium-linux.png differ diff --git a/browser_tests/tests/vueNodes/interactions/links/linkInteraction.spec.ts-snapshots/vue-node-reroute-input-drag-chromium-linux.png b/browser_tests/tests/vueNodes/interactions/links/linkInteraction.spec.ts-snapshots/vue-node-reroute-input-drag-chromium-linux.png index a2332e2d4..78ddf2836 100644 Binary files a/browser_tests/tests/vueNodes/interactions/links/linkInteraction.spec.ts-snapshots/vue-node-reroute-input-drag-chromium-linux.png and b/browser_tests/tests/vueNodes/interactions/links/linkInteraction.spec.ts-snapshots/vue-node-reroute-input-drag-chromium-linux.png differ diff --git a/browser_tests/tests/vueNodes/interactions/links/linkInteraction.spec.ts-snapshots/vue-node-reroute-output-shift-drag-chromium-linux.png b/browser_tests/tests/vueNodes/interactions/links/linkInteraction.spec.ts-snapshots/vue-node-reroute-output-shift-drag-chromium-linux.png index ed84d08be..804e16c0d 100644 Binary files a/browser_tests/tests/vueNodes/interactions/links/linkInteraction.spec.ts-snapshots/vue-node-reroute-output-shift-drag-chromium-linux.png and b/browser_tests/tests/vueNodes/interactions/links/linkInteraction.spec.ts-snapshots/vue-node-reroute-output-shift-drag-chromium-linux.png differ diff --git a/browser_tests/tests/vueNodes/interactions/links/linkInteraction.spec.ts-snapshots/vue-node-shift-output-multi-link-chromium-linux.png b/browser_tests/tests/vueNodes/interactions/links/linkInteraction.spec.ts-snapshots/vue-node-shift-output-multi-link-chromium-linux.png index a43c024dd..51ff6727b 100644 Binary files a/browser_tests/tests/vueNodes/interactions/links/linkInteraction.spec.ts-snapshots/vue-node-shift-output-multi-link-chromium-linux.png and b/browser_tests/tests/vueNodes/interactions/links/linkInteraction.spec.ts-snapshots/vue-node-shift-output-multi-link-chromium-linux.png differ diff --git a/browser_tests/tests/vueNodes/interactions/links/linkInteraction.spec.ts-snapshots/vue-node-snap-to-node-chromium-linux.png b/browser_tests/tests/vueNodes/interactions/links/linkInteraction.spec.ts-snapshots/vue-node-snap-to-node-chromium-linux.png index a9221a404..a8645017b 100644 Binary files a/browser_tests/tests/vueNodes/interactions/links/linkInteraction.spec.ts-snapshots/vue-node-snap-to-node-chromium-linux.png and b/browser_tests/tests/vueNodes/interactions/links/linkInteraction.spec.ts-snapshots/vue-node-snap-to-node-chromium-linux.png differ diff --git a/browser_tests/tests/vueNodes/interactions/links/linkInteraction.spec.ts-snapshots/vue-node-snap-to-slot-chromium-linux.png b/browser_tests/tests/vueNodes/interactions/links/linkInteraction.spec.ts-snapshots/vue-node-snap-to-slot-chromium-linux.png index 63a8c81d7..2a29eb590 100644 Binary files a/browser_tests/tests/vueNodes/interactions/links/linkInteraction.spec.ts-snapshots/vue-node-snap-to-slot-chromium-linux.png and b/browser_tests/tests/vueNodes/interactions/links/linkInteraction.spec.ts-snapshots/vue-node-snap-to-slot-chromium-linux.png differ diff --git a/browser_tests/tests/vueNodes/interactions/node/bringToFront.spec.ts-snapshots/bring-to-front-overlapped-after-chromium-linux.png b/browser_tests/tests/vueNodes/interactions/node/bringToFront.spec.ts-snapshots/bring-to-front-overlapped-after-chromium-linux.png index 783f0dc0c..8ccc65f98 100644 Binary files a/browser_tests/tests/vueNodes/interactions/node/bringToFront.spec.ts-snapshots/bring-to-front-overlapped-after-chromium-linux.png and b/browser_tests/tests/vueNodes/interactions/node/bringToFront.spec.ts-snapshots/bring-to-front-overlapped-after-chromium-linux.png differ diff --git a/browser_tests/tests/vueNodes/interactions/node/bringToFront.spec.ts-snapshots/bring-to-front-overlapped-before-chromium-linux.png b/browser_tests/tests/vueNodes/interactions/node/bringToFront.spec.ts-snapshots/bring-to-front-overlapped-before-chromium-linux.png index 8610dab8b..434c540e1 100644 Binary files a/browser_tests/tests/vueNodes/interactions/node/bringToFront.spec.ts-snapshots/bring-to-front-overlapped-before-chromium-linux.png and b/browser_tests/tests/vueNodes/interactions/node/bringToFront.spec.ts-snapshots/bring-to-front-overlapped-before-chromium-linux.png differ diff --git a/browser_tests/tests/vueNodes/interactions/node/bringToFront.spec.ts-snapshots/bring-to-front-widget-overlapped-after-chromium-linux.png b/browser_tests/tests/vueNodes/interactions/node/bringToFront.spec.ts-snapshots/bring-to-front-widget-overlapped-after-chromium-linux.png index c4d5979d0..6dc2d6637 100644 Binary files a/browser_tests/tests/vueNodes/interactions/node/bringToFront.spec.ts-snapshots/bring-to-front-widget-overlapped-after-chromium-linux.png and b/browser_tests/tests/vueNodes/interactions/node/bringToFront.spec.ts-snapshots/bring-to-front-widget-overlapped-after-chromium-linux.png differ diff --git a/browser_tests/tests/vueNodes/interactions/node/bringToFront.spec.ts-snapshots/bring-to-front-widget-overlapped-before-chromium-linux.png b/browser_tests/tests/vueNodes/interactions/node/bringToFront.spec.ts-snapshots/bring-to-front-widget-overlapped-before-chromium-linux.png index d43f10dde..1fec6b259 100644 Binary files a/browser_tests/tests/vueNodes/interactions/node/bringToFront.spec.ts-snapshots/bring-to-front-widget-overlapped-before-chromium-linux.png and b/browser_tests/tests/vueNodes/interactions/node/bringToFront.spec.ts-snapshots/bring-to-front-widget-overlapped-before-chromium-linux.png differ diff --git a/browser_tests/tests/vueNodes/interactions/node/move.spec.ts-snapshots/vue-node-moved-node-chromium-linux.png b/browser_tests/tests/vueNodes/interactions/node/move.spec.ts-snapshots/vue-node-moved-node-chromium-linux.png index 2cc234ffb..06d0e7c84 100644 Binary files a/browser_tests/tests/vueNodes/interactions/node/move.spec.ts-snapshots/vue-node-moved-node-chromium-linux.png and b/browser_tests/tests/vueNodes/interactions/node/move.spec.ts-snapshots/vue-node-moved-node-chromium-linux.png differ diff --git a/browser_tests/tests/vueNodes/nodeStates/bypass.spec.ts-snapshots/vue-node-bypassed-state-chromium-linux.png b/browser_tests/tests/vueNodes/nodeStates/bypass.spec.ts-snapshots/vue-node-bypassed-state-chromium-linux.png index 658ab5340..8fe5cd25b 100644 Binary files a/browser_tests/tests/vueNodes/nodeStates/bypass.spec.ts-snapshots/vue-node-bypassed-state-chromium-linux.png and b/browser_tests/tests/vueNodes/nodeStates/bypass.spec.ts-snapshots/vue-node-bypassed-state-chromium-linux.png differ diff --git a/browser_tests/tests/vueNodes/nodeStates/colors.spec.ts-snapshots/vue-node-custom-color-blue-chromium-linux.png b/browser_tests/tests/vueNodes/nodeStates/colors.spec.ts-snapshots/vue-node-custom-color-blue-chromium-linux.png index cfb61ef10..44c99675b 100644 Binary files a/browser_tests/tests/vueNodes/nodeStates/colors.spec.ts-snapshots/vue-node-custom-color-blue-chromium-linux.png and b/browser_tests/tests/vueNodes/nodeStates/colors.spec.ts-snapshots/vue-node-custom-color-blue-chromium-linux.png differ diff --git a/browser_tests/tests/vueNodes/nodeStates/colors.spec.ts-snapshots/vue-node-custom-colors-dark-all-colors-chromium-linux.png b/browser_tests/tests/vueNodes/nodeStates/colors.spec.ts-snapshots/vue-node-custom-colors-dark-all-colors-chromium-linux.png index 1e3fd5359..04790555d 100644 Binary files a/browser_tests/tests/vueNodes/nodeStates/colors.spec.ts-snapshots/vue-node-custom-colors-dark-all-colors-chromium-linux.png and b/browser_tests/tests/vueNodes/nodeStates/colors.spec.ts-snapshots/vue-node-custom-colors-dark-all-colors-chromium-linux.png differ diff --git a/browser_tests/tests/vueNodes/nodeStates/colors.spec.ts-snapshots/vue-node-custom-colors-light-all-colors-chromium-linux.png b/browser_tests/tests/vueNodes/nodeStates/colors.spec.ts-snapshots/vue-node-custom-colors-light-all-colors-chromium-linux.png index 880c63eca..759e50ca7 100644 Binary files a/browser_tests/tests/vueNodes/nodeStates/colors.spec.ts-snapshots/vue-node-custom-colors-light-all-colors-chromium-linux.png and b/browser_tests/tests/vueNodes/nodeStates/colors.spec.ts-snapshots/vue-node-custom-colors-light-all-colors-chromium-linux.png differ diff --git a/browser_tests/tests/vueNodes/nodeStates/mute.spec.ts-snapshots/vue-node-muted-state-chromium-linux.png b/browser_tests/tests/vueNodes/nodeStates/mute.spec.ts-snapshots/vue-node-muted-state-chromium-linux.png index b18d31a89..89194527f 100644 Binary files a/browser_tests/tests/vueNodes/nodeStates/mute.spec.ts-snapshots/vue-node-muted-state-chromium-linux.png and b/browser_tests/tests/vueNodes/nodeStates/mute.spec.ts-snapshots/vue-node-muted-state-chromium-linux.png differ diff --git a/src/lib/litegraph/src/utils/widget.ts b/src/lib/litegraph/src/utils/widget.ts index e5d736901..8c61d7605 100644 --- a/src/lib/litegraph/src/utils/widget.ts +++ b/src/lib/litegraph/src/utils/widget.ts @@ -8,3 +8,18 @@ import type { IWidgetOptions } from '@/lib/litegraph/src/types/widgets' export function getWidgetStep(options: IWidgetOptions): number { return options.step2 || (options.step || 10) * 0.1 } + +export function evaluateInput(input: string): number | undefined { + // Check if v is a valid equation or a number + if (/^[\d\s.()*+/-]+$/.test(input)) { + // Solve the equation if possible + try { + input = eval(input) + } catch { + // Ignore eval errors + } + } + const newValue = Number(input) + if (isNaN(newValue)) return undefined + return newValue +} diff --git a/src/lib/litegraph/src/widgets/NumberWidget.ts b/src/lib/litegraph/src/widgets/NumberWidget.ts index 294bbb0b0..c142d8b4d 100644 --- a/src/lib/litegraph/src/widgets/NumberWidget.ts +++ b/src/lib/litegraph/src/widgets/NumberWidget.ts @@ -1,5 +1,5 @@ import type { INumericWidget } from '@/lib/litegraph/src/types/widgets' -import { getWidgetStep } from '@/lib/litegraph/src/utils/widget' +import { evaluateInput, getWidgetStep } from '@/lib/litegraph/src/utils/widget' import { BaseSteppedWidget } from './BaseSteppedWidget' import type { WidgetEventOptions } from './BaseWidget' @@ -68,19 +68,8 @@ export class NumberWidget 'Value', this.value, (v: string) => { - // Check if v is a valid equation or a number - if (/^[\d\s()*+/-]+|\d+\.\d+$/.test(v)) { - // Solve the equation if possible - try { - v = eval(v) - } catch { - // Ignore eval errors - } - } - const newValue = Number(v) - if (!isNaN(newValue)) { - this.setValue(newValue, { e, node, canvas }) - } + const parsed = evaluateInput(v) + if (parsed !== undefined) this.setValue(parsed, { e, node, canvas }) }, e ) diff --git a/src/renderer/extensions/vueNodes/widgets/components/WidgetInputNumberInput.test.ts b/src/renderer/extensions/vueNodes/widgets/components/WidgetInputNumberInput.test.ts index 6fbadb517..7eb3890bc 100644 --- a/src/renderer/extensions/vueNodes/widgets/components/WidgetInputNumberInput.test.ts +++ b/src/renderer/extensions/vueNodes/widgets/components/WidgetInputNumberInput.test.ts @@ -1,12 +1,16 @@ -import { mount } from '@vue/test-utils' -import PrimeVue from 'primevue/config' -import InputNumber from 'primevue/inputnumber' import { describe, expect, it } from 'vitest' +import { mount } from '@vue/test-utils' +import { createI18n } from 'vue-i18n' import type { SimplifiedWidget } from '@/types/simplifiedWidget' import WidgetInputNumberInput from './WidgetInputNumberInput.vue' +const i18n = createI18n({ + legacy: false, + locale: 'en' +}) + function createMockWidget( value: number = 0, type: 'int' | 'float' = 'int', @@ -24,10 +28,7 @@ function createMockWidget( function mountComponent(widget: SimplifiedWidget, modelValue: number) { return mount(WidgetInputNumberInput, { - global: { - plugins: [PrimeVue], - components: { InputNumber } - }, + global: { plugins: [i18n] }, props: { widget, modelValue @@ -36,7 +37,7 @@ function mountComponent(widget: SimplifiedWidget, modelValue: number) { } function getNumberInput(wrapper: ReturnType) { - const input = wrapper.get('input[inputmode="numeric"]') + const input = wrapper.get('input[inputmode="decimal"]') return input.element } @@ -53,7 +54,7 @@ describe('WidgetInputNumberInput Value Binding', () => { const widget = createMockWidget(10, 'int') const wrapper = mountComponent(widget, 10) - const inputNumber = wrapper.findComponent(InputNumber) + const inputNumber = wrapper await inputNumber.vm.$emit('update:modelValue', 20) const emitted = wrapper.emitted('update:modelValue') @@ -78,75 +79,6 @@ describe('WidgetInputNumberInput Value Binding', () => { }) }) -describe('WidgetInputNumberInput Component Rendering', () => { - it('renders InputNumber component with show-buttons', () => { - const widget = createMockWidget(5, 'int') - const wrapper = mountComponent(widget, 5) - - const inputNumber = wrapper.findComponent(InputNumber) - expect(inputNumber.exists()).toBe(true) - expect(inputNumber.props('showButtons')).toBe(true) - }) - - it('sets button layout to horizontal', () => { - const widget = createMockWidget(5, 'int') - const wrapper = mountComponent(widget, 5) - - const inputNumber = wrapper.findComponent(InputNumber) - expect(inputNumber.props('buttonLayout')).toBe('horizontal') - }) - - it('sets size to small', () => { - const widget = createMockWidget(5, 'int') - const wrapper = mountComponent(widget, 5) - - const inputNumber = wrapper.findComponent(InputNumber) - expect(inputNumber.props('size')).toBe('small') - }) -}) - -describe('WidgetInputNumberInput Step Value', () => { - it('defaults to 0 for unrestricted stepping', () => { - const widget = createMockWidget(5, 'int') - const wrapper = mountComponent(widget, 5) - - const inputNumber = wrapper.findComponent(InputNumber) - expect(inputNumber.props('step')).toBe(0) - }) - - it('uses step2 value when provided', () => { - const widget = createMockWidget(5, 'int', { step2: 0.5 }) - const wrapper = mountComponent(widget, 5) - - const inputNumber = wrapper.findComponent(InputNumber) - expect(inputNumber.props('step')).toBe(0.5) - }) - - it('calculates step from precision for precision 0', () => { - const widget = createMockWidget(5, 'int', { precision: 0 }) - const wrapper = mountComponent(widget, 5) - - const inputNumber = wrapper.findComponent(InputNumber) - expect(inputNumber.props('step')).toBe(1) - }) - - it('calculates step from precision for precision 1', () => { - const widget = createMockWidget(5, 'float', { precision: 1 }) - const wrapper = mountComponent(widget, 5) - - const inputNumber = wrapper.findComponent(InputNumber) - expect(inputNumber.props('step')).toBe(0.1) - }) - - it('calculates step from precision for precision 2', () => { - const widget = createMockWidget(5, 'float', { precision: 2 }) - const wrapper = mountComponent(widget, 5) - - const inputNumber = wrapper.findComponent(InputNumber) - expect(inputNumber.props('step')).toBe(0.01) - }) -}) - describe('WidgetInputNumberInput Grouping Behavior', () => { it('displays numbers without commas by default for int widgets', () => { const widget = createMockWidget(1000, 'int') @@ -202,24 +134,21 @@ describe('WidgetInputNumberInput Large Integer Precision Handling', () => { const widget = createMockWidget(1000, 'int') const wrapper = mountComponent(widget, 1000) - const inputNumber = wrapper.findComponent(InputNumber) - expect(inputNumber.props('showButtons')).toBe(true) + expect(wrapper.findAll('button').length).toBe(2) }) it('shows buttons for values at safe integer limit', () => { const widget = createMockWidget(SAFE_INTEGER_MAX, 'int') const wrapper = mountComponent(widget, SAFE_INTEGER_MAX) - const inputNumber = wrapper.findComponent(InputNumber) - expect(inputNumber.props('showButtons')).toBe(true) + expect(wrapper.findAll('button').length).toBe(2) }) it('hides buttons for unsafe large integer values', () => { const widget = createMockWidget(UNSAFE_LARGE_INTEGER, 'int') const wrapper = mountComponent(widget, UNSAFE_LARGE_INTEGER) - const inputNumber = wrapper.findComponent(InputNumber) - expect(inputNumber.props('showButtons')).toBe(false) + expect(wrapper.findAll('button').length).toBe(0) }) it('hides buttons for unsafe negative integer values', () => { @@ -227,8 +156,7 @@ describe('WidgetInputNumberInput Large Integer Precision Handling', () => { const widget = createMockWidget(unsafeNegative, 'int') const wrapper = mountComponent(widget, unsafeNegative) - const inputNumber = wrapper.findComponent(InputNumber) - expect(inputNumber.props('showButtons')).toBe(false) + expect(wrapper.findAll('button').length).toBe(0) }) it('shows tooltip for disabled buttons due to precision limits', (context) => { @@ -250,43 +178,19 @@ describe('WidgetInputNumberInput Large Integer Precision Handling', () => { expect(tooltipDiv.attributes('v-tooltip')).toBeUndefined() }) - it('handles edge case of zero value', () => { - const widget = createMockWidget(0, 'int') - const wrapper = mountComponent(widget, 0) + it('handles floating point values correctly', () => { + const widget = createMockWidget(1000.5, 'float') + const wrapper = mountComponent(widget, 1000.5) - const inputNumber = wrapper.findComponent(InputNumber) - expect(inputNumber.props('showButtons')).toBe(true) + expect(wrapper.findAll('button').length).toBe(2) }) - it('correctly identifies safe vs unsafe integers using Number.isSafeInteger', () => { - // Test the JavaScript behavior our component relies on - expect(Number.isSafeInteger(SAFE_INTEGER_MAX)).toBe(true) - expect(Number.isSafeInteger(SAFE_INTEGER_MAX + 1)).toBe(false) - expect(Number.isSafeInteger(UNSAFE_LARGE_INTEGER)).toBe(false) - expect(Number.isSafeInteger(-SAFE_INTEGER_MAX)).toBe(true) - expect(Number.isSafeInteger(-SAFE_INTEGER_MAX - 1)).toBe(false) - }) - - it('handles floating point values correctly', (context) => { - context.skip('needs diagnosis') - - const safeFloat = 1000.5 - const widget = createMockWidget(safeFloat, 'float') - const wrapper = mountComponent(widget, safeFloat) - - const inputNumber = wrapper.findComponent(InputNumber) - expect(inputNumber.props('showButtons')).toBe(true) - }) - - it('hides buttons for unsafe floating point values', (context) => { - context.skip('needs diagnosis') - + it('hides buttons for unsafe floating point values', () => { const unsafeFloat = UNSAFE_LARGE_INTEGER + 0.5 const widget = createMockWidget(unsafeFloat, 'float') const wrapper = mountComponent(widget, unsafeFloat) - const inputNumber = wrapper.findComponent(InputNumber) - expect(inputNumber.props('showButtons')).toBe(false) + expect(wrapper.findAll('button').length).toBe(0) }) }) @@ -295,18 +199,14 @@ describe('WidgetInputNumberInput Edge Cases for Precision Handling', () => { const widget = createMockWidget(0, 'int') // Mount with undefined as modelValue const wrapper = mount(WidgetInputNumberInput, { - global: { - plugins: [PrimeVue], - components: { InputNumber } - }, + global: { plugins: [i18n] }, props: { widget, modelValue: undefined as any } }) - const inputNumber = wrapper.findComponent(InputNumber) - expect(inputNumber.props('showButtons')).toBe(true) // Should default to safe behavior + expect(wrapper.findAll('button').length).toBe(2) }) it('handles NaN values gracefully', (context) => { @@ -314,24 +214,20 @@ describe('WidgetInputNumberInput Edge Cases for Precision Handling', () => { const widget = createMockWidget(NaN, 'int') const wrapper = mountComponent(widget, NaN) - const inputNumber = wrapper.findComponent(InputNumber) - // NaN is not a safe integer, so buttons should be hidden - expect(inputNumber.props('showButtons')).toBe(false) + expect(wrapper.findAll('button').length).toBe(0) }) it('handles Infinity values', () => { const widget = createMockWidget(Infinity, 'int') const wrapper = mountComponent(widget, Infinity) - const inputNumber = wrapper.findComponent(InputNumber) - expect(inputNumber.props('showButtons')).toBe(false) + expect(wrapper.findAll('button').length).toBe(0) }) it('handles negative Infinity values', () => { const widget = createMockWidget(-Infinity, 'int') const wrapper = mountComponent(widget, -Infinity) - const inputNumber = wrapper.findComponent(InputNumber) - expect(inputNumber.props('showButtons')).toBe(false) + expect(wrapper.findAll('button').length).toBe(0) }) }) diff --git a/src/renderer/extensions/vueNodes/widgets/components/WidgetInputNumberInput.vue b/src/renderer/extensions/vueNodes/widgets/components/WidgetInputNumberInput.vue index fb6be5cb8..1add11f4a 100644 --- a/src/renderer/extensions/vueNodes/widgets/components/WidgetInputNumberInput.vue +++ b/src/renderer/extensions/vueNodes/widgets/components/WidgetInputNumberInput.vue @@ -1,7 +1,9 @@