TCK Results
===========

As required by the
[Eclipse Foundation Technology Compatibility Kit License](https://www.eclipse.org/legal/tck.php),
following is a summary of the TCK results for releases of Eclipse Yasson.

# 3.0.0-RC1 Certification Request

- [x] Organization Name ("Organization") and, if applicable, URL\
  Eclipse Foundation
- [x] Product Name, Version and download URL (if applicable)\
  [Eclipse Yasson 3.0.0-RC1](https://github.com/eclipse-ee4j/yasson/releases/tag/3.0.0-RC1)
- [x] Specification Name, Version and download URL\
  [Jakarta JSON Binding 3.0](https://jakarta.ee/specifications/jsonb/3.0/)
- [x] TCK Version, digital SHA-256 fingerprint and download URL\
  [Jakarta JSON Binding TCK 3.0.0](https://download.eclipse.org/ee4j/jakartaee-tck/jakartaee10/promoted/eftl/jakarta-jsonb-tck-3.0.0.zip), SHA-256: 954fd9a3a67059ddeabe5f51462a6a3b542c94fc798094dd8c312a6a28ef2d0b
- [x] Public URL of TCK Results Summary\
  [TCK results summary](https://eclipse-ee4j.github.io/yasson/tck/TCK-Results.html)
- [x] Any Additional Specification Certification Requirements\
  None
- [x] Java runtime used to run the implementation\
  OpenJDK 11.0.2+9
- [x] Summary of the information for the certification environment, operating system, cloud, ...\
  Linux
- [x] By checking this box I acknowledge that the Organization I represent accepts the terms of the [EFTL](https://www.eclipse.org/legal/tck.php).
- [x] By checking this box I attest that all TCK requirements have been met, including any compatibility rules.

Test results:

```
[INFO] Results:
[INFO] 
[WARNING] Tests run: 295, Failures: 0, Errors: 0, Skipped: 5
```

# 2.0.0 Certification Request

- [x] Organization Name ("Organization") and, if applicable, URL\
  Eclipse Foundation
- [x] Product Name, Version and download URL (if applicable)\
  [Eclipse Yasson 2.0.0](https://eclipse-ee4j.github.io/yasson)
- [x] Specification Name, Version and download URL\
  [Jakarta JSON Binding 2.0](https://jakarta.ee/specifications/jsonb/2.0/)
- [x] TCK Version, digital SHA-256 fingerprint and download URL\
  [Jakarta JSON Binding TCK 2.0.0](https://download.eclipse.org/ee4j/jakartaee-tck/jakartaee9-eftl/promoted/jakarta-jsonb-tck-2.0.0.zip), SHA-256: 7f3d072602f8935e46cf6ec94b0418af88cce176aa999b7a6a8701c7b9f65a52
- [x] Public URL of TCK Results Summary\
  [TCK results summary](https://eclipse-ee4j.github.io/yasson/tck/TCK-Results.html)
- [x] Any Additional Specification Certification Requirements\
  None
- [x] Java runtime used to run the implementation\
  Oracle JDK 1.8.0_191
- [x] Summary of the information for the certification environment, operating system, cloud, ...\
  Linux
- [x] By checking this box I acknowledge that the Organization I represent accepts the terms of the [EFTL](https://www.eclipse.org/legal/tck.php).
- [x] By checking this box I attest that all TCK requirements have been met, including any compatibility rules.

Test results:

```
[javatest.batch] Number of Tests Passed      = 266
[javatest.batch] Number of Tests Failed      = 0
[javatest.batch] Number of Tests with Errors = 0
```

# 1.0.8 Certification Request

- [x] Organization Name ("Organization") and, if applicable, URL\
  Eclipse Foundation
- [x] Product Name, Version and download URL (if applicable)\
  [Eclipse Yasson 1.0.8](https://eclipse-ee4j.github.io/yasson)
- [x] Specification Name, Version and download URL\
  [Jakarta JSON Binding 1.0](https://jakarta.ee/specifications/jsonb/1.0/)
- [x] TCK Version, digital SHA-256 fingerprint and download URL\
  [Jakarta JSON Binding TCK 1.0.1](http://download.eclipse.org/ee4j/jakartaee-tck/jakartaee8-eftl/promoted/eclipse-jsonb-tck-1.0.1.zip), SHA-256: c4382cc838113934494bcb5319715e31501f71abf6380523b961580c41c52eba
  SHA256SUM: c4382cc838113934494bcb5319715e31501f71abf6380523b961580c41c52eba
- [x] Public URL of TCK Results Summary\
  [TCK results summary](https://eclipse-ee4j.github.io/yasson/tck/TCK-Results.html)
- [x] Any Additional Specification Certification Requirements\
  None
- [x] Java runtime used to run the implementation\
  Oracle JDK 1.8.0_191
- [x] Summary of the information for the certification environment, operating system, cloud, ...\
  Linux
- [x] By checking this box I acknowledge that the Organization I represent accepts the terms of the [EFTL](https://www.eclipse.org/legal/tck.php).
- [x] By checking this box I attest that all TCK requirements have been met, including any compatibility rules.

Test results:

```
[javatest.batch] Number of Tests Passed      = 266
[javatest.batch] Number of Tests Failed      = 0
[javatest.batch] Number of Tests with Errors = 0
```
