Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Submit feedback
Sign in / Register
Toggle navigation
S
spring-boot
Project
Project
Details
Activity
Releases
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
0
Issues
0
List
Board
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Charts
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
DEMO
spring-boot
Commits
9e46061a
Commit
9e46061a
authored
Jun 01, 2021
by
Stephane Nicoll
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
Allow to chain ContextConsumer implementations
Closes gh-26723
parent
79b0da55
Changes
2
Hide whitespace changes
Inline
Side-by-side
Showing
2 changed files
with
95 additions
and
1 deletion
+95
-1
ContextConsumer.java
...ngframework/boot/test/context/runner/ContextConsumer.java
+18
-1
ContextConsumerTests.java
...mework/boot/test/context/runner/ContextConsumerTests.java
+77
-0
No files found.
spring-boot-project/spring-boot-test/src/main/java/org/springframework/boot/test/context/runner/ContextConsumer.java
View file @
9e46061a
/*
/*
* Copyright 2012-20
19
the original author or authors.
* Copyright 2012-20
21
the original author or authors.
*
*
* Licensed under the Apache License, Version 2.0 (the "License");
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* you may not use this file except in compliance with the License.
...
@@ -17,6 +17,7 @@
...
@@ -17,6 +17,7 @@
package
org
.
springframework
.
boot
.
test
.
context
.
runner
;
package
org
.
springframework
.
boot
.
test
.
context
.
runner
;
import
org.springframework.context.ApplicationContext
;
import
org.springframework.context.ApplicationContext
;
import
org.springframework.util.Assert
;
/**
/**
* Callback interface used to process an {@link ApplicationContext} with the ability to
* Callback interface used to process an {@link ApplicationContext} with the ability to
...
@@ -38,4 +39,20 @@ public interface ContextConsumer<C extends ApplicationContext> {
...
@@ -38,4 +39,20 @@ public interface ContextConsumer<C extends ApplicationContext> {
*/
*/
void
accept
(
C
context
)
throws
Throwable
;
void
accept
(
C
context
)
throws
Throwable
;
/**
* Returns a composed {@code ContextConsumer} that performs, in sequence, this
* operation followed by the {@code after} operation.
* @param after the operation to perform after this operation
* @return a composed {@code ContextConsumer} that performs in sequence this operation
* followed by the {@code after} operation
* @since 2.6.0
*/
default
ContextConsumer
<
C
>
andThen
(
ContextConsumer
<?
super
C
>
after
)
{
Assert
.
notNull
(
after
,
"After must not be null"
);
return
(
context
)
->
{
accept
(
context
);
after
.
accept
(
context
);
};
}
}
}
spring-boot-project/spring-boot-test/src/test/java/org/springframework/boot/test/context/runner/ContextConsumerTests.java
0 → 100644
View file @
9e46061a
/*
* Copyright 2012-2021 the original author or authors.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* https://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package
org
.
springframework
.
boot
.
test
.
context
.
runner
;
import
java.util.function.IntPredicate
;
import
org.junit.jupiter.api.Test
;
import
org.mockito.InOrder
;
import
org.springframework.context.ApplicationContext
;
import
static
org
.
assertj
.
core
.
api
.
Assertions
.
assertThat
;
import
static
org
.
assertj
.
core
.
api
.
Assertions
.
assertThatIllegalArgumentException
;
import
static
org
.
assertj
.
core
.
api
.
Assertions
.
assertThatThrownBy
;
import
static
org
.
mockito
.
BDDMockito
.
given
;
import
static
org
.
mockito
.
Mockito
.
inOrder
;
import
static
org
.
mockito
.
Mockito
.
mock
;
import
static
org
.
mockito
.
Mockito
.
verify
;
import
static
org
.
mockito
.
Mockito
.
verifyNoMoreInteractions
;
/**
* Tests for {@link ContextConsumer}.
*
* @author Stephane Nicoll
*/
class
ContextConsumerTests
{
@Test
void
andThenInvokeInOrder
()
throws
Throwable
{
IntPredicate
predicate
=
mock
(
IntPredicate
.
class
);
given
(
predicate
.
test
(
42
)).
willReturn
(
true
);
given
(
predicate
.
test
(
24
)).
willReturn
(
false
);
ContextConsumer
<
ApplicationContext
>
firstConsumer
=
(
context
)
->
assertThat
(
predicate
.
test
(
42
)).
isTrue
();
ContextConsumer
<
ApplicationContext
>
secondConsumer
=
(
context
)
->
assertThat
(
predicate
.
test
(
24
)).
isFalse
();
firstConsumer
.
andThen
(
secondConsumer
).
accept
(
mock
(
ApplicationContext
.
class
));
InOrder
ordered
=
inOrder
(
predicate
);
ordered
.
verify
(
predicate
).
test
(
42
);
ordered
.
verify
(
predicate
).
test
(
24
);
ordered
.
verifyNoMoreInteractions
();
}
@Test
void
andThenNoInvokedIfThisFails
()
{
IntPredicate
predicate
=
mock
(
IntPredicate
.
class
);
given
(
predicate
.
test
(
42
)).
willReturn
(
true
);
given
(
predicate
.
test
(
24
)).
willReturn
(
false
);
ContextConsumer
<
ApplicationContext
>
firstConsumer
=
(
context
)
->
assertThat
(
predicate
.
test
(
42
)).
isFalse
();
ContextConsumer
<
ApplicationContext
>
secondConsumer
=
(
context
)
->
assertThat
(
predicate
.
test
(
24
)).
isFalse
();
assertThatThrownBy
(()
->
firstConsumer
.
andThen
(
secondConsumer
).
accept
(
mock
(
ApplicationContext
.
class
)))
.
isInstanceOf
(
AssertionError
.
class
);
verify
(
predicate
).
test
(
42
);
verifyNoMoreInteractions
(
predicate
);
}
@Test
void
andThenWithNull
()
{
ContextConsumer
<?>
consumer
=
(
context
)
->
{
};
assertThatIllegalArgumentException
().
isThrownBy
(()
->
consumer
.
andThen
(
null
))
.
withMessage
(
"After must not be null"
);
}
}
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment