Compare commits
19
Commits
0.11.0
...
87c9c83c20
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
87c9c83c20 | ||
|
|
11b1377a37 | ||
|
|
238957419e | ||
|
|
c00320e295 | ||
|
|
ba9ce975c8 | ||
|
|
7ac264e5e8 | ||
|
|
e6de1bde03 | ||
|
|
8b7ba5f18b | ||
|
|
71f30a43e9 | ||
|
|
0bb1daf784 | ||
|
|
a258a5f785 | ||
|
|
f384ce5fe5 | ||
|
|
5c1e69ed32 | ||
|
|
2e12fdbd34 | ||
|
|
95a29a14fe | ||
|
|
d69cf31964 | ||
|
|
79c2f159e1 | ||
|
|
b99f90132a | ||
|
|
3d6b7b4d58 |
+291
@@ -0,0 +1,291 @@
|
|||||||
|
# Change Log
|
||||||
|
|
||||||
|
All notable changes to this project will be documented in this file.
|
||||||
|
|
||||||
|
The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/),
|
||||||
|
and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
|
||||||
|
|
||||||
|
## [Unreleased]
|
||||||
|
|
||||||
|
## [0.12.7] - 2023-30-16
|
||||||
|
|
||||||
|
### Added
|
||||||
|
- Add the CHANGELOG.
|
||||||
|
|
||||||
|
## [0.12.6] - 2023-30-16
|
||||||
|
|
||||||
|
### Fixed
|
||||||
|
- Fix the project name for the gradle build.
|
||||||
|
|
||||||
|
## [0.12.5] - 2023-30-15
|
||||||
|
|
||||||
|
### Changed
|
||||||
|
- Update the build configuration to make the JAR file.
|
||||||
|
|
||||||
|
## [0.12.4] - 2023-30-15
|
||||||
|
|
||||||
|
### Added
|
||||||
|
- Add SimpleEmptyTest and its tests.
|
||||||
|
|
||||||
|
## [0.12.3] - 2023-30-15
|
||||||
|
|
||||||
|
### Added
|
||||||
|
- Add the error for an empty test.
|
||||||
|
|
||||||
|
## [0.12.2] - 2023-30-15
|
||||||
|
|
||||||
|
### Changed
|
||||||
|
- Update the titles for SimpleFailedThenTest and SimpleGivenWhenThenTest.
|
||||||
|
|
||||||
|
## [0.12.1] - 2023-30-15
|
||||||
|
|
||||||
|
### Added
|
||||||
|
- Add a multi-block test.
|
||||||
|
|
||||||
|
### Changed
|
||||||
|
- Update the tests to test the multi-block test.
|
||||||
|
|
||||||
|
## [0.12.0] - 2023-30-15
|
||||||
|
|
||||||
|
### Added
|
||||||
|
- Add the multi-block tests support.
|
||||||
|
|
||||||
|
## [0.11.2] - 2023-30-10
|
||||||
|
|
||||||
|
### Added
|
||||||
|
- Add the main entry point.
|
||||||
|
|
||||||
|
## [0.11.1] - 2023-30-10
|
||||||
|
|
||||||
|
### Added
|
||||||
|
- Add a constructor to set only a formatter for CLIReporter.
|
||||||
|
|
||||||
|
## [0.11.0] - 2023-30-10
|
||||||
|
|
||||||
|
### Added
|
||||||
|
- Add the CLITestRunner to run tests and to report the result.
|
||||||
|
|
||||||
|
## [0.10.1] - 2023-30-10
|
||||||
|
|
||||||
|
### Changed
|
||||||
|
- Update the CLI test formatting.
|
||||||
|
|
||||||
|
## [0.10.0] - 2023-30-8
|
||||||
|
|
||||||
|
### Added
|
||||||
|
- Add the SingleTestLoader to create an object of a loaded Test class.
|
||||||
|
|
||||||
|
## [0.9.2] - 2023-30-8
|
||||||
|
|
||||||
|
### Added
|
||||||
|
- Add a constructor with a default factory for TestCommandQueueFactory.
|
||||||
|
|
||||||
|
## [0.9.1] - 2023-30-8
|
||||||
|
|
||||||
|
### Fixed
|
||||||
|
- Fix the test title for SingleTestClassLoader.
|
||||||
|
|
||||||
|
## [0.9.0] - 2023-30-7
|
||||||
|
|
||||||
|
### Added
|
||||||
|
- Add the AbstractReporter.
|
||||||
|
- Add the CLIReporter and its tests.
|
||||||
|
|
||||||
|
## [0.8.3] - 2023-30-7
|
||||||
|
|
||||||
|
### Added
|
||||||
|
- Add Apache Commons Lang library.
|
||||||
|
- Add default constructor for SimpleTestReportFormatter.
|
||||||
|
|
||||||
|
## [0.8.2] - 2023-30-6
|
||||||
|
|
||||||
|
### Added
|
||||||
|
- Add the AbstractTestReportFormatter.
|
||||||
|
|
||||||
|
### Changed
|
||||||
|
- Refactor the SimpleTestReportFormatter to use the interface.
|
||||||
|
|
||||||
|
## [0.8.1] - 2023-30-6
|
||||||
|
|
||||||
|
### Fixed
|
||||||
|
- Fix the encoding issue.
|
||||||
|
|
||||||
|
## [0.8.0] - 2023-30-4
|
||||||
|
|
||||||
|
### Added
|
||||||
|
- Add the SimpleTestReportFormatter.
|
||||||
|
|
||||||
|
## [0.7.0] - 2023-30-3
|
||||||
|
|
||||||
|
### Added
|
||||||
|
- Add the TestCommandMetaDataFactory to generate the metadata.
|
||||||
|
|
||||||
|
## [0.6.3] - 2023-30-1
|
||||||
|
|
||||||
|
### Added
|
||||||
|
- Add the ClassLoader.
|
||||||
|
|
||||||
|
## [0.6.2] - 2023-30-1
|
||||||
|
|
||||||
|
### Fixed
|
||||||
|
- Fix typos and improve description in the tests.
|
||||||
|
|
||||||
|
## [0.6.1] - 2023-09-30
|
||||||
|
|
||||||
|
### Added
|
||||||
|
- Add the com.google.guava as a dependency.
|
||||||
|
- Add the NameClassLoader.
|
||||||
|
|
||||||
|
## [0.6.0] - 2023-09-29
|
||||||
|
|
||||||
|
### Added
|
||||||
|
- Add the single class loader.
|
||||||
|
|
||||||
|
## [0.5.4] - 2023-09-27
|
||||||
|
|
||||||
|
### Added
|
||||||
|
- Add the queue factory for test commands.
|
||||||
|
|
||||||
|
## [0.5.3] - 2023-09-26
|
||||||
|
|
||||||
|
### Added
|
||||||
|
- Add Abstract and Simple factories to create a test runner.
|
||||||
|
|
||||||
|
## [0.5.2] - 2023-09-26
|
||||||
|
|
||||||
|
### Changed
|
||||||
|
- Refactor tests for the SimpleTestRunner.
|
||||||
|
- Refactor the SimpleTestRunner and its test.
|
||||||
|
|
||||||
|
## [0.5.1] - 2023-09-24
|
||||||
|
|
||||||
|
### Fixed
|
||||||
|
- Fix the BlockDecorator to throw the AsssertionError, if any.
|
||||||
|
|
||||||
|
## [0.5.0] - 2023-09-24
|
||||||
|
|
||||||
|
### Added
|
||||||
|
- Add SimpleTestRunner as a test runner.
|
||||||
|
|
||||||
|
## [0.4.1] - 2023-09-23
|
||||||
|
|
||||||
|
### Added
|
||||||
|
- Add the CI/CD configuration for Gradle and Maven build.
|
||||||
|
|
||||||
|
## [0.4.0] - 2023-09-23
|
||||||
|
|
||||||
|
### Added
|
||||||
|
- Add the create method for the TestCommandFactory.
|
||||||
|
|
||||||
|
## [0.3.1] - 2023-09-23
|
||||||
|
|
||||||
|
### Added
|
||||||
|
- Add the test block decorator.
|
||||||
|
|
||||||
|
## [0.3.0] - 2023-09-23
|
||||||
|
|
||||||
|
### Added
|
||||||
|
- Add abstract and simple test commands.
|
||||||
|
|
||||||
|
## [0.2.7] - 2023-09-23
|
||||||
|
|
||||||
|
### Added
|
||||||
|
- Add a test example without a title annotation.
|
||||||
|
|
||||||
|
## [0.2.6] - 2023-09-23
|
||||||
|
|
||||||
|
### Changed
|
||||||
|
- Update test examples to have annotations with values.
|
||||||
|
|
||||||
|
## [0.2.5] - 2023-09-23
|
||||||
|
|
||||||
|
### Added
|
||||||
|
- Add the Title annotation.
|
||||||
|
|
||||||
|
## [0.2.4] - 2023-09-20
|
||||||
|
|
||||||
|
### Added
|
||||||
|
- Add the TestCommandFactory with a getTestMethods.
|
||||||
|
|
||||||
|
## [0.2.3] - 2023-09-20
|
||||||
|
|
||||||
|
### Added
|
||||||
|
- Add the Test class as ABC.
|
||||||
|
|
||||||
|
## [0.2.2] - 2023-09-20
|
||||||
|
|
||||||
|
### Added
|
||||||
|
- Add test examples.
|
||||||
|
|
||||||
|
## [0.2.1] - 2023-09-20
|
||||||
|
|
||||||
|
### Changed
|
||||||
|
- Refactor the Sum class to be moved into the samples package.
|
||||||
|
|
||||||
|
## [0.2.0] - 2023-09-19
|
||||||
|
|
||||||
|
### Added
|
||||||
|
- Add the Given-When-Then annotations.
|
||||||
|
|
||||||
|
## [0.1.2] - 2023-09-19
|
||||||
|
|
||||||
|
### Removed
|
||||||
|
- Remove the test examples.
|
||||||
|
|
||||||
|
## [0.1.1] - 2023-09-19
|
||||||
|
|
||||||
|
### Added
|
||||||
|
- Add the Sum class to test as an example.
|
||||||
|
|
||||||
|
## [0.1.0] - 2023-09-19
|
||||||
|
|
||||||
|
### Added
|
||||||
|
- Project initialization.
|
||||||
|
|
||||||
|
[Unreleased]: https://gitlab.com/KKlochko/cipher-analytical-machine/-/compare/0.5.3...main?from_project_id=50218541&straight=false
|
||||||
|
: https://gitlab.com/KKlochko/simple-jbdd/-/compare/0.12.7...main?from_project_id=50536015&straight=false
|
||||||
|
[0.12.7]: https://gitlab.com/KKlochko/simple-jbdd/-/compare/0.12.6...0.12.7?from_project_id=50536015&straight=false
|
||||||
|
[0.12.6]: https://gitlab.com/KKlochko/simple-jbdd/-/compare/0.12.5...0.12.6?from_project_id=50536015&straight=false
|
||||||
|
[0.12.5]: https://gitlab.com/KKlochko/simple-jbdd/-/compare/0.12.4...0.12.5?from_project_id=50536015&straight=false
|
||||||
|
[0.12.4]: https://gitlab.com/KKlochko/simple-jbdd/-/compare/0.12.3...0.12.4?from_project_id=50536015&straight=false
|
||||||
|
[0.12.3]: https://gitlab.com/KKlochko/simple-jbdd/-/compare/0.12.2...0.12.3?from_project_id=50536015&straight=false
|
||||||
|
[0.12.2]: https://gitlab.com/KKlochko/simple-jbdd/-/compare/0.12.1...0.12.2?from_project_id=50536015&straight=false
|
||||||
|
[0.12.1]: https://gitlab.com/KKlochko/simple-jbdd/-/compare/0.12.0...0.12.1?from_project_id=50536015&straight=false
|
||||||
|
[0.12.0]: https://gitlab.com/KKlochko/simple-jbdd/-/compare/0.11.2...0.12.0?from_project_id=50536015&straight=false
|
||||||
|
[0.11.2]: https://gitlab.com/KKlochko/simple-jbdd/-/compare/0.11.1...0.11.2?from_project_id=50536015&straight=false
|
||||||
|
[0.11.1]: https://gitlab.com/KKlochko/simple-jbdd/-/compare/0.11.0...0.11.1?from_project_id=50536015&straight=false
|
||||||
|
[0.11.0]: https://gitlab.com/KKlochko/simple-jbdd/-/compare/0.10.1...0.11.0?from_project_id=50536015&straight=false
|
||||||
|
[0.10.1]: https://gitlab.com/KKlochko/simple-jbdd/-/compare/0.10.0...0.10.1?from_project_id=50536015&straight=false
|
||||||
|
[0.10.0]: https://gitlab.com/KKlochko/simple-jbdd/-/compare/0.9.2...0.10.0?from_project_id=50536015&straight=false
|
||||||
|
[0.9.2]: https://gitlab.com/KKlochko/simple-jbdd/-/compare/0.9.1...0.9.2?from_project_id=50536015&straight=false
|
||||||
|
[0.9.1]: https://gitlab.com/KKlochko/simple-jbdd/-/compare/0.9.0...0.9.1?from_project_id=50536015&straight=false
|
||||||
|
[0.9.0]: https://gitlab.com/KKlochko/simple-jbdd/-/compare/0.8.3...0.9.0?from_project_id=50536015&straight=false
|
||||||
|
[0.8.3]: https://gitlab.com/KKlochko/simple-jbdd/-/compare/0.8.2...0.8.3?from_project_id=50536015&straight=false
|
||||||
|
[0.8.2]: https://gitlab.com/KKlochko/simple-jbdd/-/compare/0.8.1...0.8.2?from_project_id=50536015&straight=false
|
||||||
|
[0.8.1]: https://gitlab.com/KKlochko/simple-jbdd/-/compare/0.8.0...0.8.1?from_project_id=50536015&straight=false
|
||||||
|
[0.8.0]: https://gitlab.com/KKlochko/simple-jbdd/-/compare/0.7.0...0.8.0?from_project_id=50536015&straight=false
|
||||||
|
[0.7.0]: https://gitlab.com/KKlochko/simple-jbdd/-/compare/0.6.3...0.7.0?from_project_id=50536015&straight=false
|
||||||
|
[0.6.3]: https://gitlab.com/KKlochko/simple-jbdd/-/compare/0.6.2...0.6.3?from_project_id=50536015&straight=false
|
||||||
|
[0.6.2]: https://gitlab.com/KKlochko/simple-jbdd/-/compare/0.6.1...0.6.2?from_project_id=50536015&straight=false
|
||||||
|
[0.6.1]: https://gitlab.com/KKlochko/simple-jbdd/-/compare/0.6.0...0.6.1?from_project_id=50536015&straight=false
|
||||||
|
[0.6.0]: https://gitlab.com/KKlochko/simple-jbdd/-/compare/0.5.4...0.6.0?from_project_id=50536015&straight=false
|
||||||
|
[0.5.4]: https://gitlab.com/KKlochko/simple-jbdd/-/compare/0.5.3...0.5.4?from_project_id=50536015&straight=false
|
||||||
|
[0.5.3]: https://gitlab.com/KKlochko/simple-jbdd/-/compare/0.5.2...0.5.3?from_project_id=50536015&straight=false
|
||||||
|
[0.5.2]: https://gitlab.com/KKlochko/simple-jbdd/-/compare/0.5.1...0.5.2?from_project_id=50536015&straight=false
|
||||||
|
[0.5.1]: https://gitlab.com/KKlochko/simple-jbdd/-/compare/0.5.0...0.5.1?from_project_id=50536015&straight=false
|
||||||
|
[0.5.0]: https://gitlab.com/KKlochko/simple-jbdd/-/compare/0.4.1...0.5.0?from_project_id=50536015&straight=false
|
||||||
|
[0.4.1]: https://gitlab.com/KKlochko/simple-jbdd/-/compare/0.4.0...0.4.1?from_project_id=50536015&straight=false
|
||||||
|
[0.4.0]: https://gitlab.com/KKlochko/simple-jbdd/-/compare/0.3.1...0.4.0?from_project_id=50536015&straight=false
|
||||||
|
[0.3.1]: https://gitlab.com/KKlochko/simple-jbdd/-/compare/0.3.0...0.3.1?from_project_id=50536015&straight=false
|
||||||
|
[0.3.0]: https://gitlab.com/KKlochko/simple-jbdd/-/compare/0.2.7...0.3.0?from_project_id=50536015&straight=false
|
||||||
|
[0.2.7]: https://gitlab.com/KKlochko/simple-jbdd/-/compare/0.2.6...0.2.7?from_project_id=50536015&straight=false
|
||||||
|
[0.2.6]: https://gitlab.com/KKlochko/simple-jbdd/-/compare/0.2.5...0.2.6?from_project_id=50536015&straight=false
|
||||||
|
[0.2.5]: https://gitlab.com/KKlochko/simple-jbdd/-/compare/0.2.4...0.2.5?from_project_id=50536015&straight=false
|
||||||
|
[0.2.4]: https://gitlab.com/KKlochko/simple-jbdd/-/compare/0.2.3...0.2.4?from_project_id=50536015&straight=false
|
||||||
|
[0.2.3]: https://gitlab.com/KKlochko/simple-jbdd/-/compare/0.2.2...0.2.3?from_project_id=50536015&straight=false
|
||||||
|
[0.2.2]: https://gitlab.com/KKlochko/simple-jbdd/-/compare/0.2.1...0.2.2?from_project_id=50536015&straight=false
|
||||||
|
[0.2.1]: https://gitlab.com/KKlochko/simple-jbdd/-/compare/0.2.0...0.2.1?from_project_id=50536015&straight=false
|
||||||
|
[0.2.0]: https://gitlab.com/KKlochko/simple-jbdd/-/compare/0.1.2...0.2.0?from_project_id=50536015&straight=false
|
||||||
|
[0.1.2]: https://gitlab.com/KKlochko/simple-jbdd/-/compare/0.1.1...0.1.2?from_project_id=50536015&straight=false
|
||||||
|
[0.1.1]: https://gitlab.com/KKlochko/simple-jbdd/-/compare/0.1.0...0.1.1?from_project_id=50536015&straight=false
|
||||||
|
[0.1.0]: https://gitlab.com/KKlochko/simple-jbdd/-/commit/dabb09c518cdfad4aa05ac9d86c857833b8db41c
|
||||||
+11
-1
@@ -1,11 +1,21 @@
|
|||||||
plugins {
|
plugins {
|
||||||
id('groovy')
|
id('groovy')
|
||||||
|
id('application')
|
||||||
|
id 'com.github.johnrengelman.shadow' version '7.1.2'
|
||||||
}
|
}
|
||||||
|
|
||||||
version = "1.0"
|
version = "1.0"
|
||||||
description = "simple-jbdd is a simple BDD testing framework for Java."
|
description = "simple-jbdd is a simple BDD testing framework for Java."
|
||||||
|
|
||||||
// Spock works with Java 1.8 and above
|
application {
|
||||||
|
mainClassName = 'space.kklochko.simple_jbdd.Main'
|
||||||
|
}
|
||||||
|
|
||||||
|
shadowJar {
|
||||||
|
mergeServiceFiles()
|
||||||
|
minimize()
|
||||||
|
}
|
||||||
|
|
||||||
java {
|
java {
|
||||||
toolchain {
|
toolchain {
|
||||||
languageVersion.set(JavaLanguageVersion.of(17))
|
languageVersion.set(JavaLanguageVersion.of(17))
|
||||||
|
|||||||
@@ -18,6 +18,32 @@
|
|||||||
|
|
||||||
<build>
|
<build>
|
||||||
<plugins>
|
<plugins>
|
||||||
|
<plugin>
|
||||||
|
<groupId>org.apache.maven.plugins</groupId>
|
||||||
|
<artifactId>maven-jar-plugin</artifactId>
|
||||||
|
<version>3.2.2</version>
|
||||||
|
<configuration>
|
||||||
|
<archive>
|
||||||
|
<manifest>
|
||||||
|
<mainClass>space.kklochko.simple_jbdd.Main</mainClass>
|
||||||
|
<addClasspath>true</addClasspath>
|
||||||
|
</manifest>
|
||||||
|
</archive>
|
||||||
|
</configuration>
|
||||||
|
</plugin>
|
||||||
|
<plugin>
|
||||||
|
<groupId>org.apache.maven.plugins</groupId>
|
||||||
|
<artifactId>maven-shade-plugin</artifactId>
|
||||||
|
<version>3.4.1</version>
|
||||||
|
<executions>
|
||||||
|
<execution>
|
||||||
|
<phase>package</phase>
|
||||||
|
<goals>
|
||||||
|
<goal>shade</goal>
|
||||||
|
</goals>
|
||||||
|
</execution>
|
||||||
|
</executions>
|
||||||
|
</plugin>
|
||||||
<!-- Mandatory plugins for using Spock -->
|
<!-- Mandatory plugins for using Spock -->
|
||||||
<plugin>
|
<plugin>
|
||||||
<!-- The gmavenplus plugin is used to compile Groovy code. To learn more about this plugin,
|
<!-- The gmavenplus plugin is used to compile Groovy code. To learn more about this plugin,
|
||||||
@@ -124,16 +150,5 @@
|
|||||||
<version>2.2</version>
|
<version>2.2</version>
|
||||||
<scope>test</scope>
|
<scope>test</scope>
|
||||||
</dependency>
|
</dependency>
|
||||||
<!-- Dependencies used by examples in this project (not required for using Spock) -->
|
|
||||||
<dependency>
|
|
||||||
<groupId>com.h2database</groupId>
|
|
||||||
<artifactId>h2</artifactId>
|
|
||||||
<version>2.2.222</version>
|
|
||||||
</dependency>
|
|
||||||
<dependency>
|
|
||||||
<groupId>org.apache.groovy</groupId>
|
|
||||||
<artifactId>groovy-sql</artifactId>
|
|
||||||
<version>${groovy.version}</version>
|
|
||||||
</dependency>
|
|
||||||
</dependencies>
|
</dependencies>
|
||||||
</project>
|
</project>
|
||||||
|
|||||||
+1
-1
@@ -1 +1 @@
|
|||||||
rootProject.name = "simple_bdd"
|
rootProject.name = "simple_jbdd"
|
||||||
@@ -0,0 +1,24 @@
|
|||||||
|
package space.kklochko.simple_jbdd;
|
||||||
|
|
||||||
|
import space.kklochko.simple_jbdd.tests.factories.AbstractTestRunnerFactory;
|
||||||
|
import space.kklochko.simple_jbdd.tests.factories.SimpleTestRunnerFactory;
|
||||||
|
import space.kklochko.simple_jbdd.tests.loaders.NameClassLoader;
|
||||||
|
import space.kklochko.simple_jbdd.tests.reports.AbstractReporter;
|
||||||
|
import space.kklochko.simple_jbdd.tests.reports.CLIReporter;
|
||||||
|
import space.kklochko.simple_jbdd.tests.reports.fmt.SimpleTestReportFormatter;
|
||||||
|
import space.kklochko.simple_jbdd.tests.runners.CLITestRunner;
|
||||||
|
|
||||||
|
public class Main {
|
||||||
|
public static void main(String[] args) {
|
||||||
|
NameClassLoader loader = new NameClassLoader();
|
||||||
|
AbstractTestRunnerFactory testRunnerFactory = new SimpleTestRunnerFactory();
|
||||||
|
AbstractReporter reporter = new CLIReporter(new SimpleTestReportFormatter());
|
||||||
|
|
||||||
|
CLITestRunner runner = new CLITestRunner(loader, testRunnerFactory, reporter);
|
||||||
|
|
||||||
|
boolean status = runner.run();
|
||||||
|
|
||||||
|
System.exit(status ? 0 : 1);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
@@ -0,0 +1,16 @@
|
|||||||
|
package space.kklochko.simple_jbdd.test_examples.samples;
|
||||||
|
|
||||||
|
public class Calculator {
|
||||||
|
public int plus(int a, int b) {
|
||||||
|
return a + b;
|
||||||
|
}
|
||||||
|
|
||||||
|
public int subtract(int a, int b) {
|
||||||
|
return a - b;
|
||||||
|
}
|
||||||
|
|
||||||
|
public int multiply(int a, int b) {
|
||||||
|
return a * b + 1;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
+38
@@ -0,0 +1,38 @@
|
|||||||
|
package space.kklochko.simple_jbdd.test_examples.tests;
|
||||||
|
|
||||||
|
import space.kklochko.simple_jbdd.annotations.Given;
|
||||||
|
import space.kklochko.simple_jbdd.annotations.Then;
|
||||||
|
import space.kklochko.simple_jbdd.annotations.Title;
|
||||||
|
import space.kklochko.simple_jbdd.annotations.When;
|
||||||
|
import space.kklochko.simple_jbdd.test_examples.samples.Calculator;
|
||||||
|
import space.kklochko.simple_jbdd.tests.Test;
|
||||||
|
|
||||||
|
@Title("3*3 must be 9")
|
||||||
|
public class CalculatorMultiplyTest extends Test {
|
||||||
|
Calculator calculator;
|
||||||
|
int a;
|
||||||
|
int b;
|
||||||
|
int result;
|
||||||
|
|
||||||
|
@Given("Set up the calculator")
|
||||||
|
public void given() {
|
||||||
|
calculator = new Calculator();
|
||||||
|
}
|
||||||
|
|
||||||
|
@Given("Set up the arguments")
|
||||||
|
public void setupArguments() {
|
||||||
|
a = 3;
|
||||||
|
b = 3;
|
||||||
|
}
|
||||||
|
|
||||||
|
@When("Invoke the multiply method")
|
||||||
|
public void when() {
|
||||||
|
result = calculator.multiply(a, b);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Then("3*3 must be 9")
|
||||||
|
public void then() {
|
||||||
|
assert result == 9;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
@@ -0,0 +1,37 @@
|
|||||||
|
package space.kklochko.simple_jbdd.test_examples.tests;
|
||||||
|
|
||||||
|
import space.kklochko.simple_jbdd.annotations.Given;
|
||||||
|
import space.kklochko.simple_jbdd.annotations.Then;
|
||||||
|
import space.kklochko.simple_jbdd.annotations.Title;
|
||||||
|
import space.kklochko.simple_jbdd.annotations.When;
|
||||||
|
import space.kklochko.simple_jbdd.test_examples.samples.Calculator;
|
||||||
|
import space.kklochko.simple_jbdd.tests.Test;
|
||||||
|
|
||||||
|
@Title("2+2 must be 4")
|
||||||
|
public class CalculatorPlusTest extends Test {
|
||||||
|
Calculator calculator;
|
||||||
|
int a;
|
||||||
|
int b;
|
||||||
|
int result;
|
||||||
|
|
||||||
|
@Given("Set up the calculator")
|
||||||
|
public void given() {
|
||||||
|
calculator = new Calculator();
|
||||||
|
}
|
||||||
|
|
||||||
|
@Given("Set up the arguments")
|
||||||
|
public void setupArguments() {
|
||||||
|
a = b = 2;
|
||||||
|
}
|
||||||
|
|
||||||
|
@When("Invoke the plus method")
|
||||||
|
public void when() {
|
||||||
|
result = calculator.plus(a, b);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Then("2+2 must be 4")
|
||||||
|
public void then() {
|
||||||
|
assert result == 4;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
+38
@@ -0,0 +1,38 @@
|
|||||||
|
package space.kklochko.simple_jbdd.test_examples.tests;
|
||||||
|
|
||||||
|
import space.kklochko.simple_jbdd.annotations.Given;
|
||||||
|
import space.kklochko.simple_jbdd.annotations.Then;
|
||||||
|
import space.kklochko.simple_jbdd.annotations.Title;
|
||||||
|
import space.kklochko.simple_jbdd.annotations.When;
|
||||||
|
import space.kklochko.simple_jbdd.test_examples.samples.Calculator;
|
||||||
|
import space.kklochko.simple_jbdd.tests.Test;
|
||||||
|
|
||||||
|
@Title("4-2 must be 2")
|
||||||
|
public class CalculatorSubtractTes extends Test {
|
||||||
|
Calculator calculator;
|
||||||
|
int a;
|
||||||
|
int b;
|
||||||
|
int result;
|
||||||
|
|
||||||
|
@Given("Set up the calculator")
|
||||||
|
public void given() {
|
||||||
|
calculator = new Calculator();
|
||||||
|
}
|
||||||
|
|
||||||
|
@Given("Set up the arguments")
|
||||||
|
public void setupArguments() {
|
||||||
|
a = 4;
|
||||||
|
b = 2;
|
||||||
|
}
|
||||||
|
|
||||||
|
@When("Invoke the subtract method")
|
||||||
|
public void when() {
|
||||||
|
result = calculator.subtract(a, b);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Then("4-2 must be 2")
|
||||||
|
public void then() {
|
||||||
|
assert result == 2;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
+38
@@ -0,0 +1,38 @@
|
|||||||
|
package space.kklochko.simple_jbdd.test_examples.tests;
|
||||||
|
|
||||||
|
import space.kklochko.simple_jbdd.annotations.Given;
|
||||||
|
import space.kklochko.simple_jbdd.annotations.Then;
|
||||||
|
import space.kklochko.simple_jbdd.annotations.Title;
|
||||||
|
import space.kklochko.simple_jbdd.annotations.When;
|
||||||
|
import space.kklochko.simple_jbdd.test_examples.samples.Calculator;
|
||||||
|
import space.kklochko.simple_jbdd.tests.Test;
|
||||||
|
|
||||||
|
@Title("4-2 must be 2")
|
||||||
|
public class CalculatorSubtractTest extends Test {
|
||||||
|
Calculator calculator;
|
||||||
|
int a;
|
||||||
|
int b;
|
||||||
|
int result;
|
||||||
|
|
||||||
|
@Given("Set up the calculator")
|
||||||
|
public void given() {
|
||||||
|
calculator = new Calculator();
|
||||||
|
}
|
||||||
|
|
||||||
|
@Given("Set up the arguments")
|
||||||
|
public void setupArguments() {
|
||||||
|
a = 4;
|
||||||
|
b = 2;
|
||||||
|
}
|
||||||
|
|
||||||
|
@When("Invoke the subtract method")
|
||||||
|
public void when() {
|
||||||
|
result = calculator.subtract(a, b);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Then("4-2 must be 2")
|
||||||
|
public void then() {
|
||||||
|
assert result == 2;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
+38
@@ -0,0 +1,38 @@
|
|||||||
|
package space.kklochko.simple_jbdd.test_examples.tests;
|
||||||
|
|
||||||
|
import space.kklochko.simple_jbdd.annotations.Given;
|
||||||
|
import space.kklochko.simple_jbdd.annotations.Then;
|
||||||
|
import space.kklochko.simple_jbdd.annotations.Title;
|
||||||
|
import space.kklochko.simple_jbdd.annotations.When;
|
||||||
|
import space.kklochko.simple_jbdd.test_examples.samples.Calculator;
|
||||||
|
import space.kklochko.simple_jbdd.tests.Test;
|
||||||
|
|
||||||
|
@Title("Test that has method arguments")
|
||||||
|
public class HasMethodArgumentsTest extends Test {
|
||||||
|
Calculator calculator;
|
||||||
|
int a;
|
||||||
|
int b;
|
||||||
|
int result;
|
||||||
|
|
||||||
|
@Given("Set up the calculator in a private method")
|
||||||
|
public void given(int a, int b) {
|
||||||
|
calculator = new Calculator();
|
||||||
|
}
|
||||||
|
|
||||||
|
@Given("Set up the arguments with arguments")
|
||||||
|
public void setupArguments(int a, int b) {
|
||||||
|
this.a = 4;
|
||||||
|
this.b = 2;
|
||||||
|
}
|
||||||
|
|
||||||
|
@When("Invoke the subtract method")
|
||||||
|
public void when() {
|
||||||
|
result = calculator.subtract(a, b);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Then("4-2 must be 2 and return Bool value")
|
||||||
|
public void then() {
|
||||||
|
assert result == 2;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
+39
@@ -0,0 +1,39 @@
|
|||||||
|
package space.kklochko.simple_jbdd.test_examples.tests;
|
||||||
|
|
||||||
|
import space.kklochko.simple_jbdd.annotations.Given;
|
||||||
|
import space.kklochko.simple_jbdd.annotations.Then;
|
||||||
|
import space.kklochko.simple_jbdd.annotations.Title;
|
||||||
|
import space.kklochko.simple_jbdd.annotations.When;
|
||||||
|
import space.kklochko.simple_jbdd.test_examples.samples.Calculator;
|
||||||
|
import space.kklochko.simple_jbdd.tests.Test;
|
||||||
|
|
||||||
|
@Title("Test with a method that return boolean")
|
||||||
|
public class HasNonVoidMethodTest extends Test {
|
||||||
|
Calculator calculator;
|
||||||
|
int a;
|
||||||
|
int b;
|
||||||
|
int result;
|
||||||
|
|
||||||
|
@Given("Set up the calculator in a private method")
|
||||||
|
public void given() {
|
||||||
|
calculator = new Calculator();
|
||||||
|
}
|
||||||
|
|
||||||
|
@Given("Set up the arguments")
|
||||||
|
public void setupArguments() {
|
||||||
|
this.a = 4;
|
||||||
|
this.b = 2;
|
||||||
|
}
|
||||||
|
|
||||||
|
@When("Invoke the subtract method")
|
||||||
|
public void when() {
|
||||||
|
result = calculator.subtract(a, b);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Then("4-2 must be 2 and return result")
|
||||||
|
public boolean then() {
|
||||||
|
assert result == 2;
|
||||||
|
return result != 2;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
+38
@@ -0,0 +1,38 @@
|
|||||||
|
package space.kklochko.simple_jbdd.test_examples.tests;
|
||||||
|
|
||||||
|
import space.kklochko.simple_jbdd.annotations.Given;
|
||||||
|
import space.kklochko.simple_jbdd.annotations.Then;
|
||||||
|
import space.kklochko.simple_jbdd.annotations.Title;
|
||||||
|
import space.kklochko.simple_jbdd.annotations.When;
|
||||||
|
import space.kklochko.simple_jbdd.test_examples.samples.Calculator;
|
||||||
|
import space.kklochko.simple_jbdd.tests.Test;
|
||||||
|
|
||||||
|
@Title("Test with a private method")
|
||||||
|
public class HasPrivateMethodTest extends Test {
|
||||||
|
Calculator calculator;
|
||||||
|
int a;
|
||||||
|
int b;
|
||||||
|
int result;
|
||||||
|
|
||||||
|
@Given("Set up the calculator in a private method")
|
||||||
|
private void given() {
|
||||||
|
calculator = new Calculator();
|
||||||
|
}
|
||||||
|
|
||||||
|
@Given("Set up the arguments")
|
||||||
|
public void setupArguments() {
|
||||||
|
this.a = 4;
|
||||||
|
this.b = 2;
|
||||||
|
}
|
||||||
|
|
||||||
|
@When("Invoke the subtract method")
|
||||||
|
public void when() {
|
||||||
|
result = calculator.subtract(a, b);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Then("4-2 must be 2")
|
||||||
|
public void then() {
|
||||||
|
assert result == 2;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
@@ -0,0 +1,12 @@
|
|||||||
|
package space.kklochko.simple_jbdd.test_examples.tests;
|
||||||
|
|
||||||
|
import space.kklochko.simple_jbdd.annotations.Title;
|
||||||
|
import space.kklochko.simple_jbdd.tests.Test;
|
||||||
|
|
||||||
|
@Title("A Simple Empty Test for Sum")
|
||||||
|
public class SimpleEmptyTest extends Test {
|
||||||
|
public void check() {
|
||||||
|
assert 30 == 10 + 20 + 1;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
+1
-1
@@ -5,7 +5,7 @@ import space.kklochko.simple_jbdd.annotations.Title;
|
|||||||
import space.kklochko.simple_jbdd.tests.Test;
|
import space.kklochko.simple_jbdd.tests.Test;
|
||||||
|
|
||||||
|
|
||||||
@Title("A Simple Failed GivenWhenTest for Sum")
|
@Title("A Simple Failed Then Test for Sum")
|
||||||
public class SimpleFailedThenTest extends Test {
|
public class SimpleFailedThenTest extends Test {
|
||||||
@Then
|
@Then
|
||||||
public void check() {
|
public void check() {
|
||||||
|
|||||||
+51
@@ -0,0 +1,51 @@
|
|||||||
|
package space.kklochko.simple_jbdd.test_examples.tests;
|
||||||
|
|
||||||
|
import space.kklochko.simple_jbdd.annotations.Given;
|
||||||
|
import space.kklochko.simple_jbdd.annotations.Then;
|
||||||
|
import space.kklochko.simple_jbdd.annotations.Title;
|
||||||
|
import space.kklochko.simple_jbdd.annotations.When;
|
||||||
|
import space.kklochko.simple_jbdd.test_examples.samples.Sum;
|
||||||
|
import space.kklochko.simple_jbdd.tests.Test;
|
||||||
|
|
||||||
|
@Title("A Simple GivenGivenWhenWhenThenThen Test for Sum")
|
||||||
|
public class SimpleGivenGivenWhenWhenThenThenTest extends Test {
|
||||||
|
private Sum sum;
|
||||||
|
private int a;
|
||||||
|
private int b;
|
||||||
|
private int c;
|
||||||
|
private int resultAB;
|
||||||
|
private int resultCB;
|
||||||
|
|
||||||
|
@Given("Create the Sum object")
|
||||||
|
public void setup() {
|
||||||
|
sum = new Sum();
|
||||||
|
}
|
||||||
|
|
||||||
|
@Given("Setup the arguments")
|
||||||
|
public void setupArgs() {
|
||||||
|
a = 10;
|
||||||
|
b = 20;
|
||||||
|
c = 30;
|
||||||
|
}
|
||||||
|
|
||||||
|
@When("Call the .sum(10, 20)")
|
||||||
|
public void triggerAB() {
|
||||||
|
resultAB = sum.sum(a, b);
|
||||||
|
}
|
||||||
|
|
||||||
|
@When("Call the .sum(30, 20)")
|
||||||
|
public void triggerCB() {
|
||||||
|
resultCB = sum.sum(c, b);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Then("10 + 20 is 30")
|
||||||
|
public void checkAB() {
|
||||||
|
assert 30 == resultAB;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Then("30 + 20 is 50")
|
||||||
|
public void checkCB() {
|
||||||
|
assert 50 == resultCB;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
+4
-4
@@ -7,25 +7,25 @@ import space.kklochko.simple_jbdd.annotations.When;
|
|||||||
import space.kklochko.simple_jbdd.test_examples.samples.Sum;
|
import space.kklochko.simple_jbdd.test_examples.samples.Sum;
|
||||||
import space.kklochko.simple_jbdd.tests.Test;
|
import space.kklochko.simple_jbdd.tests.Test;
|
||||||
|
|
||||||
@Title("A Simple GivenWhenTest for Sum")
|
@Title("A Simple GivenWhenThen Test for Sum")
|
||||||
public class SimpleGivenWhenThenTest extends Test {
|
public class SimpleGivenWhenThenTest extends Test {
|
||||||
private Sum sum;
|
private Sum sum;
|
||||||
private int a;
|
private int a;
|
||||||
private int b;
|
private int b;
|
||||||
|
|
||||||
@Given
|
@Given
|
||||||
void setup() {
|
public void setup() {
|
||||||
sum = new Sum();
|
sum = new Sum();
|
||||||
}
|
}
|
||||||
|
|
||||||
@When
|
@When
|
||||||
void trigger() {
|
public void trigger() {
|
||||||
a = 10;
|
a = 10;
|
||||||
b = 20;
|
b = 20;
|
||||||
}
|
}
|
||||||
|
|
||||||
@Then
|
@Then
|
||||||
void check() {
|
public void check() {
|
||||||
assert 30 == sum.sum(a, b);
|
assert 30 == sum.sum(a, b);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -24,7 +24,6 @@ public class BlockDecorator<T extends Test> extends AbstractDecorator<T> {
|
|||||||
|
|
||||||
public boolean runMethod() {
|
public boolean runMethod() {
|
||||||
try {
|
try {
|
||||||
method.setAccessible(true);
|
|
||||||
method.invoke(getCommand().getObject());
|
method.invoke(getCommand().getObject());
|
||||||
return true;
|
return true;
|
||||||
} catch (InvocationTargetException e) {
|
} catch (InvocationTargetException e) {
|
||||||
|
|||||||
+20
@@ -0,0 +1,20 @@
|
|||||||
|
package space.kklochko.simple_jbdd.tests.commands.decorators;
|
||||||
|
|
||||||
|
import space.kklochko.simple_jbdd.tests.Test;
|
||||||
|
import space.kklochko.simple_jbdd.tests.commands.AbstractTestCommand;
|
||||||
|
|
||||||
|
public class ErrorDecorator<T extends Test> extends AbstractDecorator<T> {
|
||||||
|
public ErrorDecorator(String error_label, AbstractTestCommand<T> command, String type) {
|
||||||
|
super(error_label, command);
|
||||||
|
setType(type);
|
||||||
|
}
|
||||||
|
|
||||||
|
public boolean test() {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
public boolean runMethod() {
|
||||||
|
return false;
|
||||||
|
};
|
||||||
|
}
|
||||||
|
|
||||||
@@ -8,40 +8,66 @@ import space.kklochko.simple_jbdd.tests.Test;
|
|||||||
import space.kklochko.simple_jbdd.tests.commands.AbstractTestCommand;
|
import space.kklochko.simple_jbdd.tests.commands.AbstractTestCommand;
|
||||||
import space.kklochko.simple_jbdd.tests.commands.SimpleTestCommand;
|
import space.kklochko.simple_jbdd.tests.commands.SimpleTestCommand;
|
||||||
import space.kklochko.simple_jbdd.tests.commands.decorators.BlockDecorator;
|
import space.kklochko.simple_jbdd.tests.commands.decorators.BlockDecorator;
|
||||||
|
import space.kklochko.simple_jbdd.tests.commands.decorators.ErrorDecorator;
|
||||||
|
import space.kklochko.simple_jbdd.tests.factories.validators.*;
|
||||||
|
|
||||||
import java.lang.annotation.Annotation;
|
import java.lang.annotation.Annotation;
|
||||||
import java.lang.reflect.Method;
|
import java.lang.reflect.Method;
|
||||||
import java.util.Map;
|
import java.util.*;
|
||||||
import java.util.TreeMap;
|
|
||||||
|
|
||||||
public class TestCommandFactory {
|
public class TestCommandFactory {
|
||||||
public AbstractTestCommand create(Test input) {
|
public AbstractTestCommand create(Test input) {
|
||||||
Class<?> aClass = input.getClass();
|
Class<?> aClass = input.getClass();
|
||||||
Map<String, Method> test_methods = this.getTestMethods(aClass);
|
Map<String, ArrayList<Method>> test_methods = this.getTestMethods(aClass);
|
||||||
|
|
||||||
AbstractTestCommand<Test> aTestCommand = createTest(aClass, input);
|
AbstractTestCommand<Test> aTestCommand = createTest(aClass, input);
|
||||||
|
|
||||||
|
ArrayList<Validator> validators = new ArrayList<>();
|
||||||
|
validators.add(new EmptyValidator());
|
||||||
|
validators.add(new HasMethodsWithArgumentsValidator());
|
||||||
|
validators.add(new HasNonVoidMethodsValidator());
|
||||||
|
validators.add(new HasPrivateMethodsValidator());
|
||||||
|
|
||||||
|
for(var validator : validators) {
|
||||||
|
if(validator.validate(test_methods)) {
|
||||||
|
String name = validator.getMessage();
|
||||||
|
return new ErrorDecorator(name, aTestCommand, validator.getErrorType());
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
if(test_methods.containsKey("Then")) {
|
if(test_methods.containsKey("Then")) {
|
||||||
Method then = test_methods.get("Then");
|
ArrayList<Method> thens = getMethodsInReverseOrder(test_methods, "Then");
|
||||||
|
for(Method then : thens) {
|
||||||
String label = then.getAnnotation(Then.class).value();
|
String label = then.getAnnotation(Then.class).value();
|
||||||
aTestCommand = new BlockDecorator<Test>(label, aTestCommand, then, "Then");
|
aTestCommand = new BlockDecorator<Test>(label, aTestCommand, then, "Then");
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
if(test_methods.containsKey("When")) {
|
if(test_methods.containsKey("When")) {
|
||||||
Method when = test_methods.get("When");
|
ArrayList<Method> whens = getMethodsInReverseOrder(test_methods, "When");
|
||||||
|
for(Method when : whens) {
|
||||||
String label = when.getAnnotation(When.class).value();
|
String label = when.getAnnotation(When.class).value();
|
||||||
aTestCommand = new BlockDecorator<Test>(label, aTestCommand, when, "When");
|
aTestCommand = new BlockDecorator<Test>(label, aTestCommand, when, "When");
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
if(test_methods.containsKey("Given")) {
|
if(test_methods.containsKey("Given")) {
|
||||||
Method when = test_methods.get("Given");
|
ArrayList<Method> givens = getMethodsInReverseOrder(test_methods, "Given");
|
||||||
String label = when.getAnnotation(Given.class).value();
|
for(Method given : givens) {
|
||||||
aTestCommand = new BlockDecorator<Test>(label, aTestCommand, when, "Given");
|
String label = given.getAnnotation(Given.class).value();
|
||||||
|
aTestCommand = new BlockDecorator<Test>(label, aTestCommand, given, "Given");
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
return aTestCommand;
|
return aTestCommand;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private ArrayList<Method> getMethodsInReverseOrder(Map<String, ArrayList<Method>> test_methods, String key) {
|
||||||
|
ArrayList<Method> methods = test_methods.get(key);
|
||||||
|
Collections.reverse(methods);
|
||||||
|
return methods;
|
||||||
|
}
|
||||||
|
|
||||||
protected AbstractTestCommand<Test> createTest(Class<?> aClass, Test input) {
|
protected AbstractTestCommand<Test> createTest(Class<?> aClass, Test input) {
|
||||||
Title aTitle = aClass.getAnnotation(Title.class);
|
Title aTitle = aClass.getAnnotation(Title.class);
|
||||||
String title = aClass.getName();
|
String title = aClass.getName();
|
||||||
@@ -52,8 +78,8 @@ public class TestCommandFactory {
|
|||||||
return new SimpleTestCommand<Test>(title, input);
|
return new SimpleTestCommand<Test>(title, input);
|
||||||
}
|
}
|
||||||
|
|
||||||
protected <T extends Test> Map<String, Method> getTestMethods(Class<?> aClass) {
|
protected <T extends Test> Map<String, ArrayList<Method>> getTestMethods(Class<?> aClass) {
|
||||||
Map<String, Method> test_methods = new TreeMap<String, Method>();
|
Map<String, ArrayList<Method>> test_methods = new TreeMap<>();
|
||||||
|
|
||||||
for(Method method : aClass.getDeclaredMethods()) {
|
for(Method method : aClass.getDeclaredMethods()) {
|
||||||
Annotation[] annotations = method.getAnnotations();
|
Annotation[] annotations = method.getAnnotations();
|
||||||
@@ -62,15 +88,21 @@ public class TestCommandFactory {
|
|||||||
continue;
|
continue;
|
||||||
|
|
||||||
if(method.isAnnotationPresent(Given.class))
|
if(method.isAnnotationPresent(Given.class))
|
||||||
test_methods.put("Given", method);
|
addMethodTo(test_methods, "Given", method);
|
||||||
|
|
||||||
if(method.isAnnotationPresent(When.class))
|
if(method.isAnnotationPresent(When.class))
|
||||||
test_methods.put("When", method);
|
addMethodTo(test_methods, "When", method);
|
||||||
|
|
||||||
if(method.isAnnotationPresent(Then.class))
|
if(method.isAnnotationPresent(Then.class))
|
||||||
test_methods.put("Then", method);
|
addMethodTo(test_methods, "Then", method);
|
||||||
}
|
}
|
||||||
|
|
||||||
return test_methods;
|
return test_methods;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private void addMethodTo(Map<String, ArrayList<Method>> test_methods, String key, Method method) {
|
||||||
|
ArrayList<Method> methods = test_methods.getOrDefault(key, new ArrayList<>());
|
||||||
|
methods.add(method);
|
||||||
|
test_methods.put(key, methods);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
+32
@@ -0,0 +1,32 @@
|
|||||||
|
package space.kklochko.simple_jbdd.tests.factories.validators;
|
||||||
|
|
||||||
|
import java.lang.reflect.Method;
|
||||||
|
import java.util.ArrayList;
|
||||||
|
import java.util.Map;
|
||||||
|
|
||||||
|
public class EmptyValidator extends Validator {
|
||||||
|
private boolean isInvalid;
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public boolean validate(Map<String, ArrayList<Method>> methods) {
|
||||||
|
isInvalid = (methods.size() == 0);
|
||||||
|
return isInvalid;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public String getErrorType() {
|
||||||
|
if(!isInvalid)
|
||||||
|
return "ok";
|
||||||
|
|
||||||
|
return "Error";
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public String getMessage() {
|
||||||
|
if(!isInvalid)
|
||||||
|
return "ok";
|
||||||
|
|
||||||
|
return "ERROR!!! No blocks!!!";
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
+19
@@ -0,0 +1,19 @@
|
|||||||
|
package space.kklochko.simple_jbdd.tests.factories.validators;
|
||||||
|
|
||||||
|
import java.lang.reflect.Method;
|
||||||
|
|
||||||
|
public class HasMethodsWithArgumentsValidator extends MethodValidator {
|
||||||
|
@Override
|
||||||
|
protected boolean isMethodInvalid(Method method) {
|
||||||
|
return method.getParameterCount() != 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public String getMessage() {
|
||||||
|
if(!isInvalid)
|
||||||
|
return "ok";
|
||||||
|
|
||||||
|
return String.format("ERROR!!! Methods must have no arguments!!! Check methods: %s!!!", getMethodListAsString());
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
+19
@@ -0,0 +1,19 @@
|
|||||||
|
package space.kklochko.simple_jbdd.tests.factories.validators;
|
||||||
|
|
||||||
|
import java.lang.reflect.Method;
|
||||||
|
|
||||||
|
public class HasNonVoidMethodsValidator extends MethodValidator {
|
||||||
|
@Override
|
||||||
|
protected boolean isMethodInvalid(Method method) {
|
||||||
|
return !method.getReturnType().equals(void.class);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public String getMessage() {
|
||||||
|
if(!isInvalid)
|
||||||
|
return "ok";
|
||||||
|
|
||||||
|
return String.format("ERROR!!! Methods must have the void type!!! Check methods: %s!!!", getMethodListAsString());
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
+20
@@ -0,0 +1,20 @@
|
|||||||
|
package space.kklochko.simple_jbdd.tests.factories.validators;
|
||||||
|
|
||||||
|
import java.lang.reflect.Method;
|
||||||
|
import java.lang.reflect.Modifier;
|
||||||
|
|
||||||
|
public class HasPrivateMethodsValidator extends MethodValidator {
|
||||||
|
@Override
|
||||||
|
protected boolean isMethodInvalid(Method method) {
|
||||||
|
return !Modifier.isPublic(method.getModifiers());
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public String getMessage() {
|
||||||
|
if(!isInvalid)
|
||||||
|
return "ok";
|
||||||
|
|
||||||
|
return String.format("ERROR!!! Methods must be public!!! Check method: %s!!!", getMethodListAsString());
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
+48
@@ -0,0 +1,48 @@
|
|||||||
|
package space.kklochko.simple_jbdd.tests.factories.validators;
|
||||||
|
|
||||||
|
import java.lang.reflect.Method;
|
||||||
|
import java.util.ArrayList;
|
||||||
|
import java.util.Map;
|
||||||
|
import java.util.stream.Collectors;
|
||||||
|
|
||||||
|
abstract public class MethodValidator extends Validator{
|
||||||
|
protected boolean isInvalid;
|
||||||
|
|
||||||
|
protected ArrayList<Method> invalidMethods;
|
||||||
|
|
||||||
|
protected String getMethodListAsString() {
|
||||||
|
return invalidMethods.stream()
|
||||||
|
.map(m -> m.getName())
|
||||||
|
.collect(Collectors.joining(", "));
|
||||||
|
}
|
||||||
|
|
||||||
|
abstract protected boolean isMethodInvalid(Method method);
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public boolean validate(Map<String, ArrayList<Method>> methods) {
|
||||||
|
isInvalid = false;
|
||||||
|
invalidMethods = new ArrayList<>();
|
||||||
|
|
||||||
|
for(var key : methods.keySet()) {
|
||||||
|
for(var method : methods.get(key)) {
|
||||||
|
if(isMethodInvalid(method)) {
|
||||||
|
isInvalid = true;
|
||||||
|
invalidMethods.add(method);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return isInvalid;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public String getErrorType() {
|
||||||
|
if(!isInvalid)
|
||||||
|
return "ok";
|
||||||
|
|
||||||
|
return "Error";
|
||||||
|
}
|
||||||
|
|
||||||
|
abstract public String getMessage();
|
||||||
|
}
|
||||||
|
|
||||||
@@ -0,0 +1,11 @@
|
|||||||
|
package space.kklochko.simple_jbdd.tests.factories.validators;
|
||||||
|
|
||||||
|
import java.lang.reflect.Method;
|
||||||
|
import java.util.ArrayList;
|
||||||
|
import java.util.Map;
|
||||||
|
|
||||||
|
public abstract class Validator {
|
||||||
|
abstract public boolean validate(Map<String, ArrayList<Method>> methods);
|
||||||
|
abstract public String getErrorType();
|
||||||
|
abstract public String getMessage();
|
||||||
|
}
|
||||||
@@ -10,6 +10,10 @@ import org.apache.commons.lang3.StringUtils;
|
|||||||
public class CLIReporter extends AbstractReporter {
|
public class CLIReporter extends AbstractReporter {
|
||||||
final int terminalWidth = 80;
|
final int terminalWidth = 80;
|
||||||
|
|
||||||
|
public CLIReporter(AbstractTestReportFormatter formatter) {
|
||||||
|
super(null, formatter);
|
||||||
|
}
|
||||||
|
|
||||||
public CLIReporter(ArrayList<AbstractMap.SimpleEntry<AbstractTestCommandMetaDataFactory, Boolean>> metadata, AbstractTestReportFormatter formatter) {
|
public CLIReporter(ArrayList<AbstractMap.SimpleEntry<AbstractTestCommandMetaDataFactory, Boolean>> metadata, AbstractTestReportFormatter formatter) {
|
||||||
super(metadata, formatter);
|
super(metadata, formatter);
|
||||||
}
|
}
|
||||||
|
|||||||
+26
-27
@@ -1,5 +1,7 @@
|
|||||||
package space.kklochko.simple_jbdd.tests.factories
|
package space.kklochko.simple_jbdd.tests.factories
|
||||||
|
|
||||||
|
import space.kklochko.simple_jbdd.test_examples.tests.SimpleEmptyTest
|
||||||
|
import space.kklochko.simple_jbdd.test_examples.tests.SimpleGivenGivenWhenWhenThenThenTest
|
||||||
import space.kklochko.simple_jbdd.test_examples.tests.SimpleGivenWhenThenTest
|
import space.kklochko.simple_jbdd.test_examples.tests.SimpleGivenWhenThenTest
|
||||||
import space.kklochko.simple_jbdd.test_examples.tests.SimpleThenTest
|
import space.kklochko.simple_jbdd.test_examples.tests.SimpleThenTest
|
||||||
import space.kklochko.simple_jbdd.test_examples.tests.SimpleThenTestWithoutTitle
|
import space.kklochko.simple_jbdd.test_examples.tests.SimpleThenTestWithoutTitle
|
||||||
@@ -14,19 +16,28 @@ those tests check if factory generate them right.
|
|||||||
""")
|
""")
|
||||||
@Title("Unit tests for TestCommandFactory")
|
@Title("Unit tests for TestCommandFactory")
|
||||||
class TestCommandFactorySpec extends Specification {
|
class TestCommandFactorySpec extends Specification {
|
||||||
def "If the map of methods have one test block."() {
|
def "The command have the same block count."() {
|
||||||
given: "I have a TestCommandFactory object"
|
given: "I have a TestCommandFactory object"
|
||||||
@Subject
|
@Subject
|
||||||
def factory = new TestCommandFactory();
|
def factory = new TestCommandFactory();
|
||||||
|
|
||||||
and: "I also have a SimpleThenTest object"
|
when: "If a test command have blocks"
|
||||||
def simpleThenTest = new SimpleThenTest()
|
def map = factory.getTestMethods(testClass.getClass())
|
||||||
|
|
||||||
when: "If a test have only one block"
|
def count = map.values()
|
||||||
def map = factory.getTestMethods(simpleThenTest.getClass())
|
.stream()
|
||||||
|
.map {it.size()}
|
||||||
|
.reduce(0) { acc, num -> acc + num }
|
||||||
|
|
||||||
then: "the map size is 1 method"
|
then: "the command have the expected block count"
|
||||||
1 == map.size()
|
expectedBlockCount == count
|
||||||
|
|
||||||
|
where:
|
||||||
|
testClass || expectedBlockCount
|
||||||
|
new SimpleEmptyTest() || 0
|
||||||
|
new SimpleThenTest() || 1
|
||||||
|
new SimpleGivenWhenThenTest() || 3
|
||||||
|
new SimpleGivenGivenWhenWhenThenThenTest() || 6
|
||||||
}
|
}
|
||||||
|
|
||||||
def "createTest() sets the title to a class name if no Title annotation."() {
|
def "createTest() sets the title to a class name if no Title annotation."() {
|
||||||
@@ -63,34 +74,22 @@ class TestCommandFactorySpec extends Specification {
|
|||||||
title == test.getLabels()['Title']
|
title == test.getLabels()['Title']
|
||||||
}
|
}
|
||||||
|
|
||||||
def "createTest() build a Test with only Then."() {
|
def "createTest() build a TestCommand that contains the expected blocks."() {
|
||||||
given: "I have a test factory"
|
given: "I have a test factory"
|
||||||
@Subject
|
@Subject
|
||||||
def factory = new TestCommandFactory()
|
def factory = new TestCommandFactory()
|
||||||
|
|
||||||
and: "I have a test class with Title"
|
|
||||||
def testClass = new SimpleThenTest()
|
|
||||||
|
|
||||||
when: "I build a test"
|
when: "I build a test"
|
||||||
def test = factory.create(testClass)
|
def test = factory.create(testClass)
|
||||||
|
|
||||||
then: "The test have title and then method"
|
then: "The test have the expected blocks"
|
||||||
['Title', 'Then'].toSet() == test.getLabels().keySet()
|
expectedBlocks.toSet() == test.getLabels().keySet()
|
||||||
}
|
|
||||||
|
|
||||||
def "createTest() build a Test with Given-When-Then."() {
|
where:
|
||||||
given: "I have a test factory"
|
testClass || expectedBlocks
|
||||||
@Subject
|
new SimpleThenTest() || ['Title', 'Then']
|
||||||
def factory = new TestCommandFactory()
|
new SimpleGivenWhenThenTest() || ['Title', 'Given', 'When', 'Then']
|
||||||
|
new SimpleGivenGivenWhenWhenThenThenTest() || ['Title', 'Given', 'When', 'Then']
|
||||||
and: "I have a test class with Title and Given-When-Then"
|
|
||||||
def testClass = new SimpleGivenWhenThenTest()
|
|
||||||
|
|
||||||
when: "I build a test"
|
|
||||||
def test = factory.create(testClass)
|
|
||||||
|
|
||||||
then: "The test have title and then method"
|
|
||||||
['Title', 'Given', 'When', 'Then'].toSet() == test.getLabels().keySet()
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
+66
@@ -0,0 +1,66 @@
|
|||||||
|
package space.kklochko.simple_jbdd.tests.factories.validators
|
||||||
|
|
||||||
|
import space.kklochko.simple_jbdd.test_examples.tests.HasMethodArgumentsTest
|
||||||
|
import space.kklochko.simple_jbdd.test_examples.tests.HasNonVoidMethodTest
|
||||||
|
import space.kklochko.simple_jbdd.test_examples.tests.HasPrivateMethodTest
|
||||||
|
import space.kklochko.simple_jbdd.test_examples.tests.SimpleEmptyTest
|
||||||
|
import space.kklochko.simple_jbdd.test_examples.tests.SimpleGivenWhenThenTest
|
||||||
|
import space.kklochko.simple_jbdd.tests.factories.TestCommandFactory
|
||||||
|
import spock.lang.Narrative
|
||||||
|
import spock.lang.Specification
|
||||||
|
import spock.lang.Subject
|
||||||
|
import spock.lang.Title
|
||||||
|
|
||||||
|
@Narrative("""The validators must return true if a test class is invalid, so
|
||||||
|
those tests check if validators return the right result.
|
||||||
|
""")
|
||||||
|
@Title("Integrated tests for Validators")
|
||||||
|
class IntegratedValidatorsSpec extends Specification {
|
||||||
|
def "Validator return isInvalid"() {
|
||||||
|
given: "I have a factory and metadata"
|
||||||
|
def factory = new TestCommandFactory()
|
||||||
|
def metaData = factory.getTestMethods(testClass)
|
||||||
|
|
||||||
|
when: "Validating the test"
|
||||||
|
def isInvalid = validator.validate(metaData)
|
||||||
|
|
||||||
|
then: "The status must be expected"
|
||||||
|
isInvalid == expectedStatus
|
||||||
|
|
||||||
|
where: "Possible variants of tests"
|
||||||
|
validator | testClass || expectedStatus
|
||||||
|
new HasMethodsWithArgumentsValidator() | HasMethodArgumentsTest.class || true
|
||||||
|
new HasMethodsWithArgumentsValidator() | SimpleGivenWhenThenTest.class || false
|
||||||
|
new HasNonVoidMethodsValidator() | HasNonVoidMethodTest.class || true
|
||||||
|
new HasMethodsWithArgumentsValidator() | SimpleGivenWhenThenTest.class || false
|
||||||
|
new HasPrivateMethodsValidator() | HasPrivateMethodTest.class || true
|
||||||
|
new HasMethodsWithArgumentsValidator() | SimpleGivenWhenThenTest.class || false
|
||||||
|
new EmptyValidator() | SimpleEmptyTest.class || true
|
||||||
|
new HasMethodsWithArgumentsValidator() | SimpleGivenWhenThenTest.class || false
|
||||||
|
}
|
||||||
|
|
||||||
|
def "Validator return the error message"() {
|
||||||
|
given: "I have a factory and metadata"
|
||||||
|
def factory = new TestCommandFactory()
|
||||||
|
def metaData = factory.getTestMethods(testClass)
|
||||||
|
|
||||||
|
when: "Validating the test and checking the message"
|
||||||
|
validator.validate(metaData)
|
||||||
|
def message = validator.getMessage()
|
||||||
|
|
||||||
|
then: "The message must be expected"
|
||||||
|
message == expectedMessage
|
||||||
|
|
||||||
|
where: "Possible variants of tests"
|
||||||
|
validator | testClass || expectedMessage
|
||||||
|
new HasMethodsWithArgumentsValidator() | HasMethodArgumentsTest.class || "ERROR!!! Methods must have no arguments!!! Check methods: given, setupArguments!!!"
|
||||||
|
new HasMethodsWithArgumentsValidator() | SimpleGivenWhenThenTest.class || "ok"
|
||||||
|
new HasNonVoidMethodsValidator() | HasNonVoidMethodTest.class || "ERROR!!! Methods must have the void type!!! Check methods: then!!!"
|
||||||
|
new HasMethodsWithArgumentsValidator() | SimpleGivenWhenThenTest.class || "ok"
|
||||||
|
new HasPrivateMethodsValidator() | HasPrivateMethodTest.class || "ERROR!!! Methods must be public!!! Check method: given!!!"
|
||||||
|
new HasMethodsWithArgumentsValidator() | SimpleGivenWhenThenTest.class || "ok"
|
||||||
|
new EmptyValidator() | SimpleEmptyTest.class || "ERROR!!! No blocks!!!"
|
||||||
|
new HasMethodsWithArgumentsValidator() | SimpleGivenWhenThenTest.class || "ok"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
+1
-1
@@ -22,7 +22,7 @@ class IntegratedClassLoader extends Specification {
|
|||||||
def classes = loader.load()
|
def classes = loader.load()
|
||||||
|
|
||||||
then: "Checking that the test result is expected"
|
then: "Checking that the test result is expected"
|
||||||
3 == classes.size()
|
11 == classes.size()
|
||||||
}
|
}
|
||||||
|
|
||||||
def "The classes must be represent the Test interface."() {
|
def "The classes must be represent the Test interface."() {
|
||||||
|
|||||||
+1
-1
@@ -19,7 +19,7 @@ class IntegratedNameClassLoader extends Specification {
|
|||||||
def classNames = loader.load()
|
def classNames = loader.load()
|
||||||
|
|
||||||
then: "Checking that the test result is expected"
|
then: "Checking that the test result is expected"
|
||||||
3 == classNames.size()
|
11 == classNames.size()
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
+4
@@ -1,6 +1,8 @@
|
|||||||
package space.kklochko.simple_jbdd.tests.runners
|
package space.kklochko.simple_jbdd.tests.runners
|
||||||
|
|
||||||
|
import space.kklochko.simple_jbdd.test_examples.tests.SimpleEmptyTest
|
||||||
import space.kklochko.simple_jbdd.test_examples.tests.SimpleFailedThenTest
|
import space.kklochko.simple_jbdd.test_examples.tests.SimpleFailedThenTest
|
||||||
|
import space.kklochko.simple_jbdd.test_examples.tests.SimpleGivenGivenWhenWhenThenThenTest
|
||||||
import space.kklochko.simple_jbdd.test_examples.tests.SimpleGivenWhenThenTest
|
import space.kklochko.simple_jbdd.test_examples.tests.SimpleGivenWhenThenTest
|
||||||
import space.kklochko.simple_jbdd.test_examples.tests.SimpleThenTest
|
import space.kklochko.simple_jbdd.test_examples.tests.SimpleThenTest
|
||||||
import space.kklochko.simple_jbdd.test_examples.tests.SimpleThenTestWithoutTitle
|
import space.kklochko.simple_jbdd.test_examples.tests.SimpleThenTestWithoutTitle
|
||||||
@@ -38,5 +40,7 @@ class IntegratedSimpleTestRunnerSpec extends Specification {
|
|||||||
new SimpleGivenWhenThenTest() || true
|
new SimpleGivenWhenThenTest() || true
|
||||||
new SimpleThenTestWithoutTitle() || true
|
new SimpleThenTestWithoutTitle() || true
|
||||||
new SimpleFailedThenTest() || false
|
new SimpleFailedThenTest() || false
|
||||||
|
new SimpleGivenGivenWhenWhenThenThenTest() || true
|
||||||
|
new SimpleEmptyTest() || false
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user