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 Jakarta JSON Processing.

# 2.0.1 Certification Request

- [x] Organization Name ("Organization") and, if applicable, URL<br/>
  Eclipse Foundation
- [x] Product Name, Version and download URL (if applicable)<br/>
  [Eclipse JSON Processing 2.0.1](https://eclipse-ee4j.github.io/jsonp)
- [x] Specification Name, Version and download URL<br/>
   [Jakarta JSON Processing 2.0](https://jakarta.ee/specifications/jsonp/2.0/)
- [x] TCK Version, digital SHA-256 fingerprint and download URL<br/>
  [Jakarta JSON Processing TCK 2.0.1](https://download.eclipse.org/ee4j/jakartaee-tck/jakartaee9-eftl/promoted/jakarta-jsonp-tck-2.0.1.zip), SHA-256: 1cd043136790cc859ac9ba6949e9c8368b6f739b68353f297bd72c9baca6c155
- [x] Public URL of TCK Results Summary<br/>
  [TCK results summary](https://eclipse-ee4j.github.io/jsonp/tck/TCK-Results.html)
- [x] Any Additional Specification Certification Requirements<br/>
  None
- [x] Java runtime used to run the implementation<br/>
  OpenJDK 1.8.0_202,  OpenJDK 11.0.2
- [x] Summary of the information for the certification environment, operating system, cloud, ...<br/>
  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      = 169
[javatest.batch] Number of Tests Failed      = 0
[javatest.batch] Number of Tests with Errors = 0
```

# 2.0.0 Certification Request

- [x] Organization Name ("Organization") and, if applicable, URL<br/>
  Eclipse Foundation
- [x] Product Name, Version and download URL (if applicable)<br/>
  [Eclipse JSON Processing 2.0.0](https://eclipse-ee4j.github.io/jsonp)
- [x] Specification Name, Version and download URL<br/>
   [Jakarta JSON Processing 2.0](https://jakarta.ee/specifications/jsonp/2.0/)
- [x] TCK Version, digital SHA-256 fingerprint and download URL<br/>
  [Jakarta JSON Processing TCK 2.0.0](http://download.eclipse.org/jakartaee/jsonp/2.0/jakarta-jsonp-tck-2.0.0.zip), SHA-256: 457f557667eb5ca5e28507b8aae92b25dd69a1177b85b81b65339f322a70989b
- [x] Public URL of TCK Results Summary<br/>
  [TCK results summary](https://eclipse-ee4j.github.io/jsonp/tck/TCK-Results.html)
- [x] Any Additional Specification Certification Requirements<br/>
  None
- [x] Java runtime used to run the implementation<br/>
  Oracle JDK 1.8.0_191
- [x] Summary of the information for the certification environment, operating system, cloud, ...<br/>
  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      = 169
[javatest.batch] Number of Tests Failed      = 0
[javatest.batch] Number of Tests with Errors = 0
```

# 1.1.5 Certification Request

- [x] Organization Name ("Organization") and, if applicable, URL<br/>
  Eclipse Foundation
- [x] Product Name, Version and download URL (if applicable)<br/>
  [Eclipse JSON Processing 1.1.5](../index.html)
- [x] Specification Name, Version and download URL<br/>
   [Jakarta JSON Processing 1.1](https://jakarta.ee/specifications/jsonp/1.1/)
- [x] TCK Version, digital SHA-256 fingerprint and download URL<br/>
  [Jakarta JSON Processing TCK 1.1.0](http://download.eclipse.org/ee4j/jakartaee-tck/jakartaee8-eftl/promoted/eclipse-jsonp-tck-1.1.0.zip), SHA-256: 6b0ee9bfba9c72f9a78d9c074f8c4014c8fccfb57e43302dc8ad64378fc9a29c
- [x] Public URL of TCK Results Summary<br/>
  [TCK results summary](jakarta-json-processing-1.1.html)
- [x] Any Additional Specification Certification Requirements<br/>
  None
- [x] Java runtime used to run the implementation<br/>
  Oracle JDK 1.8.0_191
- [x] Summary of the information for the certification environment, operating system, cloud, ...<br/>
  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      = 169
[javatest.batch] Number of Tests Failed      = 0
[javatest.batch] Number of Tests with Errors = 0
```
