/* * Copyright (c) 2008-2011 Apple Inc. All rights reserved. * * @APPLE_APACHE_LICENSE_HEADER_START@ * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. * * @APPLE_APACHE_LICENSE_HEADER_END@ */ #include #include #include #include #include int has_prefix(const char* str, const char* prefix) { return (strncmp(str, prefix, strlen(prefix)) == 0); } int print_summary(FILE* f, long total, long pass, long fail, long skip) { double dpass = 100.0 ,dfail = 0.0, dskip = 0.0; fprintf(f, "Total: %ld\n", total); if (total) { dpass = ((double)pass / (double)(total - skip)) * 10000.0; dpass = floor(dpass) / 100.0; dfail = ((double)fail / (double)(total - skip)) * 10000.0; dfail = ceil(dfail) / 100.0; dskip = ((double)skip / (double)total) * 10000.0; dskip = ceil(dskip) / 100.0; } fprintf(f, "Passed: %ld (%0.2lf%%)\nFailed: %ld (%0.2lf%%)\nSkipped: %ld (%0.2lf%%)\n\n", pass, dpass, fail, dfail, skip, dskip); return 0; } int main(int argc, char* argv[]) { if (argc > 1) { fprintf(stderr, "%s: usage: summarize\n", argv[0]); exit(1); } /* FILE* f = fopen(argv[1], "w"); if (f == NULL) { perror(argv[1]); exit(1); } */ FILE* f = stdout; fprintf(f, "\n==================================================\n"); fprintf(f, "[SUMMARY] Test Summary\n"); fprintf(f, "==================================================\n\n"); size_t len; char* ln, lastln[1024]; int first_test = 1; long total = 0; long pass = 0; long fail = 0; long skip = 0; long total_total = 0; long total_pass = 0; long total_fail = 0; long total_skip = 0; for(;;) { ln = fgetln(stdin, &len); //if (ln) fprintf(stdout, "%.*s", (int)len, ln); if (ln == NULL || (has_prefix(ln, "[TEST]") && strncmp(ln, lastln, MIN(len,1024)))) { if (total || !first_test) { print_summary(f, total, pass, fail, skip); first_test = 0; } total_total += total; total_pass += pass; total_fail += fail; total_skip += skip; total = 0; pass = 0; fail = 0; skip = 0; if (ln) { fprintf(f, "%.*s", (int)len, ln); strncpy(lastln, ln, MIN(len,1024)); } else { fprintf(f, "[TOTAL]\n"); print_summary(f, total_total, total_pass, total_fail, total_skip); break; } } else if (has_prefix(ln, "[PASS]")) { ++total; ++pass; } else if (has_prefix(ln, "[FAIL]")) { ++total; ++fail; } else if (has_prefix(ln, "[SKIP]")) { ++total; ++skip; } } return (total_fail ? EXIT_FAILURE : EXIT_SUCCESS); }