"use strict"; define(["chai", "chai-jquery", "chai-backbone", "../../../../../../src/js/models/metadata/eml211/EMLNumericDomain"], function(chai, chaiJquery, chaiBackbone, EMLNumericDomain) { // Configure the Chai assertion library var should = chai.should(); var expect = chai.expect; // Pull in Jquery and Backbone-specific assertion libraries chai.use(chaiJquery); // exported from chai-jquery.js chai.use(chaiBackbone); // exported from chai-backbone.js describe("EMLNumericDomain Test Suite", function (){ var emlNumericDomain = new EMLNumericDomain(); var intervalDomainXML; // mock response from the server var ratioDomainXML; // mock response from the server var intervalDomainAttrs; // object returned by EMLNumericDomain.parse() var ratioDomainAttrs; // object returned by EMLNumericDomain.parse() /* Setup */ before(function() { // Parse a nominal textDomain fragment intervalDomainXML = NumericDomainUtil.getTestIntervalNumericDomainXML(); intervalDomainAttrs = emlNumericDomain.parse({objectXML: intervalDomainXML}); // Parse an ordinal enumeratedDomain fragment ratioDomainXML = NumericDomainUtil.getTestRatioNumericDomainXML(); ratioDomainAttrs = emlNumericDomain.parse({objectXML: ratioDomainXML}); }); /* Tear down */ after(function() { intervalDomainXML = undefined; intervalDomainAttrs = undefined; ratioDomainXML = undefined; ratioDomainAttrs = undefined; }); describe("The EMLNumericDomain object", function() { it('should exist', function() { expect(emlNumericDomain).to.exist; emlNumericDomain.should.exist; }); }); describe("For an interval scale, .parse()", function() { it("should return an attributes object", function() { intervalDomainAttrs.should.be.an("object"); }); it("should return a unit object", function() { intervalDomainAttrs.unit.should.be.an("object"); intervalDomainAttrs.unit.standardUnit.should.be.a("string"); intervalDomainAttrs.unit.standardUnit.should.equal("meter"); }); it("should return a precision string", function() { intervalDomainAttrs.precision.should.be.a("string"); intervalDomainAttrs.precision.should.equal("1"); }); it("should return a numericDomain object", function() { intervalDomainAttrs.numericDomain.should.be.an("object"); intervalDomainAttrs.numericDomain.numberType.should.be.a("string"); intervalDomainAttrs.numericDomain.numberType.should.equal("real"); intervalDomainAttrs.numericDomain.bounds.should.be.an("array"); intervalDomainAttrs.numericDomain.bounds.length.should.equal(2); intervalDomainAttrs.numericDomain.bounds[0].minimum.should.equal("0"); intervalDomainAttrs.numericDomain.bounds[0].maximum.should.equal("100"); intervalDomainAttrs.numericDomain.bounds[1].minimum.should.equal("200"); expect(intervalDomainAttrs.numericDomain.bounds[1].maximum).to.not.exist; }); }); describe("For a ratio scale, .parse()", function() { it("should return an attributes object", function() { ratioDomainAttrs.should.be.an("object"); }); it("should return a unit object", function() { ratioDomainAttrs.unit.should.be.an("object"); ratioDomainAttrs.unit.standardUnit.should.be.a("string"); ratioDomainAttrs.unit.standardUnit.should.equal("celsius"); }); it("should return a numericDomain object", function() { ratioDomainAttrs.numericDomain.should.be.an("object"); ratioDomainAttrs.numericDomain.numberType.should.be.a("string"); ratioDomainAttrs.numericDomain.numberType.should.equal("float"); ratioDomainAttrs.numericDomain.bounds.should.be.an("array"); ratioDomainAttrs.numericDomain.bounds.length.should.equal(2); ratioDomainAttrs.numericDomain.bounds[0].minimum.should.equal("-40.0"); ratioDomainAttrs.numericDomain.bounds[0].maximum.should.equal("0.0"); ratioDomainAttrs.numericDomain.bounds[1].maximum.should.equal("40.0"); expect(ratioDomainAttrs.numericDomain.bounds[1].minimum).to.not.exist; }); }); }); var NumericDomainUtil = { /* Returns a nominal non-numeric text domain fragment */ getTestIntervalNumericDomainXML: function() { var xml = []; xml.push( "\n", "\t\n", "\t\tmeter\n", "\t\n", "\t1\n", "\t\n", "\t\treal\n", "\t\t\n", "\t\t\t0\n", "\t\t\t100\n", "\t\t\n", "\t\t\n", "\t\t\t200\n", "\t\t\n", "\t\n", "\n"); return xml.join(''); }, /* Returns an ordinal non-numeric enumerated domain fragment */ getTestRatioNumericDomainXML: function() { var xml = []; xml.push( "\n", "\t\n", "\t\tcelsius\n", "\t\n", "\t\n", "\t\tfloat\n", "\t\t\n", "\t\t\t-40.0\n", "\t\t\t0.0\n", "\t\t\n", "\t\t\n", "\t\t\t40.0\n", "\t\t\n", "\t\n", "\n"); return xml.join(''); } } });