UNPKG

exiftool-vendored

Version:
102 lines 6.61 kB
"use strict"; 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