From d5410a715dac9434bb1773ad6531506e838258e9 Mon Sep 17 00:00:00 2001 From: cliebhardt Date: Wed, 1 Apr 2026 01:34:44 +0200 Subject: [PATCH 1/2] feat: add kotlin views for optiondialogs --- .../ConfirmDialogConstructorKotlinView.kt | 28 ++++++++ .../confirm/ConfirmDialogOptionsKotlinView.kt | 44 ++++++++++++ .../FileChooserDialogBasicKotlinView.kt | 43 ++++++++++++ .../FileChooserDialogFiltersKotlinView.kt | 49 +++++++++++++ .../filesave/FileSaveDialogBasicKotlinView.kt | 35 ++++++++++ .../FileSaveDialogFiltersKotlinView.kt | 42 +++++++++++ .../FileUploadDialogBasicKotlinView.kt | 42 +++++++++++ .../input/InputDialogBasicKotlinView.kt | 70 +++++++++++++++++++ .../input/InputDialogTypeKotlinView.kt | 55 +++++++++++++++ .../message/MessageDialogTypeKotlinView.kt | 21 ++++++ 10 files changed, 429 insertions(+) create mode 100644 src/main/kotlin/com/webforj/samples/views/optiondialog/confirm/ConfirmDialogConstructorKotlinView.kt create mode 100644 src/main/kotlin/com/webforj/samples/views/optiondialog/confirm/ConfirmDialogOptionsKotlinView.kt create mode 100644 src/main/kotlin/com/webforj/samples/views/optiondialog/filechooser/FileChooserDialogBasicKotlinView.kt create mode 100644 src/main/kotlin/com/webforj/samples/views/optiondialog/filechooser/FileChooserDialogFiltersKotlinView.kt create mode 100644 src/main/kotlin/com/webforj/samples/views/optiondialog/filesave/FileSaveDialogBasicKotlinView.kt create mode 100644 src/main/kotlin/com/webforj/samples/views/optiondialog/filesave/FileSaveDialogFiltersKotlinView.kt create mode 100644 src/main/kotlin/com/webforj/samples/views/optiondialog/fileupload/FileUploadDialogBasicKotlinView.kt create mode 100644 src/main/kotlin/com/webforj/samples/views/optiondialog/input/InputDialogBasicKotlinView.kt create mode 100644 src/main/kotlin/com/webforj/samples/views/optiondialog/input/InputDialogTypeKotlinView.kt create mode 100644 src/main/kotlin/com/webforj/samples/views/optiondialog/message/MessageDialogTypeKotlinView.kt diff --git a/src/main/kotlin/com/webforj/samples/views/optiondialog/confirm/ConfirmDialogConstructorKotlinView.kt b/src/main/kotlin/com/webforj/samples/views/optiondialog/confirm/ConfirmDialogConstructorKotlinView.kt new file mode 100644 index 000000000..2fc309a23 --- /dev/null +++ b/src/main/kotlin/com/webforj/samples/views/optiondialog/confirm/ConfirmDialogConstructorKotlinView.kt @@ -0,0 +1,28 @@ +package com.webforj.samples.views.optiondialog.confirm + +import com.webforj.component.Composite +import com.webforj.component.Theme +import com.webforj.component.button.ButtonTheme +import com.webforj.component.html.elements.Div +import com.webforj.component.optiondialog.ConfirmDialog +import com.webforj.router.annotation.FrameTitle +import com.webforj.router.annotation.Route + +@Route +@FrameTitle("Confirm Dialog Constructor") +class ConfirmDialogConstructorKotlinView: Composite
() { + + init { + ConfirmDialog( + "Are you sure you want to delete this file? This action cannot be reverted.", + "Deletion", + ConfirmDialog.OptionType.OK_CANCEL, + // MessageType.QUESTION + ).apply { + theme = Theme.DANGER + setButtonTheme(ConfirmDialog.Button.FIRST, ButtonTheme.DANGER) + setButtonTheme(ConfirmDialog.Button.SECOND, ButtonTheme.OUTLINED_GRAY) + show() + } + } +} diff --git a/src/main/kotlin/com/webforj/samples/views/optiondialog/confirm/ConfirmDialogOptionsKotlinView.kt b/src/main/kotlin/com/webforj/samples/views/optiondialog/confirm/ConfirmDialogOptionsKotlinView.kt new file mode 100644 index 000000000..71a9b674d --- /dev/null +++ b/src/main/kotlin/com/webforj/samples/views/optiondialog/confirm/ConfirmDialogOptionsKotlinView.kt @@ -0,0 +1,44 @@ +package com.webforj.samples.views.optiondialog.confirm + +import com.webforj.component.Composite +import com.webforj.component.button.ButtonTheme +import com.webforj.component.html.elements.Div +import com.webforj.component.optiondialog.ConfirmDialog +import com.webforj.component.optiondialog.OptionDialog +import com.webforj.router.annotation.FrameTitle +import com.webforj.router.annotation.Route + +@Route +@FrameTitle("Confirm Dialog Options") +class ConfirmDialogOptionsKotlinView: Composite
() { + private val dialog: ConfirmDialog + + init { + dialog = ConfirmDialog( + "There are unsaved changes. Do you want to discard or save them?", + "Unsaved changes", + ConfirmDialog.OptionType.CUSTOM, + // MessageType.WARNING + ).apply { + firstButtonText = "Discard" + setFirstButtonTheme(ButtonTheme.WARNING) + secondButtonText = "Save" + setSecondButtonTheme(ButtonTheme.OUTLINED_GRAY) + } + show() + } + + private fun show() { + val result = dialog.show() + + val (message, title, buttonText) = if (result == ConfirmDialog.Result.FIRST_CUSTOM_BUTTON) { + listOf("Changes discarded", "Discarded", "Got it") + } else { + listOf("Changes saved", "Saved", "Got it") + } + + OptionDialog.showMessageDialog(message, title, buttonText) + show() + } + +} diff --git a/src/main/kotlin/com/webforj/samples/views/optiondialog/filechooser/FileChooserDialogBasicKotlinView.kt b/src/main/kotlin/com/webforj/samples/views/optiondialog/filechooser/FileChooserDialogBasicKotlinView.kt new file mode 100644 index 000000000..54480e5c4 --- /dev/null +++ b/src/main/kotlin/com/webforj/samples/views/optiondialog/filechooser/FileChooserDialogBasicKotlinView.kt @@ -0,0 +1,43 @@ +package com.webforj.samples.views.optiondialog.filechooser + +import com.webforj.component.Composite +import com.webforj.component.html.elements.Div +import com.webforj.component.optiondialog.FileChooserDialog +import com.webforj.component.optiondialog.OptionDialog +import com.webforj.router.annotation.FrameTitle +import com.webforj.router.annotation.Route + +@Route +@FrameTitle("File Chooser Basics") +class FileChooserDialogBasicKotlinView: Composite
() { + private val dialog: FileChooserDialog + + init { + dialog = FileChooserDialog( + "Choose Directory to save", + System.getProperty("filechooser-files.path"), + FileChooserDialog.SelectionMode.DIRECTORIES + ).apply { + isRestricted = true + } + + show() + } + + private fun show() { + val directory = dialog.show() + + directory?.let { + OptionDialog.showMessageDialog( + "Directory selected: $it", + "Directory Selected" + ) + } ?: OptionDialog.showMessageDialog( + "No directory selected", + "Directory Selection Failed", + // MessageType.ERROR + ) + + show() + } +} diff --git a/src/main/kotlin/com/webforj/samples/views/optiondialog/filechooser/FileChooserDialogFiltersKotlinView.kt b/src/main/kotlin/com/webforj/samples/views/optiondialog/filechooser/FileChooserDialogFiltersKotlinView.kt new file mode 100644 index 000000000..890fd3360 --- /dev/null +++ b/src/main/kotlin/com/webforj/samples/views/optiondialog/filechooser/FileChooserDialogFiltersKotlinView.kt @@ -0,0 +1,49 @@ +package com.webforj.samples.views.optiondialog.filechooser + +import com.webforj.component.Composite +import com.webforj.component.html.elements.Div +import com.webforj.component.optiondialog.FileChooserDialog +import com.webforj.component.optiondialog.FileChooserFilter +import com.webforj.component.optiondialog.OptionDialog +import com.webforj.router.annotation.FrameTitle +import com.webforj.router.annotation.Route + +@Route +@FrameTitle("File Chooser Filters") +class FileChooserDialogFiltersKotlinView: Composite
() { + private val dialog: FileChooserDialog + + init { + val filters = listOf( + FileChooserFilter("All Files", "*.*"), + FileChooserFilter("Text Files (*.txt)", "*.txt"), + FileChooserFilter("Java Files (*.java)", "*.java"), + FileChooserFilter("Image Files (*.png, *.jpg, *.jpeg)", "*.png;*.jpg;*.jpeg") + ) + + dialog = FileChooserDialog( + "Choose a file to download", + System.getProperty("filechooser-files.path"), + filters + ).apply { + isRestricted = true + isGridView = true + } + + show() + } + + private fun show() { + val file = dialog.show() + + file?.let { + OptionDialog.showMessageDialog( + "File selected: $it", "File Selected" + ) + } ?: OptionDialog.showMessageDialog( + "No file selected", + "File Selection Failed", + // MessageType.ERROR + ) + } +} diff --git a/src/main/kotlin/com/webforj/samples/views/optiondialog/filesave/FileSaveDialogBasicKotlinView.kt b/src/main/kotlin/com/webforj/samples/views/optiondialog/filesave/FileSaveDialogBasicKotlinView.kt new file mode 100644 index 000000000..b0a574278 --- /dev/null +++ b/src/main/kotlin/com/webforj/samples/views/optiondialog/filesave/FileSaveDialogBasicKotlinView.kt @@ -0,0 +1,35 @@ +package com.webforj.samples.views.optiondialog.filesave + +import com.webforj.component.Composite +import com.webforj.component.html.elements.Div +import com.webforj.component.optiondialog.FileSaveDialog +import com.webforj.component.optiondialog.MessageDialog +import com.webforj.component.optiondialog.OptionDialog +import com.webforj.router.annotation.FrameTitle +import com.webforj.router.annotation.Route + +@Route +@FrameTitle("File Save Basics") +class FileSaveDialogBasicKotlinView: Composite
() { + private val dialog: FileSaveDialog + + init { + dialog = FileSaveDialog("Save As", "/usr2/bbx/demos", "reports.xls").apply { + isRestricted = true + } + + show() + } + + private fun show() { + val path = dialog.show() + + path?.let { + OptionDialog.showMessageDialog("Saved file to: $path", "Path Selected") + } ?: OptionDialog.showMessageDialog( + "No path is selected", + "Path Selected", +// MessageDialog.MessageType.ERROR + ) + } +} diff --git a/src/main/kotlin/com/webforj/samples/views/optiondialog/filesave/FileSaveDialogFiltersKotlinView.kt b/src/main/kotlin/com/webforj/samples/views/optiondialog/filesave/FileSaveDialogFiltersKotlinView.kt new file mode 100644 index 000000000..17f52c1c8 --- /dev/null +++ b/src/main/kotlin/com/webforj/samples/views/optiondialog/filesave/FileSaveDialogFiltersKotlinView.kt @@ -0,0 +1,42 @@ +package com.webforj.samples.views.optiondialog.filesave + +import com.webforj.component.Composite +import com.webforj.component.html.elements.Div +import com.webforj.component.optiondialog.FileChooserFilter +import com.webforj.component.optiondialog.FileSaveDialog +import com.webforj.component.optiondialog.MessageDialog +import com.webforj.component.optiondialog.OptionDialog +import com.webforj.router.annotation.FrameTitle +import com.webforj.router.annotation.Route + +@Route +@FrameTitle("File Save Filters") +class FileSaveDialogFiltersKotlinView: Composite
() { + private val dialog: FileSaveDialog + + init { + val filters = listOf( + FileChooserFilter("All Files", "*.*"), + FileChooserFilter("Text Files", "*.txt"), + FileChooserFilter("CSV Files", "*.csv"), + FileChooserFilter("Excel Files", "*.xls;*.xlsx") + ) + dialog = FileSaveDialog("Save As", "/usr2/bbx/demos", "export.txt", filters).apply { + isRestricted = true + } + + show() + } + + private fun show() { + val path = dialog.show() + + path?.let { + OptionDialog.showMessageDialog("Saved file to: $path", "Path Selected") + } ?: OptionDialog.showMessageDialog( + "No path is selected", + "Path Selected", +// MessageDialog.MessageType.ERROR + ) + } +} diff --git a/src/main/kotlin/com/webforj/samples/views/optiondialog/fileupload/FileUploadDialogBasicKotlinView.kt b/src/main/kotlin/com/webforj/samples/views/optiondialog/fileupload/FileUploadDialogBasicKotlinView.kt new file mode 100644 index 000000000..62d8c9efc --- /dev/null +++ b/src/main/kotlin/com/webforj/samples/views/optiondialog/fileupload/FileUploadDialogBasicKotlinView.kt @@ -0,0 +1,42 @@ +package com.webforj.samples.views.optiondialog.fileupload + +import com.webforj.component.Composite +import com.webforj.component.html.elements.Div +import com.webforj.component.optiondialog.FileUploadDialog +import com.webforj.component.optiondialog.MessageDialog +import com.webforj.component.optiondialog.OptionDialog +import com.webforj.router.annotation.FrameTitle +import com.webforj.router.annotation.Route + +@Route +@FrameTitle("File Upload Basics") +class FileUploadDialogBasicKotlinView : Composite() { + private val dialog: FileUploadDialog + + init { + dialog = FileUploadDialog("Upload a file").apply { + isFileSystemAccess = false + } + + show() + } + + /** + * Shows the file upload dialog and handles the result. + */ + private fun show() { + val file = dialog.show() + + if (file != null) { + file.delete() + OptionDialog.showMessageDialog("File uploaded successfully", "File Uploaded") + } else { + OptionDialog.showMessageDialog( + "No file selected", + "File Selection Failed", + MessageDialog.MessageType.ERROR + ) + } + } +} + diff --git a/src/main/kotlin/com/webforj/samples/views/optiondialog/input/InputDialogBasicKotlinView.kt b/src/main/kotlin/com/webforj/samples/views/optiondialog/input/InputDialogBasicKotlinView.kt new file mode 100644 index 000000000..b30e3aff2 --- /dev/null +++ b/src/main/kotlin/com/webforj/samples/views/optiondialog/input/InputDialogBasicKotlinView.kt @@ -0,0 +1,70 @@ +package com.webforj.samples.views.optiondialog.input + +import com.webforj.component.Composite +import com.webforj.component.button.ButtonTheme +import com.webforj.component.html.elements.Div +import com.webforj.component.optiondialog.InputDialog +import com.webforj.component.optiondialog.MessageDialog +import com.webforj.component.optiondialog.OptionDialog +import com.webforj.router.annotation.FrameTitle +import com.webforj.router.annotation.Route + +@Route +@FrameTitle("Input Dialog Basics") +class InputDialogBasicKotlinView : Composite() { + init { + val message = """ + + Unexpected bad things will happen if you don't read this! + +
+ This will permanently delete the repository, wiki, issues, + comments, packages, secrets, workflow runs, and remove all collaborator associations. +

+ To confirm, type $CONFIRMATION_CODE in the box below + """.trimIndent() + + val dialog: InputDialog = InputDialog(message, "Delete Repository", /*InputDialog.MessageType.ERROR*/).apply { + messageType = InputDialog.MessageType.PLAIN + firstButtonText = "Delete Repository" + setSecondButtonTheme(ButtonTheme.OUTLINED_GRAY) + } + + var input: String? + do { + input = dialog.show() + + when (input) { + null -> { + // User cancelled + OptionDialog.showMessageDialog( + "Aborted repository deletion.", + "Repository Deletion Aborted", + MessageDialog.MessageType.ERROR + ) + } + CONFIRMATION_CODE -> { + // Correct code entered + OptionDialog.showMessageDialog( + "Repository was deleted successfully", + "Repository Deleted", + MessageDialog.MessageType.INFO + ) + } + else -> { + // Wrong code entered + OptionDialog.showMessageDialog( + "Failed to delete the repository. Code entered is incorrect", + "Repository Deletion Failed", + MessageDialog.MessageType.ERROR + ) + } + } + } while (input == null || input != CONFIRMATION_CODE) + } + + companion object { + // Confirmation code required for deletion + private const val CONFIRMATION_CODE = "7ANfB" + } +} diff --git a/src/main/kotlin/com/webforj/samples/views/optiondialog/input/InputDialogTypeKotlinView.kt b/src/main/kotlin/com/webforj/samples/views/optiondialog/input/InputDialogTypeKotlinView.kt new file mode 100644 index 000000000..16d91c398 --- /dev/null +++ b/src/main/kotlin/com/webforj/samples/views/optiondialog/input/InputDialogTypeKotlinView.kt @@ -0,0 +1,55 @@ +package com.webforj.samples.views.optiondialog.input + +import com.webforj.component.Composite +import com.webforj.component.button.ButtonTheme +import com.webforj.component.html.elements.Div +import com.webforj.component.optiondialog.InputDialog +import com.webforj.component.optiondialog.MessageDialog +import com.webforj.component.optiondialog.OptionDialog +import com.webforj.router.annotation.FrameTitle +import com.webforj.router.annotation.Route + +@Route +@FrameTitle("Input Dialog Type") +class InputDialogTypeKotlinView: Composite
() { + // Input dialog for password entry + private val dialog: InputDialog? = null + + init { + dialog = InputDialog( + "This page is restricted. Please enter your password to continue.", + "Restricted access.", + InputDialog.InputType.PASSWORD + ) + .setFirstButtonText("Continue") + .setSecondButtonText("Cancel") + .setFirstButtonTheme(ButtonTheme.PRIMARY) + + tryLogin() + } + + /** + * Attempts login by showing the password dialog. + */ + fun tryLogin() { + val result = dialog!!.show() + + if (result != null && !result.isEmpty()) { + // Access granted + OptionDialog.showMessageDialog( + "Access granted", + "Welcome", + "Got it", + MessageDialog.MessageType.INFO + ) + } else { + // Access denied - retry + OptionDialog.showMessageDialog( + "Access denied", + "Access denied", + "Try again", + MessageDialog.MessageType.ERROR + ) + } + } +} diff --git a/src/main/kotlin/com/webforj/samples/views/optiondialog/message/MessageDialogTypeKotlinView.kt b/src/main/kotlin/com/webforj/samples/views/optiondialog/message/MessageDialogTypeKotlinView.kt new file mode 100644 index 000000000..2c4e904fe --- /dev/null +++ b/src/main/kotlin/com/webforj/samples/views/optiondialog/message/MessageDialogTypeKotlinView.kt @@ -0,0 +1,21 @@ +package com.webforj.samples.views.optiondialog.message + +import com.webforj.component.Composite +import com.webforj.component.html.elements.Div +import com.webforj.component.optiondialog.MessageDialog +import com.webforj.component.optiondialog.OptionDialog +import com.webforj.router.annotation.FrameTitle +import com.webforj.router.annotation.Route + +@Route +@FrameTitle("Message Dialog Types") +class MessageDialogTypeKotlinView: Composite
() { + + init { + OptionDialog.showMessageDialog( + "Your session will expire in 5 minutes due to inactivity. Save your work now to prevent any data loss.", + "Session is expiring", + MessageDialog.MessageType.WARNING + ) + } +} From 426300092e6550bee3e2e0bf9e7936c037ae0121 Mon Sep 17 00:00:00 2001 From: cliebhardt Date: Wed, 1 Apr 2026 01:39:11 +0200 Subject: [PATCH 2/2] test: update optiondialog tests to inlucde kotlin --- .../confirm/ConfirmDialogOptionsViewIT.java | 21 +++++++++------ .../input/InputDialogBasicViewIT.java | 27 ++++++++++++------- .../input/InputDialogTypeViewIT.java | 21 +++++++++------ 3 files changed, 43 insertions(+), 26 deletions(-) diff --git a/src/test/java/com/webforj/samples/views/optiondialog/confirm/ConfirmDialogOptionsViewIT.java b/src/test/java/com/webforj/samples/views/optiondialog/confirm/ConfirmDialogOptionsViewIT.java index f83c5b408..926dbc735 100644 --- a/src/test/java/com/webforj/samples/views/optiondialog/confirm/ConfirmDialogOptionsViewIT.java +++ b/src/test/java/com/webforj/samples/views/optiondialog/confirm/ConfirmDialogOptionsViewIT.java @@ -2,23 +2,28 @@ import static com.microsoft.playwright.assertions.PlaywrightAssertions.assertThat; -import org.junit.jupiter.api.BeforeEach; -import org.junit.jupiter.api.Test; +import com.webforj.samples.pages.SupportedLanguage; +import com.webforj.samples.views.BaseTest; import com.microsoft.playwright.Locator; import com.microsoft.playwright.Page; import com.microsoft.playwright.options.AriaRole; -import com.webforj.samples.views.BaseTest; +import org.junit.jupiter.api.Test; +import org.junit.jupiter.params.ParameterizedTest; +import org.junit.jupiter.params.provider.MethodSource; public class ConfirmDialogOptionsViewIT extends BaseTest { - @BeforeEach - public void setupConfirmDialogOptionsView() { - navigateToRoute("confirmdialogoptions"); + private static final String ROUTE = "confirmdialogoptions"; + + public void setupConfirmDialogOptionsView(SupportedLanguage language) { + navigateToRoute(language.getPath(ROUTE)); } - @Test - public void testDialogConfirmationIsShownWhenDiscardButtonIsClicked() { + @ParameterizedTest + @MethodSource("provideRoutes") + public void testDialogConfirmationIsShownWhenDiscardButtonIsClicked(SupportedLanguage language) { + setupConfirmDialogOptionsView(language); Locator dialog = page.getByRole(AriaRole.DIALOG); assertThat(dialog).isVisible(); diff --git a/src/test/java/com/webforj/samples/views/optiondialog/input/InputDialogBasicViewIT.java b/src/test/java/com/webforj/samples/views/optiondialog/input/InputDialogBasicViewIT.java index b96b56668..0c2ce52e6 100644 --- a/src/test/java/com/webforj/samples/views/optiondialog/input/InputDialogBasicViewIT.java +++ b/src/test/java/com/webforj/samples/views/optiondialog/input/InputDialogBasicViewIT.java @@ -2,23 +2,28 @@ import static com.microsoft.playwright.assertions.PlaywrightAssertions.assertThat; -import org.junit.jupiter.api.BeforeEach; -import org.junit.jupiter.api.Test; +import com.webforj.samples.pages.SupportedLanguage; +import com.webforj.samples.views.BaseTest; import com.microsoft.playwright.Locator; import com.microsoft.playwright.Page; import com.microsoft.playwright.options.AriaRole; -import com.webforj.samples.views.BaseTest; +import org.junit.jupiter.api.Test; +import org.junit.jupiter.params.ParameterizedTest; +import org.junit.jupiter.params.provider.MethodSource; public class InputDialogBasicViewIT extends BaseTest { - @BeforeEach - public void setupInputDialogBasicView() { - navigateToRoute("inputdialogbasic"); + private static final String ROUTE = "inputdialogbasic"; + + public void setupInputDialogBasicView(SupportedLanguage language) { + navigateToRoute(language.getPath(ROUTE)); } - @Test - public void testInvalidInputDialogIsShownWhenDeleteButtonIsClicked() { + @ParameterizedTest + @MethodSource("provideRoutes") + public void testInvalidInputDialogIsShownWhenDeleteButtonIsClicked(SupportedLanguage language) { + setupInputDialogBasicView(language); Locator dialog = page.getByRole(AriaRole.DIALOG); assertThat(dialog).isVisible(); @@ -36,8 +41,10 @@ public void testInvalidInputDialogIsShownWhenDeleteButtonIsClicked() { okButton.click(); } - @Test - public void testValidInputDialogIsShownWhenDeleteButtonIsClicked() { + @ParameterizedTest + @MethodSource("provideRoutes") + public void testValidInputDialogIsShownWhenDeleteButtonIsClicked(SupportedLanguage language) { + setupInputDialogBasicView(language); Locator dialog = page.getByRole(AriaRole.DIALOG); assertThat(dialog).isVisible(); diff --git a/src/test/java/com/webforj/samples/views/optiondialog/input/InputDialogTypeViewIT.java b/src/test/java/com/webforj/samples/views/optiondialog/input/InputDialogTypeViewIT.java index b730488a1..9e64fcaed 100644 --- a/src/test/java/com/webforj/samples/views/optiondialog/input/InputDialogTypeViewIT.java +++ b/src/test/java/com/webforj/samples/views/optiondialog/input/InputDialogTypeViewIT.java @@ -2,23 +2,28 @@ import static com.microsoft.playwright.assertions.PlaywrightAssertions.assertThat; -import org.junit.jupiter.api.BeforeEach; -import org.junit.jupiter.api.Test; +import com.webforj.samples.pages.SupportedLanguage; +import com.webforj.samples.views.BaseTest; import com.microsoft.playwright.Locator; import com.microsoft.playwright.Page; import com.microsoft.playwright.options.AriaRole; -import com.webforj.samples.views.BaseTest; +import org.junit.jupiter.api.Test; +import org.junit.jupiter.params.ParameterizedTest; +import org.junit.jupiter.params.provider.MethodSource; public class InputDialogTypeViewIT extends BaseTest { - @BeforeEach - public void setupInputDialogTypeView() { - navigateToRoute("inputdialogtype"); + private static final String ROUTE = "inputdialogtype"; + + public void setupInputDialogTypeView(SupportedLanguage language) { + navigateToRoute(language.getPath(ROUTE)); } - @Test - public void testInputDialogTypeIsShownWhenContinueButtonIsClicked() { + @ParameterizedTest + @MethodSource("provideRoutes") + public void testInputDialogTypeIsShownWhenContinueButtonIsClicked(SupportedLanguage language) { + setupInputDialogTypeView(language); Locator dialog = page.getByRole(AriaRole.DIALOG); assertThat(dialog).isVisible();