UNPKG

quixote

Version:

CSS unit and integration testing

62 lines (47 loc) 1.71 kB
// Copyright (c) 2014 Titanium I.T. LLC. All rights reserved. For license, see "README" or "LICENSE" file. "use strict"; var ensure = require("../util/ensure.js"); var Size = require("../values/size.js"); var Descriptor = require("./descriptor.js"); var SizeDescriptor = require("./size_descriptor.js"); var Value = require("../values/value.js"); var SizeMultiple = require("./size_multiple.js"); var PLUS = 1; var MINUS = -1; var Me = module.exports = function RelativeSize(direction, relativeTo, amount) { ensure.signature(arguments, [ Number, Descriptor, [Number, Descriptor, Value] ]); this.should = this.createShould(); this._direction = direction; this._relativeTo = relativeTo; if (typeof amount === "number") { this._amount = Size.create(Math.abs(amount)); if (amount < 0) this._direction *= -1; } else { this._amount = amount; } }; SizeDescriptor.extend(Me); Me.larger = factoryFn(PLUS); Me.smaller = factoryFn(MINUS); Me.prototype.value = function value() { ensure.signature(arguments, []); var baseValue = this._relativeTo.value(); var relativeValue = this._amount.value(); if (this._direction === PLUS) return baseValue.plus(relativeValue); else return baseValue.minus(relativeValue); }; Me.prototype.toString = function toString() { ensure.signature(arguments, []); var base = this._relativeTo.toString(); if (this._amount.equals(Size.create(0))) return base; var relation = this._amount.toString(); if (this._direction === PLUS) relation += " larger than "; else relation += " smaller than "; return relation + base; }; function factoryFn(direction) { return function factory(relativeTo, amount) { return new Me(direction, relativeTo, amount); }; }