var DOM = require('../src/dom.js').DOM;

describe('dom', function() {
  var dom;

  beforeEach(function() {
    dom = new DOM();
  });

  describe('h', function() {

    it('should render using function', function() {
      var cbThis;
      var cdValue;
      dom.h('heading', 'content', function(value){
        cbThis = this;
        cbValue = value;
      });
      expect(cbThis).toEqual(dom);
      expect(cbValue).toEqual('content');
    });

    it('should update heading numbers', function() {
      dom.h('heading', function() {
        this.html('<h1>sub-heading</h1>');
      });
      expect(dom.toString()).toContain('<h1 id="heading">heading</h1>');
      expect(dom.toString()).toContain('<h2>sub-heading</h2>');
    });

    it('should properly number nested headings', function() {
      dom.h('heading', function() {
        dom.h('heading2', function() {
          this.html('<h1>heading3</h1>');
        });
      });
      dom.h('other1', function() {
        this.html('<h1>other2</h1>');
      });

      expect(dom.toString()).toContain('<h1 id="heading">heading</h1>');
      expect(dom.toString()).toContain('<h2 id="heading2">heading2</h2>');
      expect(dom.toString()).toContain('<h3>heading3</h3>');

      expect(dom.toString()).toContain('<h1 id="other1">other1</h1>');
      expect(dom.toString()).toContain('<h2>other2</h2>');
    });

  });

});