reduce code in fuzzer
[platform/upstream/libexif.git] / test / test-tagtable.c
1 /* test-tagtable.c
2  *
3  * Test various functions that involve the tag table.
4  *
5  * Copyright (c) 2009 Dan Fandrich <dan@coneharvesters.com>
6  *
7  * This library is free software; you can redistribute it and/or
8  * modify it under the terms of the GNU Lesser General Public
9  * License as published by the Free Software Foundation; either
10  * version 2 of the License, or (at your option) any later version.
11  *
12  * This library is distributed in the hope that it will be useful, 
13  * but WITHOUT ANY WARRANTY; without even the implied warranty of 
14  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
15  * Lesser General Public License for more details. 
16  *
17  * You should have received a copy of the GNU Lesser General Public
18  * License along with this library; if not, write to the
19  * Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
20  * Boston, MA  02110-1301  USA.
21  */
22
23 #include "config.h"
24 #include <libexif/exif-tag.h>
25 #include <stdio.h>
26 #include <string.h>
27
28 #define VALIDATE(s) if (!(s)) {printf("Test %s FAILED\n", #s); fail=1;}
29
30 #define TESTBLOCK(t) {int rc = (t); fail |= rc; \
31                       if (rc) printf("%s tests FAILED\n", #t);}
32
33 /* Test exif_tag_get_support_level_in_ifd */
34 static int support_level(void)
35 {
36     int fail = 0;
37
38     /*
39      * The tag EXIF_TAG_PLANAR_CONFIGURATION support varies greatly between
40      * data types.
41      */
42     VALIDATE(exif_tag_get_support_level_in_ifd(EXIF_TAG_PLANAR_CONFIGURATION,
43                EXIF_IFD_0, EXIF_DATA_TYPE_UNCOMPRESSED_CHUNKY) == 
44              EXIF_SUPPORT_LEVEL_OPTIONAL)
45
46     VALIDATE(exif_tag_get_support_level_in_ifd(EXIF_TAG_PLANAR_CONFIGURATION,
47                EXIF_IFD_0, EXIF_DATA_TYPE_UNCOMPRESSED_PLANAR) == 
48              EXIF_SUPPORT_LEVEL_MANDATORY)
49
50     VALIDATE(exif_tag_get_support_level_in_ifd(EXIF_TAG_PLANAR_CONFIGURATION,
51                EXIF_IFD_0, EXIF_DATA_TYPE_UNCOMPRESSED_YCC) == 
52              EXIF_SUPPORT_LEVEL_OPTIONAL)
53
54     VALIDATE(exif_tag_get_support_level_in_ifd(EXIF_TAG_PLANAR_CONFIGURATION,
55                EXIF_IFD_0, EXIF_DATA_TYPE_COMPRESSED) == 
56              EXIF_SUPPORT_LEVEL_NOT_RECORDED)
57
58     VALIDATE(exif_tag_get_support_level_in_ifd(EXIF_TAG_PLANAR_CONFIGURATION,
59                EXIF_IFD_0, EXIF_DATA_TYPE_UNKNOWN) == 
60              EXIF_SUPPORT_LEVEL_UNKNOWN)
61
62     /*
63      * The tag EXIF_TAG_YCBCR_POSITIONING support varies greatly between
64      * IFDs
65      */
66     VALIDATE(exif_tag_get_support_level_in_ifd(EXIF_TAG_YCBCR_POSITIONING,
67                EXIF_IFD_0, EXIF_DATA_TYPE_COMPRESSED) == 
68              EXIF_SUPPORT_LEVEL_MANDATORY)
69
70     VALIDATE(exif_tag_get_support_level_in_ifd(EXIF_TAG_YCBCR_POSITIONING,
71                EXIF_IFD_1, EXIF_DATA_TYPE_COMPRESSED) == 
72              EXIF_SUPPORT_LEVEL_OPTIONAL)
73
74     VALIDATE(exif_tag_get_support_level_in_ifd(EXIF_TAG_YCBCR_POSITIONING,
75                EXIF_IFD_EXIF, EXIF_DATA_TYPE_COMPRESSED) == 
76              EXIF_SUPPORT_LEVEL_NOT_RECORDED)
77
78     VALIDATE(exif_tag_get_support_level_in_ifd(EXIF_TAG_YCBCR_POSITIONING,
79                EXIF_IFD_GPS, EXIF_DATA_TYPE_COMPRESSED) == 
80              EXIF_SUPPORT_LEVEL_NOT_RECORDED)
81
82     VALIDATE(exif_tag_get_support_level_in_ifd(EXIF_TAG_YCBCR_POSITIONING,
83                EXIF_IFD_INTEROPERABILITY, EXIF_DATA_TYPE_COMPRESSED) == 
84              EXIF_SUPPORT_LEVEL_NOT_RECORDED)
85
86
87     /*
88      * The tag EXIF_TAG_GPS_VERSION_ID has value 0 which should NOT be
89      * treated specially
90      */
91     VALIDATE(exif_tag_get_support_level_in_ifd(EXIF_TAG_GPS_VERSION_ID,
92                EXIF_IFD_GPS, EXIF_DATA_TYPE_COMPRESSED) == 
93              EXIF_SUPPORT_LEVEL_OPTIONAL)
94
95     VALIDATE(exif_tag_get_support_level_in_ifd(EXIF_TAG_GPS_VERSION_ID,
96                EXIF_IFD_GPS, EXIF_DATA_TYPE_UNKNOWN) == 
97              EXIF_SUPPORT_LEVEL_OPTIONAL)
98
99     VALIDATE(exif_tag_get_support_level_in_ifd(EXIF_TAG_GPS_VERSION_ID,
100                EXIF_IFD_0, EXIF_DATA_TYPE_COMPRESSED) == 
101              EXIF_SUPPORT_LEVEL_NOT_RECORDED)
102
103     VALIDATE(exif_tag_get_support_level_in_ifd(EXIF_TAG_GPS_VERSION_ID,
104                EXIF_IFD_0, EXIF_DATA_TYPE_UNKNOWN) == 
105              EXIF_SUPPORT_LEVEL_UNKNOWN)
106
107     /* The unused tag 0xffff should NOT be treated specially */
108     VALIDATE(exif_tag_get_support_level_in_ifd(0xffff,
109                EXIF_IFD_0, EXIF_DATA_TYPE_UNKNOWN) == 
110              EXIF_SUPPORT_LEVEL_UNKNOWN)
111
112     VALIDATE(exif_tag_get_support_level_in_ifd(0xffff,
113                EXIF_IFD_0, EXIF_DATA_TYPE_COMPRESSED) == 
114              EXIF_SUPPORT_LEVEL_NOT_RECORDED)
115
116     /*
117      * The tag EXIF_TAG_DOCUMENT_NAME isn't in the EXIF 2.2 standard but
118      * it exists in the tag table, which causes it to show up as unknown
119      * instead of not recorded.
120      */
121     VALIDATE(exif_tag_get_support_level_in_ifd(EXIF_TAG_DOCUMENT_NAME,
122                EXIF_IFD_0, EXIF_DATA_TYPE_UNKNOWN) == 
123              EXIF_SUPPORT_LEVEL_UNKNOWN)
124
125     VALIDATE(exif_tag_get_support_level_in_ifd(EXIF_TAG_DOCUMENT_NAME,
126                EXIF_IFD_1, EXIF_DATA_TYPE_UNCOMPRESSED_CHUNKY) == 
127              EXIF_SUPPORT_LEVEL_UNKNOWN)
128
129
130     /*
131      * The tag number for EXIF_TAG_INTEROPERABILITY_INDEX (1) exists in both
132      * IFD Interoperability and IFD GPS (as EXIF_TAG_GPS_LATITUDE_REF) so
133      * there are two entries in the table.
134      */
135     VALIDATE(exif_tag_get_support_level_in_ifd(EXIF_TAG_INTEROPERABILITY_INDEX,
136                EXIF_IFD_INTEROPERABILITY, EXIF_DATA_TYPE_COMPRESSED) == 
137              EXIF_SUPPORT_LEVEL_OPTIONAL)
138
139     VALIDATE(exif_tag_get_support_level_in_ifd(EXIF_TAG_INTEROPERABILITY_INDEX,
140                EXIF_IFD_INTEROPERABILITY, EXIF_DATA_TYPE_UNKNOWN) == 
141              EXIF_SUPPORT_LEVEL_OPTIONAL)
142
143     VALIDATE(exif_tag_get_support_level_in_ifd(EXIF_TAG_INTEROPERABILITY_INDEX,
144                EXIF_IFD_0, EXIF_DATA_TYPE_COMPRESSED) == 
145              EXIF_SUPPORT_LEVEL_NOT_RECORDED)
146
147     VALIDATE(exif_tag_get_support_level_in_ifd(EXIF_TAG_INTEROPERABILITY_INDEX,
148                EXIF_IFD_0, EXIF_DATA_TYPE_UNKNOWN) == 
149              EXIF_SUPPORT_LEVEL_UNKNOWN)
150
151     VALIDATE(exif_tag_get_support_level_in_ifd(EXIF_TAG_GPS_LATITUDE_REF,
152                EXIF_IFD_GPS, EXIF_DATA_TYPE_COMPRESSED) == 
153              EXIF_SUPPORT_LEVEL_OPTIONAL)
154
155     VALIDATE(exif_tag_get_support_level_in_ifd(EXIF_TAG_GPS_LATITUDE_REF,
156                EXIF_IFD_GPS, EXIF_DATA_TYPE_UNKNOWN) == 
157              EXIF_SUPPORT_LEVEL_OPTIONAL)
158
159     /* The result of an unknown IFD should always be unknown */
160     VALIDATE(exif_tag_get_support_level_in_ifd(EXIF_TAG_EXIF_VERSION,
161                EXIF_IFD_COUNT, EXIF_DATA_TYPE_UNKNOWN) == 
162              EXIF_SUPPORT_LEVEL_UNKNOWN)
163
164     VALIDATE(exif_tag_get_support_level_in_ifd(EXIF_TAG_EXIF_VERSION,
165                EXIF_IFD_COUNT, EXIF_DATA_TYPE_COMPRESSED) == 
166              EXIF_SUPPORT_LEVEL_UNKNOWN)
167
168     return fail;
169 }
170
171 /* Test exif_tag_get_name_in_ifd  */
172 static int name(void)
173 {
174     int fail = 0;
175
176     /*
177      * The tag EXIF_TAG_GPS_VERSION_ID has value 0 which should NOT be
178      * treated specially
179      */
180     VALIDATE(!strcmp(exif_tag_get_name_in_ifd(
181                         EXIF_TAG_GPS_VERSION_ID, EXIF_IFD_GPS), 
182                      "GPSVersionID"))
183
184     VALIDATE(exif_tag_get_name_in_ifd(
185                         EXIF_TAG_GPS_VERSION_ID, EXIF_IFD_0) == NULL)
186
187     /*
188      * The tag number for EXIF_TAG_INTEROPERABILITY_INDEX (1) exists in both
189      * IFD Interoperability and IFD GPS (as EXIF_TAG_GPS_LATITUDE_REF) so
190      * there are two entries in the table.
191      */
192     VALIDATE(!strcmp(exif_tag_get_name_in_ifd(
193                 EXIF_TAG_INTEROPERABILITY_INDEX, EXIF_IFD_INTEROPERABILITY), 
194                      "InteroperabilityIndex"))
195
196     VALIDATE(!strcmp(exif_tag_get_name_in_ifd(
197                         EXIF_TAG_GPS_LATITUDE_REF, EXIF_IFD_GPS), 
198                      "GPSLatitudeRef"))
199
200     /* Tag that doesn't appear in an IFD produces a NULL */
201     VALIDATE(exif_tag_get_name_in_ifd(
202                         EXIF_TAG_EXIF_VERSION, EXIF_IFD_0) == NULL)
203
204     /* Invalid IFD produces a NULL */
205     VALIDATE(exif_tag_get_name_in_ifd(
206                         EXIF_TAG_EXIF_VERSION, EXIF_IFD_COUNT) == NULL)
207
208     return fail;
209 }
210
211 int
212 main ()
213 {
214     int fail = 0;
215
216     TESTBLOCK(support_level())
217     TESTBLOCK(name())
218
219     return fail;
220 }