Skip to content
Snippets Groups Projects
Select Git revision
1 result Searching

unlizeXmlNbSample.ipynb

Blame
  • WebAnnotation.test.js 4.29 KiB
    import WebAnnotation from '../src/WebAnnotation';
    
    /** */
    function createSubject(args = {}) {
      return new WebAnnotation({
        body: {
          value: 'body',
        },
        canvasId: 'canvasId',
        fragsel: { t: '5,10', xywh: 'xywh' },
        id: 'id',
        svg: 'svg',
        tags: ['tags'],
        ...args,
      });
    }
    
    describe('WebAnnotation', () => {
      let subject = createSubject();
      describe('constructor', () => {
        it('sets instance accessors', () => {
          ['canvasId', 'id', 'svg'].forEach((prop) => {
            expect(subject[prop]).toBe(prop);
          });
          expect(subject.fragsel).toStrictEqual({ t: '5,10', xywh: 'xywh' });
        });
        it('sets instance accessors for body', () => {
          ['body'].forEach((prop) => {
            expect(subject[prop].value).toBe(prop);
          });
        });
      });
      describe('target', () => {
        it('with svg and xywh', () => {
          expect(subject.target()).toEqual({
            selector: [
              {
                type: 'SvgSelector',
                value: 'svg',
              },
              {
                type: 'FragmentSelector',
                value: 't=5,10&xywh=xywh',
              },
            ],
            source: 'canvasId',
          });
        });
        it('with svg only', () => {
          subject = createSubject({ fragsel: null });
          expect(subject.target()).toEqual({
            selector: {
              type: 'SvgSelector',
              value: 'svg',
            },
            source: 'canvasId',
          });
        });
        it('with time interval only', () => {
          subject = createSubject({ fragsel: { t: '5,10' }, svg: null });
          expect(subject.target()).toEqual({
            selector: {
              type: 'FragmentSelector',
              value: 't=5,10',
            },
            source: 'canvasId',
          });
        });
        it('with time interval only - xywh present but null', () => {
          subject = createSubject({ fragsel: { t: '5,10', xywh: null }, svg: null });
          expect(subject.target()).toEqual({
            selector: {
              type: 'FragmentSelector',
              value: 't=5,10',
            },
            source: 'canvasId',
          });
        });
        it('with xywh only', () => {
          subject = createSubject({ fragsel: { xywh: 'xywh' }, svg: null });
          expect(subject.target()).toEqual({
            selector: {
              type: 'FragmentSelector',
              value: 'xywh=xywh',
            },
            source: 'canvasId',
          });
        });
        it('with xywh only - time interval present but null', () => {
          subject = createSubject({ fragsel: { t: null, xywh: 'xywh' }, svg: null });
          expect(subject.target()).toEqual({
            selector: {
              type: 'FragmentSelector',
              value: 'xywh=xywh',
            },
            source: 'canvasId',
          });
        });
        it('with no xywh or svg', () => {
          subject = createSubject({ fragsel: null, svg: null });
          expect(subject.target()).toBe('canvasId');
        });
      });
      describe('body', () => {
        it('with text and tags', () => {
          expect(subject.createBody()).toEqual([
            {
              type: 'TextualBody',
              value: 'body',
            },
            {
              purpose: 'tagging',
              type: 'TextualBody',
              value: 'tags',
            },
          ]);
        });
        it('with text only', () => {
          subject = createSubject({ image: null, tags: null });
          expect(subject.createBody()).toEqual({
            type: 'TextualBody',
            value: 'body',
          });
        });
        it('with tags only', () => {
          subject = createSubject({ body: null, image: null });
          expect(subject.createBody()).toEqual({
            purpose: 'tagging',
            type: 'TextualBody',
            value: 'tags',
          });
        });
        it('with image and text', () => {
          subject = createSubject({ body: { value: 'hello' }, image: { id: 'http://example.photo/pic.jpg' }, tags: null });
          expect(subject.createBody()).toEqual([
            {
              type: 'TextualBody',
              value: 'hello',
            },
            {
              id: 'http://example.photo/pic.jpg',
              type: 'Image',
            },
          ]);
        });
        it('with image only', () => {
          subject = createSubject({ body: null, image: { id: 'http://example.photo/pic.jpg' }, tags: null });
          expect(subject.createBody()).toEqual({
            id: 'http://example.photo/pic.jpg',
            type: 'Image',
          });
        });
      });
      describe('toJson', () => {
        it('generates a WebAnnotation', () => {
          expect(subject.toJson().type).toBe('Annotation');
        });
      });
    });