blob: 8dccddf721a87a1ce12c5c9a65f7350598c40968 [file] [log] [blame]
/*
* Licensed to the Apache Software Foundation (ASF) under one or more
* contributor license agreements. See the NOTICE file distributed with
* this work for additional information regarding copyright ownership.
* The ASF licenses this file to You 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.
*/
package org.apache.commons.imaging.formats.tiff;
import static org.junit.jupiter.api.Assertions.assertTrue;
import java.lang.reflect.Field;
import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
import java.util.Set;
import java.util.TreeSet;
import org.apache.commons.imaging.ImagingTest;
import org.apache.commons.imaging.formats.tiff.constants.AdobePageMaker6TagConstants;
import org.apache.commons.imaging.formats.tiff.constants.AdobePhotoshopTagConstants;
import org.apache.commons.imaging.formats.tiff.constants.AliasSketchbookProTagConstants;
import org.apache.commons.imaging.formats.tiff.constants.DcfTagConstants;
import org.apache.commons.imaging.formats.tiff.constants.DngTagConstants;
import org.apache.commons.imaging.formats.tiff.constants.ExifTagConstants;
import org.apache.commons.imaging.formats.tiff.constants.GdalLibraryTagConstants;
import org.apache.commons.imaging.formats.tiff.constants.GeoTiffTagConstants;
import org.apache.commons.imaging.formats.tiff.constants.GpsTagConstants;
import org.apache.commons.imaging.formats.tiff.constants.MicrosoftHdPhotoTagConstants;
import org.apache.commons.imaging.formats.tiff.constants.MicrosoftTagConstants;
import org.apache.commons.imaging.formats.tiff.constants.MolecularDynamicsGelTagConstants;
import org.apache.commons.imaging.formats.tiff.constants.OceScanjobTagConstants;
import org.apache.commons.imaging.formats.tiff.constants.Rfc2301TagConstants;
import org.apache.commons.imaging.formats.tiff.constants.Tiff4TagConstants;
import org.apache.commons.imaging.formats.tiff.constants.TiffEpTagConstants;
import org.apache.commons.imaging.formats.tiff.constants.TiffTagConstants;
import org.apache.commons.imaging.formats.tiff.constants.WangTagConstants;
import org.apache.commons.imaging.formats.tiff.taginfos.TagInfo;
import org.junit.jupiter.api.Test;
public class TiffTagIntegrityTest extends ImagingTest {
@Test
public void testTagIntegrity() {
verifyFields(AdobePageMaker6TagConstants.class,
AdobePageMaker6TagConstants.ALL_ADOBE_PAGEMAKER_6_TAGS);
verifyFields(AdobePhotoshopTagConstants.class,
AdobePhotoshopTagConstants.ALL_ADOBE_PHOTOSHOP_TAGS);
verifyFields(AliasSketchbookProTagConstants.class,
AliasSketchbookProTagConstants.ALL_ALIAS_SKETCHBOOK_PRO_TAGS);
verifyFields(DcfTagConstants.class, DcfTagConstants.ALL_DCF_TAGS);
verifyFields(DngTagConstants.class, DngTagConstants.ALL_DNG_TAGS);
verifyFields(ExifTagConstants.class, ExifTagConstants.ALL_EXIF_TAGS);
verifyFields(GeoTiffTagConstants.class,
GeoTiffTagConstants.ALL_GEO_TIFF_TAGS);
verifyFields(GdalLibraryTagConstants.class,
GdalLibraryTagConstants.ALL_GDAL_LIBRARY_TAGS);
verifyFields(GpsTagConstants.class, GpsTagConstants.ALL_GPS_TAGS);
verifyFields(
MolecularDynamicsGelTagConstants.class,
MolecularDynamicsGelTagConstants.ALL_MOLECULAR_DYNAMICS_GEL_TAGS);
verifyFields(MicrosoftTagConstants.class,
MicrosoftTagConstants.ALL_MICROSOFT_TAGS);
verifyFields(MicrosoftHdPhotoTagConstants.class,
MicrosoftHdPhotoTagConstants.ALL_MICROSOFT_HD_PHOTO_TAGS);
verifyFields(OceScanjobTagConstants.class,
OceScanjobTagConstants.ALL_OCE_SCANJOB_TAGS);
verifyFields(Rfc2301TagConstants.class,
Rfc2301TagConstants.ALL_RFC_2301_TAGS);
verifyFields(Tiff4TagConstants.class, Tiff4TagConstants.ALL_TIFF_4_TAGS);
verifyFields(TiffEpTagConstants.class,
TiffEpTagConstants.ALL_TIFF_EP_TAGS);
verifyFields(TiffTagConstants.class, TiffTagConstants.ALL_TIFF_TAGS);
verifyFields(WangTagConstants.class, WangTagConstants.ALL_WANG_TAGS);
}
private void verifyFields(final Class<?> cls, final List<TagInfo> allTags) {
final ArrayList<Integer> fieldTags = new ArrayList<>();
for (final Field field : cls.getFields()) {
field.setAccessible(true);
Object obj = null;
try {
obj = field.get(null);
} catch (final IllegalAccessException illegalAccess) {
}
if (obj == null) {
continue;
}
if (!(obj instanceof TagInfo)) {
continue;
}
final TagInfo src = (TagInfo) obj;
if (src.tag == -1) {
// Skip TiffTagConstants.TIFF_TAG_UNKNOWN
continue;
}
fieldTags.add(src.tag);
}
Collections.sort(fieldTags);
final Set<Integer> allTagSet = new TreeSet<>();
for (final TagInfo tagInfo : allTags) {
assertTrue(Collections.binarySearch(fieldTags, tagInfo.tag) >= 0);
allTagSet.add(tagInfo.tag);
}
for (final Integer tag : fieldTags) {
assertTrue(allTagSet.contains(tag));
}
}
}