Skip to content

Commit

Permalink
#177 Auto-detect automatic layouts. Fixes #177
Browse files Browse the repository at this point in the history
  • Loading branch information
mvysny committed Nov 7, 2024
1 parent d265ae6 commit 785dd00
Show file tree
Hide file tree
Showing 5 changed files with 47 additions and 3 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -167,7 +167,7 @@ abstract class AbstractBasicUtilsTests {
}
}

@Route("testing")
@Route("testing", autoLayout = false)
class TestingView : VerticalLayout()

class ErrorView : VerticalLayout(), HasErrorParameter<Exception> {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -24,6 +24,7 @@ import kotlin.test.expect
* To speed up the tests, you can create one instance of this class only, then reuse that instance in every
* call to [MockVaadin.setup].
* @property routes a list of all route views in your application. Vaadin will ignore any routes not present here.
* Also includes all automatic [Layout]s (since V24.5).
* @property errorRoutes a list of all route views in your application. Vaadin will ignore any routes not present here.
* @property skipPwaInit if true, the PWA initialization code is skipped in Vaadin, which dramatically speeds up
* the [MockVaadin.setup] from 2 seconds to 50ms. Since that's usually what you want to do, this defaults to true.
Expand Down Expand Up @@ -79,6 +80,9 @@ public data class Routes(
scanResult.getClassesWithAnnotation(Route::class.java.name).mapTo(routes) { info: ClassInfo ->
Class.forName(info.name).asSubclass(Component::class.java)
}
scanResult.getClassesWithAnnotation(Layout::class.java.name).mapTo(routes) { info: ClassInfo ->
Class.forName(info.name).asSubclass(Component::class.java)
}
scanResult.getClassesImplementing(HasErrorParameter::class.java.name).mapTo(errorRoutes) { info: ClassInfo ->
Class.forName(info.name).asSubclass(HasErrorParameter::class.java)
}
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,26 @@
package com.github.mvysny.kaributesting.v10

import com.github.mvysny.kaributools.navigateTo
import org.junit.jupiter.api.AfterEach
import org.junit.jupiter.api.BeforeAll
import org.junit.jupiter.api.BeforeEach
import org.junit.jupiter.api.Test
import org.myapp.MainLayout
import org.myapp.MyRoute

abstract class AbstractLayoutTests {
companion object {
lateinit var routes: Routes
@BeforeAll @JvmStatic fun discoverRoutes() {
routes = Routes().autoDiscoverViews("org.myapp")
}
}
@BeforeEach fun fakeVaadin() { MockVaadin.setup(routes) }
@AfterEach fun tearDownVaadin() { MockVaadin.tearDown() }

@Test fun automaticLayouting() {
navigateTo<MyRoute>()
_expectOne<MyRoute>()
_expectOne<MainLayout>()
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -15,4 +15,5 @@ abstract class AbstractAllTests19(val isModuleTest: Boolean) {
@Nested inner class MultiSelectComboBoxTests : AbstractMultiselectComboBoxTests()
@Nested inner class SideNavTests : AbstractSideNavTests()
@Nested inner class TabsTests : AbstractTabsTests()
@Nested inner class LayoutTests : AbstractLayoutTests()
}
17 changes: 15 additions & 2 deletions karibu-testing-v23/kt23-tests/src/main/kotlin/org/myapp/Views.kt
Original file line number Diff line number Diff line change
@@ -1,14 +1,27 @@
package org.myapp

import com.github.mvysny.kaributesting.v10.Routes
import com.vaadin.flow.component.html.Div
import com.vaadin.flow.component.orderedlayout.VerticalLayout
import com.vaadin.flow.router.Layout
import com.vaadin.flow.router.Route
import com.vaadin.flow.router.RouterLayout
import jakarta.annotation.security.RolesAllowed

val routes = Routes().autoDiscoverViews("org.myapp")

@Route
@Route(autoLayout = false)
internal class LoginView : VerticalLayout()
@Route("admin")
@Route("admin", autoLayout = false)
@RolesAllowed("admin")
internal class AdminView : VerticalLayout()

@Layout
class MainLayout : Div(), RouterLayout

/**
* Should automatically include [MainLayout] as its layout:
* https://vaadin.com/docs/latest/flow/routing/layout#automatic-layout-using-layout
*/
@Route("myroute")
internal class MyRoute : Div()

0 comments on commit 785dd00

Please sign in to comment.