Home Reference Source

src/__tests__/hyperscript.js


jest.dontMock('../hyperscript');
jest.dontMock('../Dryad');
var hyperscript = require('../hyperscript').default;
var Dryad = require('../Dryad').default;

class GenericDryad extends Dryad {}

function lookupClassByNameFn(className) {
  if (className === GenericDryad.name.toLowerCase()) {
    return GenericDryad;
  }
  throw new Error('Unexpected className: ' + className);
}

describe('hyperscript', function() {

  it('should pass a Dryad through', function() {
    let input = new GenericDryad();
    let output = hyperscript(input, lookupClassByNameFn);
    expect(output).toBe(input);
  });

  it('should create a Dryad from supplying the class', function() {
    let input = [GenericDryad, {key: 'value'}, []];
    let output = hyperscript(input, lookupClassByNameFn);
    expect(output.isDryad).toBe(true);
    expect(output.properties).toEqual({key: 'value'});
    expect(output.children).toEqual([]);
  });

  it('should create a Dryad from 3 args', function() {
    let input = ['genericdryad', {key: 'value'}, []];
    let output = hyperscript(input, lookupClassByNameFn);
    expect(output.isDryad).toBe(true);
    expect(output.properties).toEqual({key: 'value'});
    expect(output.children).toEqual([]);
  });

  it('should create a Dryad from 2 args', function() {
    let input = ['genericdryad', []];
    let output = hyperscript(input, lookupClassByNameFn);
    expect(output.isDryad).toBe(true);
    expect(output.properties).toEqual({});
    expect(output.children).toEqual([]);
  });

  it('should create a Dryad from 1 arg', function() {
    let input = ['genericdryad'];
    let output = hyperscript(input, lookupClassByNameFn);
    expect(output.isDryad).toBe(true);
    expect(output.properties).toEqual({});
    expect(output.children).toEqual([]);
  });

  it('should create Dryad for children', function() {
    let input = ['genericdryad', [
      ['genericdryad', {}, []]
    ]];
    let output = hyperscript(input, lookupClassByNameFn);
    expect(output.isDryad).toBe(true);
    expect(output.properties).toEqual({});
    expect(output.children.length).toEqual(1);
    expect(output.children[0].isDryad).toBeTruthy();
  });

});