PageRenderTime 53ms CodeModel.GetById 32ms RepoModel.GetById 0ms app.codeStats 0ms

/libexif/test/test-tagtable.c

https://bitbucket.org/cyanogenmod/android_hardware_ti_omap3
C | 220 lines | 118 code | 44 blank | 58 comment | 31 complexity | 5d075698d798e337fe12d772c91355c4 MD5 | raw file
Possible License(s): Apache-2.0, LGPL-2.1
  1. /* test-tagtable.c
  2. *
  3. * Test various functions that involve the tag table.
  4. *
  5. * Copyright © 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. #include "config.h"
  23. #include <libexif/exif-tag.h>
  24. #include <stdio.h>
  25. #include <string.h>
  26. #define VALIDATE(s) if (!(s)) {printf("Test %s FAILED\n", #s); fail=1;}
  27. #define TESTBLOCK(t) {int rc = (t); fail |= rc; \
  28. if (rc) printf("%s tests FAILED\n", #t);}
  29. /* Test exif_tag_get_support_level_in_ifd */
  30. static int support_level(void)
  31. {
  32. int fail = 0;
  33. /*
  34. * The tag EXIF_TAG_PLANAR_CONFIGURATION support varies greatly between
  35. * data types.
  36. */
  37. VALIDATE(exif_tag_get_support_level_in_ifd(EXIF_TAG_PLANAR_CONFIGURATION,
  38. EXIF_IFD_0, EXIF_DATA_TYPE_UNCOMPRESSED_CHUNKY) ==
  39. EXIF_SUPPORT_LEVEL_OPTIONAL)
  40. VALIDATE(exif_tag_get_support_level_in_ifd(EXIF_TAG_PLANAR_CONFIGURATION,
  41. EXIF_IFD_0, EXIF_DATA_TYPE_UNCOMPRESSED_PLANAR) ==
  42. EXIF_SUPPORT_LEVEL_MANDATORY)
  43. VALIDATE(exif_tag_get_support_level_in_ifd(EXIF_TAG_PLANAR_CONFIGURATION,
  44. EXIF_IFD_0, EXIF_DATA_TYPE_UNCOMPRESSED_YCC) ==
  45. EXIF_SUPPORT_LEVEL_OPTIONAL)
  46. VALIDATE(exif_tag_get_support_level_in_ifd(EXIF_TAG_PLANAR_CONFIGURATION,
  47. EXIF_IFD_0, EXIF_DATA_TYPE_COMPRESSED) ==
  48. EXIF_SUPPORT_LEVEL_NOT_RECORDED)
  49. VALIDATE(exif_tag_get_support_level_in_ifd(EXIF_TAG_PLANAR_CONFIGURATION,
  50. EXIF_IFD_0, EXIF_DATA_TYPE_COUNT) ==
  51. EXIF_SUPPORT_LEVEL_UNKNOWN)
  52. /*
  53. * The tag EXIF_TAG_YCBCR_POSITIONING support varies greatly between
  54. * IFDs
  55. */
  56. VALIDATE(exif_tag_get_support_level_in_ifd(EXIF_TAG_YCBCR_POSITIONING,
  57. EXIF_IFD_0, EXIF_DATA_TYPE_COMPRESSED) ==
  58. EXIF_SUPPORT_LEVEL_MANDATORY)
  59. VALIDATE(exif_tag_get_support_level_in_ifd(EXIF_TAG_YCBCR_POSITIONING,
  60. EXIF_IFD_1, EXIF_DATA_TYPE_COMPRESSED) ==
  61. EXIF_SUPPORT_LEVEL_OPTIONAL)
  62. VALIDATE(exif_tag_get_support_level_in_ifd(EXIF_TAG_YCBCR_POSITIONING,
  63. EXIF_IFD_EXIF, EXIF_DATA_TYPE_COMPRESSED) ==
  64. EXIF_SUPPORT_LEVEL_NOT_RECORDED)
  65. VALIDATE(exif_tag_get_support_level_in_ifd(EXIF_TAG_YCBCR_POSITIONING,
  66. EXIF_IFD_GPS, EXIF_DATA_TYPE_COMPRESSED) ==
  67. EXIF_SUPPORT_LEVEL_NOT_RECORDED)
  68. VALIDATE(exif_tag_get_support_level_in_ifd(EXIF_TAG_YCBCR_POSITIONING,
  69. EXIF_IFD_INTEROPERABILITY, EXIF_DATA_TYPE_COMPRESSED) ==
  70. EXIF_SUPPORT_LEVEL_NOT_RECORDED)
  71. /*
  72. * The tag EXIF_TAG_GPS_VERSION_ID has value 0 which should NOT be
  73. * treated specially
  74. */
  75. VALIDATE(exif_tag_get_support_level_in_ifd(EXIF_TAG_GPS_VERSION_ID,
  76. EXIF_IFD_GPS, EXIF_DATA_TYPE_COMPRESSED) ==
  77. EXIF_SUPPORT_LEVEL_OPTIONAL)
  78. VALIDATE(exif_tag_get_support_level_in_ifd(EXIF_TAG_GPS_VERSION_ID,
  79. EXIF_IFD_GPS, EXIF_DATA_TYPE_COUNT) ==
  80. EXIF_SUPPORT_LEVEL_OPTIONAL)
  81. VALIDATE(exif_tag_get_support_level_in_ifd(EXIF_TAG_GPS_VERSION_ID,
  82. EXIF_IFD_0, EXIF_DATA_TYPE_COMPRESSED) ==
  83. EXIF_SUPPORT_LEVEL_NOT_RECORDED)
  84. VALIDATE(exif_tag_get_support_level_in_ifd(EXIF_TAG_GPS_VERSION_ID,
  85. EXIF_IFD_0, EXIF_DATA_TYPE_COUNT) ==
  86. EXIF_SUPPORT_LEVEL_UNKNOWN)
  87. /* The unused tag 0xffff should NOT be treated specially */
  88. VALIDATE(exif_tag_get_support_level_in_ifd(0xffff,
  89. EXIF_IFD_0, EXIF_DATA_TYPE_COUNT) ==
  90. EXIF_SUPPORT_LEVEL_UNKNOWN)
  91. VALIDATE(exif_tag_get_support_level_in_ifd(0xffff,
  92. EXIF_IFD_0, EXIF_DATA_TYPE_COMPRESSED) ==
  93. EXIF_SUPPORT_LEVEL_NOT_RECORDED)
  94. /*
  95. * The tag EXIF_TAG_DOCUMENT_NAME isn't in the EXIF 2.2 standard but
  96. * it exists in the tag table, which causes it to show up as unknown
  97. * instead of not recorded.
  98. */
  99. VALIDATE(exif_tag_get_support_level_in_ifd(EXIF_TAG_DOCUMENT_NAME,
  100. EXIF_IFD_0, EXIF_DATA_TYPE_COUNT) ==
  101. EXIF_SUPPORT_LEVEL_UNKNOWN)
  102. VALIDATE(exif_tag_get_support_level_in_ifd(EXIF_TAG_DOCUMENT_NAME,
  103. EXIF_IFD_1, EXIF_DATA_TYPE_UNCOMPRESSED_CHUNKY) ==
  104. EXIF_SUPPORT_LEVEL_UNKNOWN)
  105. /*
  106. * The tag number for EXIF_TAG_INTEROPERABILITY_INDEX (1) exists in both
  107. * IFD Interoperability and IFD GPS (as EXIF_TAG_GPS_LATITUDE_REF) so
  108. * there are two entries in the table.
  109. */
  110. VALIDATE(exif_tag_get_support_level_in_ifd(EXIF_TAG_INTEROPERABILITY_INDEX,
  111. EXIF_IFD_INTEROPERABILITY, EXIF_DATA_TYPE_COMPRESSED) ==
  112. EXIF_SUPPORT_LEVEL_OPTIONAL)
  113. VALIDATE(exif_tag_get_support_level_in_ifd(EXIF_TAG_INTEROPERABILITY_INDEX,
  114. EXIF_IFD_INTEROPERABILITY, EXIF_DATA_TYPE_COUNT) ==
  115. EXIF_SUPPORT_LEVEL_OPTIONAL)
  116. VALIDATE(exif_tag_get_support_level_in_ifd(EXIF_TAG_INTEROPERABILITY_INDEX,
  117. EXIF_IFD_0, EXIF_DATA_TYPE_COMPRESSED) ==
  118. EXIF_SUPPORT_LEVEL_NOT_RECORDED)
  119. VALIDATE(exif_tag_get_support_level_in_ifd(EXIF_TAG_INTEROPERABILITY_INDEX,
  120. EXIF_IFD_0, EXIF_DATA_TYPE_COUNT) ==
  121. EXIF_SUPPORT_LEVEL_UNKNOWN)
  122. VALIDATE(exif_tag_get_support_level_in_ifd(EXIF_TAG_GPS_LATITUDE_REF,
  123. EXIF_IFD_GPS, EXIF_DATA_TYPE_COMPRESSED) ==
  124. EXIF_SUPPORT_LEVEL_OPTIONAL)
  125. VALIDATE(exif_tag_get_support_level_in_ifd(EXIF_TAG_GPS_LATITUDE_REF,
  126. EXIF_IFD_GPS, EXIF_DATA_TYPE_COUNT) ==
  127. EXIF_SUPPORT_LEVEL_OPTIONAL)
  128. /* The result of an unknown IFD should always be unknown */
  129. VALIDATE(exif_tag_get_support_level_in_ifd(EXIF_TAG_EXIF_VERSION,
  130. EXIF_IFD_COUNT, EXIF_DATA_TYPE_COUNT) ==
  131. EXIF_SUPPORT_LEVEL_UNKNOWN)
  132. VALIDATE(exif_tag_get_support_level_in_ifd(EXIF_TAG_EXIF_VERSION,
  133. EXIF_IFD_COUNT, EXIF_DATA_TYPE_COMPRESSED) ==
  134. EXIF_SUPPORT_LEVEL_UNKNOWN)
  135. return fail;
  136. }
  137. /* Test exif_tag_get_name_in_ifd */
  138. static int name(void)
  139. {
  140. int fail = 0;
  141. /*
  142. * The tag EXIF_TAG_GPS_VERSION_ID has value 0 which should NOT be
  143. * treated specially
  144. */
  145. VALIDATE(!strcmp(exif_tag_get_name_in_ifd(
  146. EXIF_TAG_GPS_VERSION_ID, EXIF_IFD_GPS),
  147. "GPSVersionID"))
  148. VALIDATE(exif_tag_get_name_in_ifd(
  149. EXIF_TAG_GPS_VERSION_ID, EXIF_IFD_0) == NULL)
  150. /*
  151. * The tag number for EXIF_TAG_INTEROPERABILITY_INDEX (1) exists in both
  152. * IFD Interoperability and IFD GPS (as EXIF_TAG_GPS_LATITUDE_REF) so
  153. * there are two entries in the table.
  154. */
  155. VALIDATE(!strcmp(exif_tag_get_name_in_ifd(
  156. EXIF_TAG_INTEROPERABILITY_INDEX, EXIF_IFD_INTEROPERABILITY),
  157. "InteroperabilityIndex"))
  158. VALIDATE(!strcmp(exif_tag_get_name_in_ifd(
  159. EXIF_TAG_GPS_LATITUDE_REF, EXIF_IFD_GPS),
  160. "GPSLatitudeRef"))
  161. /* Tag that doesn't appear in an IFD produces a NULL */
  162. VALIDATE(exif_tag_get_name_in_ifd(
  163. EXIF_TAG_EXIF_VERSION, EXIF_IFD_0) == NULL)
  164. /* Invalid IFD produces a NULL */
  165. VALIDATE(exif_tag_get_name_in_ifd(
  166. EXIF_TAG_EXIF_VERSION, EXIF_IFD_COUNT) == NULL)
  167. return fail;
  168. }
  169. int
  170. main ()
  171. {
  172. int fail = 0;
  173. TESTBLOCK(support_level())
  174. TESTBLOCK(name())
  175. return fail;
  176. }