3 * Test various functions that involve the tag table.
5 * Copyright (c) 2009 Dan Fandrich <dan@coneharvesters.com>
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.
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.
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.
24 #include <libexif/exif-tag.h>
28 #define VALIDATE(s) if (!(s)) {printf("Test %s FAILED\n", #s); fail=1;}
30 #define TESTBLOCK(t) {int rc = (t); fail |= rc; \
31 if (rc) printf("%s tests FAILED\n", #t);}
33 /* Test exif_tag_get_support_level_in_ifd */
34 static int support_level(void)
39 * The tag EXIF_TAG_PLANAR_CONFIGURATION support varies greatly between
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)
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)
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)
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)
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)
63 * The tag EXIF_TAG_YCBCR_POSITIONING support varies greatly between
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)
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)
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)
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)
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)
88 * The tag EXIF_TAG_GPS_VERSION_ID has value 0 which should NOT be
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)
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)
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)
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)
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)
112 VALIDATE(exif_tag_get_support_level_in_ifd(0xffff,
113 EXIF_IFD_0, EXIF_DATA_TYPE_COMPRESSED) ==
114 EXIF_SUPPORT_LEVEL_NOT_RECORDED)
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.
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)
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)
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.
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)
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)
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)
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)
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)
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)
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)
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)
171 /* Test exif_tag_get_name_in_ifd */
172 static int name(void)
177 * The tag EXIF_TAG_GPS_VERSION_ID has value 0 which should NOT be
180 VALIDATE(!strcmp(exif_tag_get_name_in_ifd(
181 EXIF_TAG_GPS_VERSION_ID, EXIF_IFD_GPS),
184 VALIDATE(exif_tag_get_name_in_ifd(
185 EXIF_TAG_GPS_VERSION_ID, EXIF_IFD_0) == NULL)
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.
192 VALIDATE(!strcmp(exif_tag_get_name_in_ifd(
193 EXIF_TAG_INTEROPERABILITY_INDEX, EXIF_IFD_INTEROPERABILITY),
194 "InteroperabilityIndex"))
196 VALIDATE(!strcmp(exif_tag_get_name_in_ifd(
197 EXIF_TAG_GPS_LATITUDE_REF, EXIF_IFD_GPS),
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)
204 /* Invalid IFD produces a NULL */
205 VALIDATE(exif_tag_get_name_in_ifd(
206 EXIF_TAG_EXIF_VERSION, EXIF_IFD_COUNT) == NULL)
216 TESTBLOCK(support_level())