exiftool-vendored
Version:
Efficient, cross-platform access to ExifTool
102 lines • 6.61 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
const _chai_spec_1 = require("./_chai.spec");
const Tags_1 = require("./Tags");
describe("TagNames", () => {
it("should include all expected common tags", () => {
// Test presence of common tags
(0, _chai_spec_1.expect)(Tags_1.TagNames.includes("FileName")).to.be.true;
(0, _chai_spec_1.expect)(Tags_1.TagNames.includes("CreateDate")).to.be.true;
(0, _chai_spec_1.expect)(Tags_1.TagNames.includes("Make")).to.be.true;
(0, _chai_spec_1.expect)(Tags_1.TagNames.includes("Model")).to.be.true;
(0, _chai_spec_1.expect)(Tags_1.TagNames.includes("FileSize")).to.be.true;
(0, _chai_spec_1.expect)(Tags_1.TagNames.includes("FileType")).to.be.true;
(0, _chai_spec_1.expect)(Tags_1.TagNames.includes("MIMEType")).to.be.true;
(0, _chai_spec_1.expect)(Tags_1.TagNames.includes("ImageWidth")).to.be.true;
(0, _chai_spec_1.expect)(Tags_1.TagNames.includes("ImageHeight")).to.be.true;
(0, _chai_spec_1.expect)(Tags_1.TagNames.includes("Orientation")).to.be.true;
(0, _chai_spec_1.expect)(Tags_1.TagNames.includes("ExposureTime")).to.be.true;
(0, _chai_spec_1.expect)(Tags_1.TagNames.includes("ISO")).to.be.true;
(0, _chai_spec_1.expect)(Tags_1.TagNames.includes("FNumber")).to.be.true;
(0, _chai_spec_1.expect)(Tags_1.TagNames.includes("FocalLength")).to.be.true;
(0, _chai_spec_1.expect)(Tags_1.TagNames.includes("LensModel")).to.be.true;
(0, _chai_spec_1.expect)(Tags_1.TagNames.includes("GPSLatitude")).to.be.true;
(0, _chai_spec_1.expect)(Tags_1.TagNames.includes("GPSLongitude")).to.be.true;
(0, _chai_spec_1.expect)(Tags_1.TagNames.includes("Warning")).to.be.true;
(0, _chai_spec_1.expect)(Tags_1.TagNames.includes("Error")).to.be.true;
});
it("should have correct helper methods", () => {
// Test strEnum helper methods work
(0, _chai_spec_1.expect)(Tags_1.TagNames.getCI("filename")).to.equal("FileName");
(0, _chai_spec_1.expect)(Tags_1.TagNames.getCI("FILENAME")).to.equal("FileName");
(0, _chai_spec_1.expect)(Tags_1.TagNames.getCI("createdate")).to.equal("CreateDate");
(0, _chai_spec_1.expect)(Tags_1.TagNames.getCI("CREATEDATE")).to.equal("CreateDate");
// Test indexOf
(0, _chai_spec_1.expect)(Tags_1.TagNames.indexOf("FileName")).to.be.at.least(0);
(0, _chai_spec_1.expect)(Tags_1.TagNames.indexOf("CreateDate")).to.be.at.least(0);
(0, _chai_spec_1.expect)(Tags_1.TagNames.indexOf("NonExistentTag")).to.be.undefined;
// Test has/includes
(0, _chai_spec_1.expect)(Tags_1.TagNames.has("Make")).to.be.true;
(0, _chai_spec_1.expect)(Tags_1.TagNames.has("Model")).to.be.true;
(0, _chai_spec_1.expect)(Tags_1.TagNames.has("NonExistentTag")).to.be.false;
});
it("should not have duplicates", () => {
const uniqueValues = new Set(Tags_1.TagNames.values);
(0, _chai_spec_1.expect)(uniqueValues.size).to.equal(Tags_1.TagNames.values.length);
});
it("should have a reasonable number of tags", () => {
// Based on the mktags MAX_TAGS of 2500 and the included interfaces
(0, _chai_spec_1.expect)(Tags_1.TagNames.values.length).to.be.greaterThan(100);
(0, _chai_spec_1.expect)(Tags_1.TagNames.values.length).to.be.lessThan(3000);
});
it("should include vendored tags", () => {
// Check that our custom vendored tags are included
(0, _chai_spec_1.expect)(Tags_1.TagNames.includes("tz")).to.be.true;
(0, _chai_spec_1.expect)(Tags_1.TagNames.includes("zone")).to.be.true;
(0, _chai_spec_1.expect)(Tags_1.TagNames.includes("tzSource")).to.be.true;
(0, _chai_spec_1.expect)(Tags_1.TagNames.includes("zoneSource")).to.be.true;
(0, _chai_spec_1.expect)(Tags_1.TagNames.includes("errors")).to.be.true;
(0, _chai_spec_1.expect)(Tags_1.TagNames.includes("warnings")).to.be.true;
});
it("should include geolocation tags when available", () => {
// Check that geolocation tags are included
(0, _chai_spec_1.expect)(Tags_1.TagNames.includes("GeolocationPosition")).to.be.true;
(0, _chai_spec_1.expect)(Tags_1.TagNames.includes("GeolocationCity")).to.be.true;
(0, _chai_spec_1.expect)(Tags_1.TagNames.includes("GeolocationCountry")).to.be.true;
(0, _chai_spec_1.expect)(Tags_1.TagNames.includes("GeolocationRegion")).to.be.true;
(0, _chai_spec_1.expect)(Tags_1.TagNames.includes("GeolocationCountryCode")).to.be.true;
(0, _chai_spec_1.expect)(Tags_1.TagNames.includes("GeolocationTimeZone")).to.be.true;
});
it("should include MWG tags", () => {
// Check that MWG (Metadata Working Group) tags are included
(0, _chai_spec_1.expect)(Tags_1.TagNames.includes("Collections")).to.be.true;
(0, _chai_spec_1.expect)(Tags_1.TagNames.includes("Keywords")).to.be.true;
(0, _chai_spec_1.expect)(Tags_1.TagNames.includes("HierarchicalKeywords")).to.be.true;
// These are struct field names:
(0, _chai_spec_1.expect)(Tags_1.TagNames.includes("CollectionName")).to.be.false;
(0, _chai_spec_1.expect)(Tags_1.TagNames.includes("CollectionURI")).to.be.false;
});
it("should be case-insensitive for lookup", () => {
// Test various case combinations
const testCases = [
{ input: "filename", expected: "FileName" },
{ input: "FILENAME", expected: "FileName" },
{ input: "FileName", expected: "FileName" },
{ input: "makeRnotes", expected: undefined }, // Invalid case mix
];
for (const { input, expected } of testCases) {
(0, _chai_spec_1.expect)(Tags_1.TagNames.getCI(input)).to.equal(expected);
}
});
it("should have working firstValid method", () => {
(0, _chai_spec_1.expect)(Tags_1.TagNames.firstValid("nonexistent", "filename", "make")).to.equal("FileName");
(0, _chai_spec_1.expect)(Tags_1.TagNames.firstValid("MAKE", "model")).to.equal("Make");
(0, _chai_spec_1.expect)(Tags_1.TagNames.firstValid("nonexistent1", "nonexistent2")).to.be.undefined;
});
it("should have working mapValid method", () => {
(0, _chai_spec_1.expect)(Tags_1.TagNames.mapValid("FileName", (t) => t.toLowerCase())).to.equal("filename");
(0, _chai_spec_1.expect)(Tags_1.TagNames.mapValid("NonExistent", (t) => t.toLowerCase())).to.be
.undefined;
});
});
//# sourceMappingURL=Tags.spec.js.map