Refactor IIIFInfo and add tests
This commit is contained in:
278
test/spec/ol/format/iiif.test.js
Normal file
278
test/spec/ol/format/iiif.test.js
Normal file
@@ -0,0 +1,278 @@
|
||||
import IIIFInfo from '../../../../src/ol/format/IIIFInfo.js';
|
||||
import {Versions} from '../../../../src/ol/format/IIIFInfo.js';
|
||||
|
||||
describe('ol.format.IIIF', function() {
|
||||
|
||||
const iiifInfo = new IIIFInfo(),
|
||||
imageInfoVersion1_0Level0 = {
|
||||
identifier: 'identifier-version-1.0',
|
||||
width: 2000,
|
||||
height: 1500,
|
||||
profile: 'http://library.stanford.edu/iiif/image-api/compliance.html#level0'
|
||||
},
|
||||
imageInfoVersion2Level1 = {
|
||||
'@context': 'http://iiif.io/api/image/2/context.json',
|
||||
'@id': 'http://iiif.test/version2/id',
|
||||
width: 2000,
|
||||
height: 1500,
|
||||
profile: [
|
||||
'http://iiif.io/api/image/2/level1.json'
|
||||
]
|
||||
},
|
||||
imageInfoVersion2Level2 = {
|
||||
'@context': 'http://iiif.io/api/image/2/context.json',
|
||||
'@id': 'http://iiif.test/version2/id',
|
||||
width: 2000,
|
||||
height: 1500,
|
||||
profile: [
|
||||
'http://iiif.io/api/image/2/level2.json'
|
||||
]
|
||||
};
|
||||
|
||||
describe('constructor', function() {
|
||||
|
||||
});
|
||||
|
||||
describe('setImageInfo', function() {
|
||||
|
||||
it('can handle image info JSON as object or as string serialization', function() {
|
||||
|
||||
iiifInfo.setImageInfo({
|
||||
'@context': 'http://iiif.io/api/image/3/context.json',
|
||||
'@id': 'http://iiif.test/id'
|
||||
});
|
||||
expect(iiifInfo.getImageApiVersion()).to.be(Versions.VERSION3);
|
||||
|
||||
iiifInfo.setImageInfo('{"@context": "http://iiif.io/api/image/2/context.json","@id":"http://iiif.test/id"}');
|
||||
expect(iiifInfo.getImageApiVersion()).to.be(Versions.VERSION2);
|
||||
|
||||
});
|
||||
|
||||
});
|
||||
|
||||
describe('getImageApiVersion', function() {
|
||||
|
||||
it('provides the correct Image API version', function() {
|
||||
|
||||
iiifInfo.setImageInfo({
|
||||
'@id': 'http://iiif.test/id'
|
||||
});
|
||||
expect(function() {
|
||||
iiifInfo.getImageApiVersion();
|
||||
}).to.throwException();
|
||||
|
||||
iiifInfo.setImageInfo({
|
||||
'identifier': 'http://iiif.test/id',
|
||||
'profile': 'this is no valid profile'
|
||||
});
|
||||
expect(function() {
|
||||
iiifInfo.getImageApiVersion();
|
||||
}).to.throwException();
|
||||
|
||||
iiifInfo.setImageInfo({
|
||||
'@context': 'this is no valid context',
|
||||
'@id': 'http://iiif.test/id'
|
||||
});
|
||||
expect(function() {
|
||||
iiifInfo.getImageApiVersion();
|
||||
}).to.throwException();
|
||||
|
||||
iiifInfo.setImageInfo({
|
||||
'identifier': 'http://iiif.test/id',
|
||||
profile: 'http://library.stanford.edu/iiif/image-api/compliance.html#level0'
|
||||
});
|
||||
expect(iiifInfo.getImageApiVersion()).to.be(Versions.VERSION1);
|
||||
|
||||
iiifInfo.setImageInfo({
|
||||
'@context': 'http://library.stanford.edu/iiif/image-api/1.1/context.json',
|
||||
'@id': 'http://iiif.test/id'
|
||||
});
|
||||
expect(iiifInfo.getImageApiVersion()).to.be(Versions.VERSION1);
|
||||
|
||||
iiifInfo.setImageInfo({
|
||||
'@context': 'http://iiif.io/api/image/1/context.json',
|
||||
'identifier': 'http://iiif.test/id'
|
||||
});
|
||||
expect(iiifInfo.getImageApiVersion()).to.be(Versions.VERSION1);
|
||||
|
||||
iiifInfo.setImageInfo({
|
||||
'@context': 'http://iiif.io/api/image/2/context.json',
|
||||
'@id': 'http://iiif.test/id'
|
||||
});
|
||||
expect(iiifInfo.getImageApiVersion()).to.be(Versions.VERSION2);
|
||||
|
||||
iiifInfo.setImageInfo({
|
||||
'@context': 'http://iiif.io/api/image/3/context.json',
|
||||
'id': 'http://iiif.test/id'
|
||||
});
|
||||
expect(iiifInfo.getImageApiVersion()).to.be(Versions.VERSION3);
|
||||
|
||||
});
|
||||
|
||||
});
|
||||
|
||||
describe('getComplianceLevelFromProfile', function() {
|
||||
|
||||
it('detects the correct compliance level', function() {
|
||||
|
||||
iiifInfo.setImageInfo({
|
||||
'@context': 'http://iiif.io/api/image/2/context.json',
|
||||
'profile': 'level0'
|
||||
});
|
||||
expect(iiifInfo.getComplianceLevelFromProfile()).to.be(undefined);
|
||||
|
||||
iiifInfo.setImageInfo({
|
||||
'@context': 'http://iiif.io/api/image/2/context.json',
|
||||
'profile': 'http://iiif.io/api/image/level3.json'
|
||||
});
|
||||
expect(iiifInfo.getComplianceLevelFromProfile()).to.be(undefined);
|
||||
|
||||
iiifInfo.setImageInfo({
|
||||
'@context': 'http://iiif.io/api/image/2/context.json',
|
||||
'profile': 'level1'
|
||||
});
|
||||
expect(iiifInfo.getComplianceLevelFromProfile()).to.be(undefined);
|
||||
|
||||
iiifInfo.setImageInfo({
|
||||
'@context': 'http://iiif.io/api/image/2/context.json',
|
||||
'profile': 'http://iiif.io/api/image/2/level2.json'
|
||||
});
|
||||
expect(iiifInfo.getComplianceLevelFromProfile()).to.be('level2');
|
||||
|
||||
iiifInfo.setImageInfo({
|
||||
'@context': 'http://iiif.io/api/image/2/context.json',
|
||||
'profile': ['http://iiif.io/api/image/2/level1.json']
|
||||
});
|
||||
expect(iiifInfo.getComplianceLevelFromProfile()).to.be('level1');
|
||||
|
||||
iiifInfo.setImageInfo({
|
||||
'@context': 'http://iiif.io/api/image/3/context.json',
|
||||
'profile': 'level4'
|
||||
});
|
||||
expect(iiifInfo.getComplianceLevelFromProfile()).to.be(undefined);
|
||||
|
||||
iiifInfo.setImageInfo({
|
||||
'@context': 'http://iiif.io/api/image/3/context.json',
|
||||
'profile': 'http://iiif.io/api/image/3/level3.json'
|
||||
});
|
||||
expect(iiifInfo.getComplianceLevelFromProfile()).to.be(undefined);
|
||||
|
||||
iiifInfo.setImageInfo({
|
||||
'@context': 'http://iiif.io/api/image/3/context.json',
|
||||
'profile': 'http://iiif.io/api/image/2/level1.json'
|
||||
});
|
||||
expect(iiifInfo.getComplianceLevelFromProfile()).to.be(undefined);
|
||||
|
||||
iiifInfo.setImageInfo({
|
||||
'@context': 'http://iiif.io/api/image/3/context.json',
|
||||
'profile': 'level2'
|
||||
});
|
||||
expect(iiifInfo.getComplianceLevelFromProfile()).to.be('level2');
|
||||
|
||||
iiifInfo.setImageInfo({
|
||||
'@context': 'http://iiif.io/api/image/3/context.json',
|
||||
'profile': 'http://iiif.io/api/image/3/level1.json'
|
||||
});
|
||||
expect(iiifInfo.getComplianceLevelFromProfile()).to.be('level1');
|
||||
});
|
||||
|
||||
});
|
||||
|
||||
describe('getComplianceLevelSupportedFeatures', function() {
|
||||
|
||||
it('provides the correct features for given versions and compliance levels', function() {
|
||||
|
||||
iiifInfo.setImageInfo({
|
||||
'@context': 'http://library.stanford.edu/iiif/image-api/1.1/context.json',
|
||||
'profile': 'http://library.stanford.edu/iiif/image-api/compliance.html#level0'
|
||||
});
|
||||
expect();
|
||||
|
||||
});
|
||||
|
||||
});
|
||||
|
||||
describe('getTileSourceOptions', function() {
|
||||
|
||||
it('produces options from minimal information responses', function() {
|
||||
|
||||
let imageInfo = {
|
||||
width: 2000,
|
||||
height: 1500
|
||||
};
|
||||
|
||||
expect(function() {
|
||||
iiifInfo.setImageInfo(imageInfo);
|
||||
iiifInfo.getTileSourceOptions();
|
||||
}).to.throwException();
|
||||
|
||||
imageInfo = {
|
||||
identifier: 'id',
|
||||
profile: 'http://library.stanford.edu/iiif/image-api/compliance.html#level0'
|
||||
};
|
||||
|
||||
iiifInfo.setImageInfo(imageInfo);
|
||||
let options = iiifInfo.getTileSourceOptions(imageInfo);
|
||||
|
||||
expect(options).to.be.an('object');
|
||||
expect(options).to.have.property('version', Versions.VERSION1);
|
||||
|
||||
iiifInfo.setImageInfo(imageInfoVersion1_0Level0);
|
||||
options = iiifInfo.getTileSourceOptions();
|
||||
|
||||
expect(options).to.not.be(undefined);
|
||||
expect(options).to.not.be(null);
|
||||
expect(options).to.have.property('version', Versions.VERSION1);
|
||||
expect(options).to.have.property('size');
|
||||
expect(options.size).to.be.an('array');
|
||||
expect(options.size.length).to.be(2);
|
||||
expect(options.size[0]).to.be(2000);
|
||||
expect(options.size[1]).to.be(1500);
|
||||
expect(options.quality).to.be('native');
|
||||
expect(options.url).to.be(undefined);
|
||||
expect(options.sizes).to.be(undefined);
|
||||
expect(options.tileSize).to.be(undefined);
|
||||
expect(options.format).to.be('jpg');
|
||||
expect(options.supports).to.be.empty();
|
||||
|
||||
imageInfo = {
|
||||
'@context': 'http://iiif.io/api/image/2/context.json',
|
||||
'@id': 'http://iiif.test/version2/id'
|
||||
};
|
||||
iiifInfo.setImageInfo(imageInfo);
|
||||
options = iiifInfo.getTileSourceOptions();
|
||||
|
||||
expect(options).to.be.an('object');
|
||||
expect(options).to.have.property('version', Versions.VERSION2);
|
||||
expect(options).to.have.property('url', 'http://iiif.test/version2/id');
|
||||
expect(options).to.have.property('format', 'jpg');
|
||||
|
||||
});
|
||||
|
||||
it('uses preferred options if applicable', function() {
|
||||
|
||||
iiifInfo.setImageInfo(imageInfoVersion2Level2);
|
||||
const options = iiifInfo.getTileSourceOptions({
|
||||
quality: 'bitonal',
|
||||
format: 'png'
|
||||
});
|
||||
expect(options).to.have.property('quality', 'bitonal');
|
||||
expect(options).to.have.property('format', 'png');
|
||||
|
||||
});
|
||||
|
||||
it('ignores preferred options that are not supported', function() {
|
||||
|
||||
iiifInfo.setImageInfo(imageInfoVersion2Level1);
|
||||
const options = iiifInfo.getTileSourceOptions({
|
||||
quality: 'bitonal',
|
||||
format: 'png'
|
||||
});
|
||||
expect(options).to.have.property('quality', 'default');
|
||||
expect(options).to.have.property('format', 'jpg');
|
||||
|
||||
});
|
||||
|
||||
});
|
||||
|
||||
});
|
||||
Reference in New Issue
Block a user