UNPKG

lazo-next

Version:

A client-server web framework built on Node.js that allows front-end developers to easily create a 100% SEO compliant, component MVC structured web application with an optimized first page load.

147 lines (125 loc) 6.25 kB
define([ 'intern!bdd', 'intern/chai!', 'intern/chai!expect', 'sinon', 'sinon-chai', 'test/unit/utils', 'lazoBundle' ], function (bdd, chai, expect, sinon, sinonChai, utils, Bundler) { chai.use(sinonChai); var supportsImports = (function () { return LAZO.isClient && 'import' in document.createElement('link'); })(); with (bdd) { describe('bundler', function () { var bundle = new Bundler(); var expectedCssLinkProps = { rel: 'stylesheet', type: 'text/css', 'lazo-link': 'css', 'lazo-link-ctx': 'application' }; var expectedImportLinkProps = { rel: 'import', 'lazo-link': 'import', 'lazo-link-ctx': 'application' }; LAZO.conf = { libPath: '/lib' }; it('should call success', function () { var dfd = this.async(); var options = { success: function () { expect(spy).to.have.been.calledOnce; dfd.resolve(); } }; var spy = sinon.spy(options, 'success'); bundle.response('/foo', '/foo?bar=baz', options); }); it('should get the lazo library path', function () { expect(bundle.getLibPath()).to.equal(LAZO.conf.libPath); }); it('should resolve a bundle url', function () { var url = 'a/b/c'; expect(bundle.resolveBundleUrl(url)).to.equal(url); }); it('should sort css', function () { var links = [{ href: 'a.css' }, { href: 'b.css' }, { href: 'c.css' }]; var sorted = bundle.sortCss(links); expect(links[0]).to.equal(sorted[0]); expect(links[1]).to.equal(sorted[1]); expect(links[2]).to.equal(sorted[2]); }); it('should sort imports', function () { var links = [{ href: 'a.html' }, { href: 'b.html' }, { href: 'c.html' }]; var sorted = bundle.sortImports(links); expect(links[0]).to.equal(sorted[0]); expect(links[1]).to.equal(sorted[1]); expect(links[2]).to.equal(sorted[2]); }); it('should resolve an import', function () { if (LAZO.app.isServer) { var link = bundle.resolveImport('app/imports/a.html', 'application'); expect(link).to.be.null; } else { var cmpImportLink = '/components/bar/imports/index.html'; var appImportLink = '/app/imports/index.html'; $('head').append('<link lazo-link="import" lazo-link-ctx="bar" rel="import" href="' + cmpImportLink + '">'); $('head').append('<link lazo-link="import" lazo-link-ctx="application" rel="import" href="' + appImportLink + '">'); var cmpImport = bundle.resolveImport('index.html', 'bar'); var appImport = bundle.resolveImport('app/imports/index.html', 'application'); if (supportsImports) { } else { expect(cmpImport.getAttribute('lazo-link')).to.be.equal('import'); expect(cmpImport.getAttribute('href')).to.be.equal(cmpImportLink); expect(appImport.getAttribute('lazo-link')).to.be.equal('import'); expect(appImport.getAttribute('href')).to.be.equal(appImportLink); } } }); it('should create a css link object', function () { var linkStr = 'components/bar/a.css'; var linkObj = { href: 'components/bar/a.css', media: '(max-width: 800px)' }; var linkFromStr = bundle._createCSSLink(linkStr); var linkFromObj = bundle._createCSSLink(linkObj); expect(linkFromStr.href).to.be.equal(linkStr); for (var k in expectedCssLinkProps) { expect(linkFromStr[k]).to.be.equal(expectedCssLinkProps[k]); } expect(linkFromObj.href).to.be.equal(linkObj.href); expect(linkFromObj.media).to.be.equal(linkObj.media); for (var k in expectedCssLinkProps) { expect(linkFromObj[k]).to.be.equal(expectedCssLinkProps[k]); } }); it('should create an import link object', function () { var linkStr = 'components/bar/imports/a.html'; var linkObj = { href: 'components/bar/imports/a.html', type: 'text/html' }; var linkFromStr = bundle._createImportLink(linkStr); var linkFromObj = bundle._createImportLink(linkObj); expect(linkFromStr.href).to.be.equal(linkStr); for (var k in expectedImportLinkProps) { expect(linkFromStr[k]).to.be.equal(expectedImportLinkProps[k]); } expect(linkFromObj.href).to.be.equal(linkObj.href); expect(linkFromObj.media).to.be.equal(linkObj.media); for (var k in expectedImportLinkProps) { expect(linkFromObj[k]).to.be.equal(expectedImportLinkProps[k]); } }); it('should create an array of css link objects', function () { var links = ['components/bar/a.css', { href: 'components/bar/b.css', media: '(max-width: 800px)' }]; var linkObjs = bundle._createCSSLinks(links); expect(linkObjs.length).to.be.equal(2); }); it('should create an array of import link objects', function () { var links = ['components/bar/imports/a.html', { href: 'components/bar/imports/b.html', type: 'text/html' }]; var linkObjs = bundle._createImportLinks(links); expect(linkObjs.length).to.be.equal(2); }); }); } });