| removeProduct(ProductId) |  | 0% | | n/a | 1 | 1 | 17 | 17 | 1 | 1 |
| storeProduct(Product) |   | 81% |   | 66% | 3 | 7 | 8 | 33 | 0 | 1 |
| schemaExists() |   | 35% | | n/a | 0 | 1 | 6 | 11 | 0 | 1 |
| getProduct(ProductId) |   | 82% |  | 100% | 0 | 2 | 5 | 22 | 0 | 1 |
| getProductSource(ProductId) |  | 0% |  | 0% | 2 | 2 | 4 | 4 | 1 | 1 |
| createSchema() |   | 78% |   | 50% | 1 | 2 | 5 | 16 | 0 | 1 |
| JsonProductStorage() |  | 0% | | n/a | 1 | 1 | 2 | 2 | 1 | 1 |
| setRejectInvalidSignatures(boolean) |  | 0% | | n/a | 1 | 1 | 2 | 2 | 1 | 1 |
| setTestSignatures(boolean) |  | 0% | | n/a | 1 | 1 | 2 | 2 | 1 | 1 |
| setKeychain(ProductKeyChain) |  | 0% | | n/a | 1 | 1 | 2 | 2 | 1 | 1 |
| getKeychain() |  | 0% | | n/a | 1 | 1 | 1 | 1 | 1 | 1 |
| notifyListeners(StorageEvent) | | 0% | | n/a | 1 | 1 | 1 | 1 | 1 | 1 |
| addStorageListener(StorageListener) | | 0% | | n/a | 1 | 1 | 1 | 1 | 1 | 1 |
| removeStorageListener(StorageListener) | | 0% | | n/a | 1 | 1 | 1 | 1 | 1 | 1 |
| configure(Config) |  | 100% |   | 50% | 2 | 3 | 0 | 10 | 0 | 1 |
| JsonProductStorage(String, String, String) |  | 100% | | n/a | 0 | 1 | 0 | 4 | 0 | 1 |
| startup() |  | 100% |   | 50% | 1 | 2 | 0 | 5 | 0 | 1 |
| storeProductSource(ProductSource) |  | 100% | | n/a | 0 | 1 | 0 | 3 | 0 | 1 |
| hasProduct(ProductId) |  | 100% |  | 100% | 0 | 2 | 0 | 1 | 0 | 1 |
| JsonProductStorage(String, String) |  | 100% | | n/a | 0 | 1 | 0 | 2 | 0 | 1 |
| static {...} |  | 100% | | n/a | 0 | 1 | 0 | 1 | 0 | 1 |
| setTable(String) |  | 100% | | n/a | 0 | 1 | 0 | 2 | 0 | 1 |
| isRejectInvalidSignatures() |  | 100% | | n/a | 0 | 1 | 0 | 1 | 0 | 1 |
| isTestSignatures() |  | 100% | | n/a | 0 | 1 | 0 | 1 | 0 | 1 |
| getTable() |  | 100% | | n/a | 0 | 1 | 0 | 1 | 0 | 1 |
| getVerifier() |  | 100% | | n/a | 0 | 1 | 0 | 1 | 0 | 1 |