This is an automated email from the ASF dual-hosted git repository. jamesfredley pushed a commit to branch 8.0.x in repository https://gitbox.apache.org/repos/asf/grails-core.git
commit f5759715ee768f07c77cab0ccdcb7a31986e815b Merge: 06e4c7a007 e56812c8c7 Author: James Fredley <[email protected]> AuthorDate: Sat Jan 31 21:00:02 2026 -0500 Merge branch '7.1.x' into 8.0.x .../functionaltests/BookController.groovy | 11 +- .../controllers/functionaltests/UrlMappings.groovy | 62 ++ .../async/AsyncTestController.groovy | 304 +++++++ .../binding/AdvancedDataBindingController.groovy | 306 +++++++ .../caching/CacheTestController.groovy | 131 +++ .../codecs/CodecTestController.groovy | 281 ++++++ .../commanddi/CommandDIController.groovy | 406 +++++++++ .../contentneg/ContentNegotiationController.groovy | 168 ++++ .../functionaltests/cors/CorsTestController.groovy | 113 +++ .../ErrorHandlingTestController.groovy | 215 +++++ .../fileupload/FileUploadTestController.groovy | 241 +++++ .../functionaltests/flow/FlowController.groovy | 245 +++++ .../flow/FlowTargetController.groovy | 52 ++ .../functionaltests/i18n/I18nTestController.groovy | 226 +++++ .../interceptors/ActionExcludeInterceptor.groovy} | 25 +- .../interceptors/AdvancedMatchingController.groovy | 107 +++ .../AttributeSettingInterceptor.groovy} | 44 +- .../interceptors/BlockingInterceptor.groovy} | 47 +- .../ConditionalMatchInterceptor.groovy | 52 ++ .../interceptors/FirstInterceptor.groovy} | 38 +- .../HttpMethodMatchingInterceptor.groovy} | 23 +- .../interceptors/InterceptorTestController.groovy | 172 ++++ .../interceptors/MultipleRulesInterceptor.groovy} | 25 +- .../NamespaceMatchingInterceptor.groovy} | 23 +- .../interceptors/SecondInterceptor.groovy} | 38 +- .../interceptors/SessionInterceptor.groovy} | 27 +- .../interceptors/ThirdInterceptor.groovy} | 38 +- .../interceptors/TimingInterceptor.groovy} | 44 +- .../RequestResponseTestController.groovy | 270 ++++++ .../springevents/SpringEventController.groovy | 148 +++ .../taglib/TagLibTestController.groovy | 326 +++++++ .../urlmappings/UrlMappingsTestController.groovy | 167 ++++ .../domain/functionaltests/binding/Address.groovy} | 26 +- .../functionaltests/binding/Contributor.groovy} | 22 +- .../functionaltests/binding/Employee.groovy} | 62 +- .../domain/functionaltests/binding/Project.groovy} | 25 +- .../domain/functionaltests/binding/Team.groovy} | 23 +- .../functionaltests/binding/TeamMember.groovy} | 25 +- .../functionaltests/constraints/Appointment.groovy | 109 +++ .../functionaltests/constraints/PaymentInfo.groovy | 178 ++++ .../functionaltests/constraints/Product.groovy | 76 ++ .../constraints/Registration.groovy | 158 ++++ .../functionaltests/events/AuditedEntity.groovy | 108 +++ .../functionaltests/events/StatefulEntity.groovy | 81 ++ .../functionaltests/events/VetoableEntity.groovy | 67 ++ .../domain/functionaltests/gorm/Author.groovy | 62 ++ .../domain/functionaltests/gorm/GormBook.groovy | 70 ++ .../functionaltests/services/InventoryItem.groovy} | 28 +- .../app1/grails-app/i18n/messages.properties | 9 + .../app1/grails-app/i18n/messages_de.properties | 9 + .../app1/grails-app/i18n/messages_fr.properties | 9 + .../caching/CacheTestService.groovy | 133 +++ .../commanddi/NotificationService.groovy | 88 ++ .../commanddi/PricingService.groovy | 77 ++ .../commanddi/ValidationHelperService.groovy | 80 ++ .../services/AsyncProcessingService.groovy | 122 +++ .../services/InventoryService.groovy | 204 +++++ .../functionaltests/services/OrderService.groovy | 118 +++ .../springevents/EventListenerService.groovy | 169 ++++ .../springevents/EventPublisherService.groovy | 78 ++ .../functionaltests/taglib/CustomTagLib.groovy | 341 +++++++ .../grails-app/views/contentNegotiation/error.gsp | 29 + .../grails-app/views/contentNegotiation/index.gsp | 34 + .../views/tagLibTest/_simpleTemplate.gsp | 19 + .../grails-app/views/tagLibTest/testAlertTag.gsp | 20 + .../grails-app/views/tagLibTest/testAppInfoTag.gsp | 20 + .../grails-app/views/tagLibTest/testBadgeTag.gsp | 20 + .../views/tagLibTest/testBuiltInCheckBox.gsp | 20 + .../views/tagLibTest/testBuiltInCollect.gsp | 20 + .../views/tagLibTest/testBuiltInCookie.gsp | 20 + .../views/tagLibTest/testBuiltInCreateLink.gsp | 21 + .../views/tagLibTest/testBuiltInEach.gsp | 21 + .../views/tagLibTest/testBuiltInFieldValue.gsp | 20 + .../views/tagLibTest/testBuiltInFindAll.gsp | 20 + .../views/tagLibTest/testBuiltInForm.gsp | 23 + .../views/tagLibTest/testBuiltInFormatDate.gsp | 21 + .../views/tagLibTest/testBuiltInFormatNumber.gsp | 21 + .../views/tagLibTest/testBuiltInHeader.gsp | 20 + .../views/tagLibTest/testBuiltInHiddenField.gsp | 20 + .../grails-app/views/tagLibTest/testBuiltInIf.gsp | 24 + .../views/tagLibTest/testBuiltInInclude.gsp | 20 + .../views/tagLibTest/testBuiltInJoin.gsp | 20 + .../views/tagLibTest/testBuiltInLink.gsp | 22 + .../views/tagLibTest/testBuiltInMessage.gsp | 20 + .../views/tagLibTest/testBuiltInPaginate.gsp | 20 + .../views/tagLibTest/testBuiltInPasswordField.gsp | 20 + .../views/tagLibTest/testBuiltInRadio.gsp | 22 + .../views/tagLibTest/testBuiltInRender.gsp | 20 + .../views/tagLibTest/testBuiltInResource.gsp | 20 + .../views/tagLibTest/testBuiltInSelect.gsp | 20 + .../grails-app/views/tagLibTest/testBuiltInSet.gsp | 23 + .../views/tagLibTest/testBuiltInSortableColumn.gsp | 26 + .../views/tagLibTest/testBuiltInTextArea.gsp | 20 + .../views/tagLibTest/testBuiltInTextField.gsp | 20 + .../views/tagLibTest/testBuiltInUploadForm.gsp | 23 + .../views/tagLibTest/testBuiltInWhile.gsp | 21 + .../views/tagLibTest/testConditionalTags.gsp | 21 + .../views/tagLibTest/testCssClassTag.gsp | 20 + .../views/tagLibTest/testDefinitionListTag.gsp | 20 + .../views/tagLibTest/testEncodingTags.gsp | 22 + .../views/tagLibTest/testFormattedTag.gsp | 20 + .../grails-app/views/tagLibTest/testHelloTag.gsp | 20 + .../grails-app/views/tagLibTest/testIterateTag.gsp | 20 + .../grails-app/views/tagLibTest/testJoinTag.gsp | 20 + .../grails-app/views/tagLibTest/testListTag.gsp | 20 + .../grails-app/views/tagLibTest/testNestedTags.gsp | 22 + .../grails-app/views/tagLibTest/testPanelTag.gsp | 20 + .../views/tagLibTest/testProgressTag.gsp | 20 + .../grails-app/views/tagLibTest/testRawTag.gsp | 20 + .../grails-app/views/tagLibTest/testRepeatTag.gsp | 20 + .../views/tagLibTest/testRequestInfoTag.gsp | 20 + .../views/tagLibTest/testSessionValueTag.gsp | 20 + .../grails-app/views/tagLibTest/testSetVarTag.gsp | 20 + .../views/tagLibTest/testTagsWithModel.gsp | 26 + .../grails-app/views/tagLibTest/testWrapperTag.gsp | 20 + .../functionaltests/async/AsyncPromiseSpec.groovy | 395 ++++++++ .../binding/AdvancedDataBindingSpec.groovy | 451 ++++++++++ .../functionaltests/caching/CachingSpec.groovy | 406 +++++++++ .../codecs/SecurityCodecsSpec.groovy | 423 +++++++++ .../commanddi/CommandObjectDISpec.groovy | 386 ++++++++ .../constraints/ConstraintValidationSpec.groovy | 996 +++++++++++++++++++++ .../contentneg/ContentNegotiationSpec.groovy | 411 +++++++++ .../functionaltests/cors/CorsAdvancedSpec.groovy | 301 +++++++ .../errorhandling/ErrorHandlingSpec.groovy | 217 +++++ .../functionaltests/events/DomainEventsSpec.groovy | 574 ++++++++++++ .../fileupload/FileUploadSpec.groovy | 395 ++++++++ .../flow/FlashChainForwardSpec.groovy | 338 +++++++ .../functionaltests/gorm/GormAdvancedSpec.groovy | 719 +++++++++++++++ .../i18n/InternationalizationSpec.groovy | 445 +++++++++ .../InterceptorAdvancedMatchingSpec.groovy | 275 ++++++ .../interceptors/InterceptorOrderingSpec.groovy | 315 +++++++ .../requestresponse/RequestResponseSpec.groovy | 386 ++++++++ .../services/ServiceIntegrationSpec.groovy | 379 ++++++++ .../springevents/SpringEventsSpec.groovy | 333 +++++++ .../functionaltests/taglib/TagLibSpec.groovy | 968 ++++++++++++++++++++ .../urlmappings/UrlMappingsSpec.groovy | 352 ++++++++ .../springevents/CustomApplicationEvent.groovy} | 26 +- .../springevents/PriorityEvent.groovy} | 24 +- .../springevents/UserActionEvent.groovy} | 26 +- .../functionaltests/BookControllerSpec.groovy | 10 +- .../services/pubsub/demo/TotalService.groovy | 12 +- .../groovy/pubsub/demo/AsyncEventsSpec.groovy | 203 +++++ .../groovy/pubsub/demo/PubSubSpec.groovy | 37 +- .../main/groovy/pubsub/demo/BookSubscriber.groovy | 16 +- grails-test-examples/cache/build.gradle | 2 + .../com/demo/AdvancedCachingController.groovy | 123 +++ .../controllers/com/demo/UrlMappings.groovy | 54 ++ .../com/demo/AdvancedCachingService.groovy | 158 ++++ .../com/demo/AdvancedCachingIntegrationSpec.groovy | 323 +++++++ .../com/demo/AdvancedCachingServiceSpec.groovy | 316 +++++++ .../CrossDatasourceTransactionSpec.groovy | 284 ++++++ .../functionaltests/DatasourceSwitchingSpec.groovy | 370 ++++++++ .../functionaltests/MultipleDataSourcesSpec.groovy | 13 +- .../test/app/ConfigurationPrioritySpec.groovy | 249 ++++++ .../test/app/EnvironmentConfigurationSpec.groovy | 223 +++++ grails-test-examples/gorm/build.gradle | 5 +- .../gorm/AuthorController.groovy} | 17 +- .../gorm/BookController.groovy} | 17 +- .../gorm/UrlMappings.groovy} | 18 +- .../grails-app/domain/gorm/AuditedEntity.groovy | 148 +++ .../domain/gorm/Author.groovy} | 39 +- .../gorm/grails-app/domain/gorm/Book.groovy | 33 +- .../grails-app/i18n/messages.properties | 1 + .../services/gorm/BookDataService.groovy | 151 ++++ .../services/gorm/TransactionTestService.groovy | 187 ++++ .../gorm/grails-app/views/error.gsp | 48 + .../gorm/grails-app/views/index.gsp | 32 + .../gorm/grails-app/views/notFound.gsp | 28 + .../groovy/gorm/FieldsValidationSpec.groovy | 552 ++++++++++++ .../groovy/gorm/GormCascadeOperationsSpec.groovy | 357 ++++++++ .../groovy/gorm/GormCriteriaQueriesSpec.groovy | 614 +++++++++++++ .../groovy/gorm/GormDataServicesSpec.groovy | 338 +++++++ .../groovy/gorm/GormEventsSpec.groovy | 377 ++++++++ .../groovy/gorm/GormWhereQueryAdvancedSpec.groovy | 373 ++++++++ .../groovy/gorm/ScaffoldingFunctionalSpec.groovy | 293 ++++++ .../groovy/gorm/TransactionPropagationSpec.groovy | 268 ++++++ .../integration-test/groovy/gorm/UserSpec.groovy | 33 +- .../groovy/gorm/ValidationConstraintsSpec.groovy | 496 ++++++++++ .../groovy/gorm/pages/AuthorPages.groovy | 75 ++ .../groovy/gorm/pages/BookPages.groovy | 79 ++ .../example/grails/layout/TagLibController.groovy | 95 ++ .../grails-app/views/tagLib/_partial.gsp | 21 + .../grails-app/views/tagLib/collectTag.gsp | 29 + .../grails-app/views/tagLib/createLinkTag.gsp | 30 + .../gsp-layout/grails-app/views/tagLib/eachTag.gsp | 33 + .../gsp-layout/grails-app/views/tagLib/elseTag.gsp | 33 + .../grails-app/views/tagLib/encodeTags.gsp | 30 + .../gsp-layout/grails-app/views/tagLib/formTag.gsp | 50 ++ .../grails-app/views/tagLib/formatTags.gsp | 30 + .../gsp-layout/grails-app/views/tagLib/ifTag.gsp | 31 + .../gsp-layout/grails-app/views/tagLib/index.gsp | 32 + .../gsp-layout/grails-app/views/tagLib/joinTag.gsp | 30 + .../gsp-layout/grails-app/views/tagLib/linkTag.gsp | 30 + .../grails-app/views/tagLib/renderTag.gsp | 31 + .../gsp-layout/grails-app/views/tagLib/setTag.gsp | 35 + .../integration-test/groovy/GspTagLibSpec.groovy | 275 ++++++ .../controllers/example/BookController.groovy | 8 +- .../functional/tests/BookController.groovy | 8 +- .../functional/tests/BookControllerUnitSpec.groovy | 10 +- .../controllers/example/BookController.groovy | 8 +- .../schemapertenant/BookController.groovy | 8 +- .../groovy/micronaut/MicronautContextSpec.groovy | 92 ++ .../groovy/micronaut/MicronautQualifierSpec.groovy | 106 +++ .../functional/tests/BookController.groovy | 8 +- .../examples/mongo/tenant/BookController.groovy | 8 +- .../functional/tests/AuthorController.groovy | 8 +- .../functional/tests/BookController.groovy | 8 +- grails-test-examples/plugins/exploded/build.gradle | 3 + .../groovy/exploded/PluginDependencySpec.groovy | 223 +++++ .../plugins/loadfirst/build.gradle | 3 + .../groovy/loadfirst/PluginLifecycleSpec.groovy | 236 +++++ .../plugins/loadsecond/build.gradle | 3 + .../groovy/loadsecond/PluginLoadOrderSpec.groovy | 222 +++++ .../{gorm => scaffolding-fields}/build.gradle | 33 +- .../grails-app/conf/application.yml | 106 +++ .../scaffoldingfields/DepartmentController.groovy} | 20 +- .../scaffoldingfields/EmployeeController.groovy} | 20 +- .../scaffoldingfields/ProjectController.groovy} | 20 +- .../scaffoldingfields/UrlMappings.groovy} | 20 +- .../domain/scaffoldingfields/Address.groovy} | 26 +- .../domain/scaffoldingfields/Department.groovy} | 22 +- .../domain/scaffoldingfields/Employee.groovy | 129 +++ .../domain/scaffoldingfields/Project.groovy} | 47 +- .../grails-app/i18n/messages.properties | 1 + .../init/scaffoldingfields/Application.groovy} | 17 +- .../init/scaffoldingfields/BootStrap.groovy | 114 +++ .../grails-app/views/_fields/default/_wrapper.gsp | 38 + .../views/_fields/employee/biography/_wrapper.gsp | 38 + .../views/_fields/employee/email/_wrapper.gsp | 39 + .../scaffoldingfields/CrudFunctionalSpec.groovy | 269 ++++++ .../scaffoldingfields/CustomTemplatesSpec.groovy | 171 ++++ .../groovy/scaffoldingfields/FieldTypesSpec.groovy | 250 ++++++ .../groovy/scaffoldingfields/PaginationSpec.groovy | 502 +++++++++++ .../RelationshipsFunctionalSpec.groovy | 534 +++++++++++ .../ValidationFunctionalSpec.groovy | 861 ++++++++++++++++++ .../scaffoldingfields/pages/DepartmentPages.groovy | 96 ++ .../scaffoldingfields/pages/EmployeePages.groovy | 139 +++ .../scaffoldingfields/pages/ProjectPages.groovy | 105 +++ .../pages/ScaffoldCreatePage.groovy | 147 +++ .../pages/ScaffoldEditPage.groovy | 159 ++++ .../pages/ScaffoldListPage.groovy | 112 +++ .../pages/ScaffoldShowPage.groovy | 106 +++ settings.gradle | 2 + 243 files changed, 30017 insertions(+), 489 deletions(-)
