Fixes recursion bug in disambiguate_in().
[ohcount] / test / unit / license_test.h
1 // license_test.h written by Mitchell Foral. mitchell<att>caladbolg.net.
2 // See COPYING for license information.
3
4 #include <assert.h>
5 #include <dirent.h>
6 #include <stdio.h>
7 #include <string.h>
8
9 #include "../../src/licenses.h"
10
11 void src_vs_expected_tests() {
12   const char *src_licenses = "../src_licenses/";
13   char src[FILENAME_MAX];
14   strncpy(src, src_licenses, strlen(src_licenses));
15   char *s_p = src + strlen(src_licenses);
16
17   const char *expected_licenses = "../expected_licenses/";
18   char expected[FILENAME_MAX];
19   strncpy(expected, expected_licenses, strlen(expected_licenses));
20   char *e_p = expected + strlen(expected_licenses);
21
22   struct dirent *file;
23   DIR *d = opendir(src_licenses);
24   if (d) {
25     while ((file = readdir(d))) {
26       if (strcmp((const char *)file->d_name, ".") != 0 &&
27           strcmp((const char *)file->d_name, "..") != 0) {
28         char *p;
29         int length;
30
31         length = strlen(file->d_name);
32         strncpy(s_p, (const char *)file->d_name, length);
33         *(s_p + length) = '\0';
34
35         p = file->d_name + length;
36         while (*p != '.' && p > file->d_name) p--;
37         length = p - file->d_name;
38         strncpy(e_p, (const char *)file->d_name, length);
39         *(e_p + length) = '\0';
40         FILE *f = fopen((const char *)expected, "rb");
41         if (f) {
42           SourceFile *sf = ohcount_sourcefile_new((const char *)src);
43           LicenseList *iter = ohcount_sourcefile_get_license_list(sf)->head;
44           char line[40]; // max license name size
45           for (; fgets(line, sizeof(line), f); iter = iter->next) {
46             p = strstr(line, "\r");
47             if (p == NULL) p = strstr(line, "\n");
48             if (p) *p = '\0';
49             assert(iter->lic->name);
50             assert(strcmp(line, iter->lic->name) == 0);
51           }
52           fclose(f);
53           ohcount_sourcefile_free(sf);
54         }
55       }
56     }
57     closedir(d);
58   }
59 }
60
61 void very_long_file_test() {
62         int len = 5500000;
63         char *a = malloc(len);
64         memset(a, 'i', len);
65         a[len-1] = '\0';
66         a[len-2] = '\n';
67
68   SourceFile *sf = ohcount_sourcefile_new("foo.c");
69   ohcount_sourcefile_set_contents(sf, a);
70         strncpy(a, "int = 1;\n", strlen("int = 1;\n"));
71         ohcount_sourcefile_get_license_list(sf);
72 }
73
74 void all_license_tests() {
75         src_vs_expected_tests();
76         very_long_file_test();
77 }