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.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
```
