quixote
Version:
CSS unit and integration testing
75 lines (56 loc) • 1.95 kB
JavaScript
// Copyright (c) 2014 Titanium I.T. LLC. All rights reserved. For license, see "README" or "LICENSE" file.
;
var ensure = require("../util/ensure.js");
var Value = require("./value.js");
var Pixels = require("./pixels.js");
var Me = module.exports = function Size(value) {
ensure.signature(arguments, [ [Number, Pixels] ]);
this._value = (typeof value === "number") ? Pixels.create(value) : value;
};
Value.extend(Me);
Me.create = function create(value) {
return new Me(value);
};
Me.createNone = function createNone() {
ensure.signature(arguments, []);
return new Me(Pixels.NONE);
};
Me.prototype.compatibility = function compatibility() {
return [ Me ];
};
Me.prototype.isNone = function isNone() {
return this._value.isNone();
};
Me.prototype.plus = Value.safe(function plus(operand) {
return new Me(this._value.plus(operand._value));
});
Me.prototype.minus = Value.safe(function minus(operand) {
return new Me(this._value.minus(operand._value));
});
Me.prototype.times = function times(operand) {
return new Me(this._value.times(operand));
};
Me.prototype.compare = Value.safe(function compare(that) {
return this._value.compare(that._value);
});
Me.prototype.diff = Value.safe(function diff(expected) {
var actualValue = this._value;
var expectedValue = expected._value;
if (actualValue.equals(expectedValue)) return "";
if (isNone(expected) && !isNone(this)) return "rendered";
if (!isNone(expected) && isNone(this)) return "not rendered";
var desc = actualValue.compare(expectedValue) > 0 ? " bigger" : " smaller";
return actualValue.diff(expectedValue) + desc;
});
Me.prototype.toString = function toString() {
ensure.signature(arguments, []);
if (isNone(this)) return "not rendered";
else return this._value.toString();
};
Me.prototype.toPixels = function toPixels() {
ensure.signature(arguments, []);
return this._value;
};
function isNone(size) {
return size._value.equals(Pixels.NONE);
}