| validateArchiveFiles(Messages, String, Archive) |   | 89% |   | 88% | 6 | 28 | 6 | 74 | 0 | 1 |
| validateIns(Messages, String, List, byte[], String) |   | 50% |   | 50% | 1 | 2 | 2 | 5 | 0 | 1 |
| hasListField(Messages, String, String[], int, boolean, Function) |   | 90% |   | 94% | 1 | 10 | 2 | 22 | 0 | 1 |
| validateArchive(Messages, String, String, InputStream) |   | 64% |  | 100% | 0 | 2 | 2 | 9 | 0 | 1 |
| validateTds(Messages, String, String, byte[]) |   | 65% |   | 50% | 1 | 2 | 2 | 5 | 0 | 1 |
| validateUrl(Messages, String, String) |  | 98% |   | 87% | 1 | 5 | 1 | 16 | 0 | 1 |
| validateCtanPath(Messages, String, String) |  | 100% |  | 100% | 0 | 5 | 0 | 12 | 0 | 1 |
| hasField(Messages, String, String, int, boolean, Function) |  | 100% |  | 100% | 0 | 7 | 0 | 11 | 0 | 1 |
| validateLicense(Messages, String) |  | 100% |  | 100% | 0 | 2 | 0 | 3 | 0 | 1 |
| validateTopic(Messages, String) |  | 100% |  | 100% | 0 | 2 | 0 | 3 | 0 | 1 |
| hasListField(Messages, String, String, int, boolean) |  | 100% |  | 100% | 0 | 2 | 0 | 2 | 0 | 1 |
| hasUrlListField(Messages, String, String, int) |  | 100% |  | 100% | 0 | 2 | 0 | 2 | 0 | 1 |
| AbstractSubmitValidator(TopicStore, LicenseStore) |  | 100% | | n/a | 0 | 1 | 0 | 4 | 0 | 1 |
| hasField(Messages, String, String, int) |  | 100% | | n/a | 0 | 1 | 0 | 1 | 0 | 1 |
| hasField(Messages, String, String, int, boolean) |  | 100% | | n/a | 0 | 1 | 0 | 1 | 0 | 1 |
| hasField(Messages, String, String, int, Function) |  | 100% | | n/a | 0 | 1 | 0 | 1 | 0 | 1 |
| hasListField(Messages, String, String[], int, boolean) |  | 100% | | n/a | 0 | 1 | 0 | 1 | 0 | 1 |
| static {...} |  | 100% | | n/a | 0 | 1 | 0 | 3 | 0 | 1 |
| lambda$hasUrlListField$0(Messages, String, String) |  | 100% | | n/a | 0 | 1 | 0 | 1 | 0 | 1 |
| extractContent(InputStream) | | 100% | | n/a | 0 | 1 | 0 | 1 | 0 | 1 |