import { Cartesian4 } from "../../Source/Cesium.js"; import { Color } from "../../Source/Cesium.js"; import { Math as CesiumMath } from "../../Source/Cesium.js"; import createPackableSpecs from "../createPackableSpecs.js"; describe("Core/Color", function () { it("Constructing without arguments produces expected defaults", function () { var v = new Color(); expect(v.red).toEqual(1.0); expect(v.green).toEqual(1.0); expect(v.blue).toEqual(1.0); expect(v.alpha).toEqual(1.0); }); it("Constructing with arguments sets property values", function () { var v = new Color(0.1, 0.2, 0.3, 0.4); expect(v.red).toEqual(0.1); expect(v.green).toEqual(0.2); expect(v.blue).toEqual(0.3); expect(v.alpha).toEqual(0.4); }); it("fromBytes without arguments produces expected defaults", function () { var v = new Color(); expect(v.red).toEqual(1.0); expect(v.green).toEqual(1.0); expect(v.blue).toEqual(1.0); expect(v.alpha).toEqual(1.0); }); it("fromBytes with arguments sets property values", function () { var v = Color.fromBytes(0, 255, 51, 102); expect(v.red).toEqual(0.0); expect(v.green).toEqual(1.0); expect(v.blue).toEqual(0.2); expect(v.alpha).toEqual(0.4); }); it("fromBytes works with result parameter", function () { var result = new Color(); var v = Color.fromBytes(0, 255, 51, 102, result); expect(v).toBe(result); expect(v.red).toEqual(0.0); expect(v.green).toEqual(1.0); expect(v.blue).toEqual(0.2); expect(v.alpha).toEqual(0.4); }); it("toBytes returns the same values that fromBytes took", function () { var r = 5; var g = 87; var b = 23; var a = 88; var c = Color.fromBytes(r, g, b, a); var bytes = c.toBytes(); expect(bytes).toEqual([r, g, b, a]); }); it("toBytes works with a result parameter", function () { var color = new Color(0.1, 0.2, 0.3, 0.4); var result = []; var expectedResult = [25, 51, 76, 102]; var returnedResult = color.toBytes(result); expect(returnedResult).toBe(result); expect(returnedResult).toEqual(expectedResult); }); it("byteToFloat works in all cases", function () { expect(Color.byteToFloat(0)).toEqual(0); expect(Color.byteToFloat(255)).toEqual(1.0); expect(Color.byteToFloat(127)).toEqual(127 / 255); }); it("floatToByte works in all cases", function () { expect(Color.floatToByte(0)).toEqual(0); expect(Color.floatToByte(1.0)).toEqual(255); expect(Color.floatToByte(127 / 255)).toEqual(127); }); it("fromCartesian4 returns a color with corrrect values", function () { var color = Color.fromCartesian4(new Cartesian4(1.0, 2.0, 3.0, 4.0)); expect(color).toEqual(new Color(1.0, 2.0, 3.0, 4.0)); }); it("fromCartesian4 result param returns color with correct values", function () { var color = new Color(); var result = Color.fromCartesian4( new Cartesian4(1.0, 2.0, 3.0, 4.0), color ); expect(color).toBe(result); expect(color).toEqual(new Color(1.0, 2.0, 3.0, 4.0)); }); it("fromCartesian4 throws without a Cartesian4", function () { expect(function () { Color.fromCartesian4(); }).toThrowDeveloperError(); }); it("clone with no parameters returns a new identical copy.", function () { var v = new Color(0.1, 0.2, 0.3, 0.4); var clone = v.clone(); expect(clone).toEqual(v); expect(clone).not.toBe(v); }); it("clone with a parameter modifies the parameter.", function () { var v = new Color(0.1, 0.2, 0.3, 0.4); var v2 = new Color(); var clone = v.clone(v2); expect(clone).toEqual(v2); expect(clone).toBe(v2); }); it("equals works", function () { var v = new Color(0.1, 0.2, 0.3, 0.4); var v2 = new Color(0.1, 0.2, 0.3, 0.4); var v3 = new Color(0.1, 0.2, 0.3, 0.5); var v4 = new Color(0.1, 0.2, 0.5, 0.4); var v5 = new Color(0.1, 0.5, 0.3, 0.4); var v6 = new Color(0.5, 0.2, 0.3, 0.4); expect(v.equals(v2)).toEqual(true); expect(v.equals(v3)).toEqual(false); expect(v.equals(v4)).toEqual(false); expect(v.equals(v5)).toEqual(false); expect(v.equals(v6)).toEqual(false); }); it("equalsEpsilon works", function () { var v = new Color(0.1, 0.2, 0.3, 0.4); var v2 = new Color(0.1, 0.2, 0.3, 0.4); var v3 = new Color(0.1, 0.2, 0.3, 0.5); var v4 = new Color(0.1, 0.2, 0.5, 0.4); var v5 = new Color(0.1, 0.5, 0.3, 0.4); var v6 = new Color(0.5, 0.2, 0.3, 0.4); expect(v.equalsEpsilon(v2, 0.0)).toEqual(true); expect(v.equalsEpsilon(v3, 0.0)).toEqual(false); expect(v.equalsEpsilon(v4, 0.0)).toEqual(false); expect(v.equalsEpsilon(v5, 0.0)).toEqual(false); expect(v.equalsEpsilon(v6, 0.0)).toEqual(false); expect(v.equalsEpsilon(v2, 0.1)).toEqual(true); expect(v.equalsEpsilon(v3, 0.1)).toEqual(true); expect(v.equalsEpsilon(v4, 0.2)).toEqual(true); expect(v.equalsEpsilon(v5, 0.3)).toEqual(true); expect(v.equalsEpsilon(v6, 0.4)).toEqual(true); }); it("toCssColorString produces expected output", function () { expect(Color.WHITE.toCssColorString()).toEqual("rgb(255,255,255)"); expect(Color.RED.toCssColorString()).toEqual("rgb(255,0,0)"); expect(Color.BLUE.toCssColorString()).toEqual("rgb(0,0,255)"); expect(Color.LIME.toCssColorString()).toEqual("rgb(0,255,0)"); expect(new Color(0.0, 0.0, 0.0, 1.0).toCssColorString()).toEqual( "rgb(0,0,0)" ); expect(new Color(0.1, 0.2, 0.3, 0.4).toCssColorString()).toEqual( "rgba(25,51,76,0.4)" ); }); it("toCssHexString produces expected output", function () { expect(Color.WHITE.toCssHexString()).toEqual("#ffffff"); expect(Color.RED.toCssHexString()).toEqual("#ff0000"); expect(Color.BLUE.toCssHexString()).toEqual("#0000ff"); expect(Color.LIME.toCssHexString()).toEqual("#00ff00"); expect(new Color(0.0, 0.0, 0.0, 1.0).toCssHexString()).toEqual("#000000"); expect(new Color(0.1, 0.2, 0.3, 0.4).toCssHexString()).toEqual("#19334c66"); }); it("fromCssColorString supports transparent", function () { expect(Color.fromCssColorString("transparent")).toEqual( new Color(0.0, 0.0, 0.0, 0.0) ); }); it("fromCssColorString supports the #rgb format", function () { expect(Color.fromCssColorString("#369")).toEqual( new Color(0.2, 0.4, 0.6, 1.0) ); }); it("fromCssColorString supports the #rgb format with lowercase", function () { expect(Color.fromCssColorString("#f00")).toEqual(Color.RED); expect(Color.fromCssColorString("#0f0")).toEqual(Color.LIME); expect(Color.fromCssColorString("#00f")).toEqual(Color.BLUE); }); it("fromCssColorString supports the #rgb format with uppercase", function () { expect(Color.fromCssColorString("#F00")).toEqual(Color.RED); expect(Color.fromCssColorString("#0F0")).toEqual(Color.LIME); expect(Color.fromCssColorString("#00F")).toEqual(Color.BLUE); }); it("fromCssColorString supports the #rgba format", function () { expect(Color.fromCssColorString("#369c")).toEqual( new Color(0.2, 0.4, 0.6, 0.8) ); }); it("fromCssColorString supports the #rgba format with uppercase", function () { expect(Color.fromCssColorString("#369C")).toEqual( new Color(0.2, 0.4, 0.6, 0.8) ); }); it("fromCssColorString supports the #rrggbb format", function () { expect(Color.fromCssColorString("#336699")).toEqual( new Color(0.2, 0.4, 0.6, 1.0) ); }); it("fromCssColorString supports the #rrggbb format with lowercase", function () { expect(Color.fromCssColorString("#ff0000")).toEqual(Color.RED); expect(Color.fromCssColorString("#00ff00")).toEqual(Color.LIME); expect(Color.fromCssColorString("#0000ff")).toEqual(Color.BLUE); }); it("fromCssColorString supports the #rrggbb format with uppercase", function () { expect(Color.fromCssColorString("#FF0000")).toEqual(Color.RED); expect(Color.fromCssColorString("#00FF00")).toEqual(Color.LIME); expect(Color.fromCssColorString("#0000FF")).toEqual(Color.BLUE); }); it("fromCssColorString supports the #rrggbbaa format", function () { expect(Color.fromCssColorString("#336699cc")).toEqual( new Color(0.2, 0.4, 0.6, 0.8) ); }); it("fromCssColorString supports the #rrggbbaa format with uppercase", function () { expect(Color.fromCssColorString("#336699CC")).toEqual( new Color(0.2, 0.4, 0.6, 0.8) ); }); it("fromCssColorString supports the rgb() format with absolute values", function () { expect(Color.fromCssColorString("rgb(255, 0, 0)")).toEqual(Color.RED); expect(Color.fromCssColorString("rgb(0, 255, 0)")).toEqual(Color.LIME); expect(Color.fromCssColorString("rgb(0, 0, 255)")).toEqual(Color.BLUE); expect(Color.fromCssColorString("rgb(51, 102, 204)")).toEqual( new Color(0.2, 0.4, 0.8, 1.0) ); }); it("fromCssColorString supports the rgb() format with percentages", function () { expect(Color.fromCssColorString("rgb(100%, 0, 0)")).toEqual(Color.RED); expect(Color.fromCssColorString("rgb(0, 100%, 0)")).toEqual(Color.LIME); expect(Color.fromCssColorString("rgb(0, 0, 100%)")).toEqual(Color.BLUE); expect(Color.fromCssColorString("rgb(20%, 40%, 80%)")).toEqual( new Color(0.2, 0.4, 0.8, 1.0) ); }); it("fromCssColorString supports the rgba() format with absolute values", function () { expect(Color.fromCssColorString("rgba(255, 0, 0, 1.0)")).toEqual(Color.RED); expect(Color.fromCssColorString("rgba(0, 255, 0, 1.0)")).toEqual( Color.LIME ); expect(Color.fromCssColorString("rgba(0, 0, 255, 1.0)")).toEqual( Color.BLUE ); expect(Color.fromCssColorString("rgba(51, 102, 204, 0.6)")).toEqual( new Color(0.2, 0.4, 0.8, 0.6) ); }); it("fromCssColorString supports the rgba() format with percentages", function () { expect(Color.fromCssColorString("rgba(100%, 0, 0, 1.0)")).toEqual( Color.RED ); expect(Color.fromCssColorString("rgba(0, 100%, 0, 1.0)")).toEqual( Color.LIME ); expect(Color.fromCssColorString("rgba(0, 0, 100%, 1.0)")).toEqual( Color.BLUE ); expect(Color.fromCssColorString("rgba(20%, 40%, 80%, 0.6)")).toEqual( new Color(0.2, 0.4, 0.8, 0.6) ); }); it("fromCssColorString supports named colors regardless of case", function () { expect(Color.fromCssColorString("red")).toEqual(Color.RED); expect(Color.fromCssColorString("GREEN")).toEqual(Color.GREEN); expect(Color.fromCssColorString("BLue")).toEqual(Color.BLUE); }); it("fromCssColorString supports the hsl() format", function () { expect(Color.fromCssColorString("hsl(0, 100%, 50%)")).toEqual(Color.RED); expect(Color.fromCssColorString("hsl(120, 100%, 50%)")).toEqual(Color.LIME); expect(Color.fromCssColorString("hsl(240, 100%, 50%)")).toEqual(Color.BLUE); expect(Color.fromCssColorString("hsl(220, 60%, 50%)")).toEqualEpsilon( new Color(0.2, 0.4, 0.8), CesiumMath.EPSILON15 ); }); it("fromCssColorString supports the hsla() format", function () { expect(Color.fromCssColorString("hsla(0, 100%, 50%, 1.0)")).toEqual( Color.RED ); expect(Color.fromCssColorString("hsla(120, 100%, 50%, 1.0)")).toEqual( Color.LIME ); expect(Color.fromCssColorString("hsla(240, 100%, 50%, 1.0)")).toEqual( Color.BLUE ); expect(Color.fromCssColorString("hsla(220, 60%, 50%, 0.6)")).toEqualEpsilon( new Color(0.2, 0.4, 0.8, 0.6), CesiumMath.EPSILON15 ); }); it("fromCssColorString wraps hue into valid range for hsl() format", function () { expect(Color.fromCssColorString("hsl(720, 100%, 50%)")).toEqual(Color.RED); expect(Color.fromCssColorString("hsla(720, 100%, 50%, 1.0)")).toEqual( Color.RED ); }); it("fromCssColorString returns undefined for unknown colors", function () { expect(Color.fromCssColorString("not a color")).toBeUndefined(); }); it("fromCssColorString throws with undefined", function () { expect(function () { Color.fromCssColorString(undefined); }).toThrowDeveloperError(); }); it("fromCssColorString works with a result parameter.", function () { var c = new Color(); var c2 = Color.fromCssColorString("yellow", c); expect(c).toBe(c2); expect(c).toEqual(Color.YELLOW); c2 = Color.fromCssColorString("#f00", c); expect(c).toBe(c2); expect(c).toEqual(Color.RED); c.alpha = 0.5; c2 = Color.fromCssColorString("#f00", c); // resets alpha to 1.0 expect(c).toBe(c2); expect(c).toEqual(Color.RED); c2 = Color.fromCssColorString("#0000ff", c); expect(c).toBe(c2); expect(c).toEqual(Color.BLUE); c2 = Color.fromCssColorString("rgb(0, 255, 255)", c); expect(c).toBe(c2); expect(c).toEqual(Color.CYAN); c2 = Color.fromCssColorString("hsl(120, 100%, 50%)", c); expect(c).toBe(c2); expect(c).toEqual(Color.LIME); }); it("fromCssColorString understands the color string even with any number of unnecessary leading, trailing or middle spaces", function () { expect(Color.fromCssColorString(" rgb( 0, 0, 255)")).toEqual(Color.BLUE); expect(Color.fromCssColorString("rgb( 255, 255, 255) ")).toEqual( Color.WHITE ); expect(Color.fromCssColorString(" #FF0000")).toEqual(Color.RED); expect(Color.fromCssColorString("#FF0 ")).toEqual(Color.YELLOW); expect(Color.fromCssColorString(" hsla(720, 100%, 50%, 1.0) ")).toEqual( Color.RED ); expect(Color.fromCssColorString("hsl (720, 100%, 50%)")).toEqual(Color.RED); }); it("fromHsl produces expected output", function () { expect(Color.fromHsl(0.0, 1.0, 0.5, 1.0)).toEqual(Color.RED); expect(Color.fromHsl(120.0 / 360.0, 1.0, 0.5, 1.0)).toEqual(Color.LIME); expect(Color.fromHsl(240.0 / 360.0, 1.0, 0.5, 1.0)).toEqual(Color.BLUE); expect(Color.fromHsl(220.0 / 360.0, 0.6, 0.5, 0.7)).toEqualEpsilon( new Color(0.2, 0.4, 0.8, 0.7), CesiumMath.EPSILON15 ); }); it("fromHsl properly wraps hue into valid range", function () { expect(Color.fromHsl(5, 1.0, 0.5, 1.0)).toEqual(Color.RED); }); it("fromHsl works with result parameter", function () { var c1 = new Color(); var c2 = Color.fromHsl(5, 1.0, 0.5, 1.0, c1); expect(c1).toEqual(Color.RED); expect(c1).toBe(c2); }); it("fromRandom generates a random color with no options", function () { var color = Color.fromRandom(); expect(color.red).toBeBetween(0.0, 1.0); expect(color.green).toBeBetween(0.0, 1.0); expect(color.blue).toBeBetween(0.0, 1.0); expect(color.alpha).toBeBetween(0.0, 1.0); }); it("fromRandom generates a random color with no options", function () { var result = new Color(); var color = Color.fromRandom({}, result); expect(result).toBe(color); expect(color.red).toBeBetween(0.0, 1.0); expect(color.green).toBeBetween(0.0, 1.0); expect(color.blue).toBeBetween(0.0, 1.0); expect(color.alpha).toBeBetween(0.0, 1.0); }); it("fromRandom uses specified exact values", function () { var options = { red: 0.1, green: 0.2, blue: 0.3, alpha: 0.4, }; var color = Color.fromRandom(options); expect(color.red).toEqual(options.red); expect(color.green).toEqual(options.green); expect(color.blue).toEqual(options.blue); expect(color.alpha).toEqual(options.alpha); }); it("fromRandom generates a random kind of Red color within intervals", function () { var options = { red: undefined, minimumRed: 0.1, maximumRed: 0.2, minimumGreen: 0.3, maximumGreen: 0.4, minimumBlue: 0.5, maximumBlue: 0.6, minimumAlpha: 0.7, maximumAlpha: 0.8, }; for (var i = 0; i < 100; i++) { var color = Color.fromRandom(options); expect(color.red).toBeBetween(options.minimumRed, options.maximumRed); expect(color.green).toBeBetween( options.minimumGreen, options.maximumGreen ); expect(color.blue).toBeBetween(options.minimumBlue, options.maximumBlue); expect(color.alpha).toBeBetween( options.minimumAlpha, options.maximumAlpha ); } }); it("fromRandom throws with invalid minimum-maximum red values", function () { expect(function () { Color.fromRandom({ minimumRed: 1, maximumRed: 0, }); }).toThrowDeveloperError(); }); it("fromRandom throws with invalid minimum-maximum green values", function () { expect(function () { Color.fromRandom({ minimumGreen: 1, maximumGreen: 0, }); }).toThrowDeveloperError(); }); it("fromRandom throws with invalid minimum-maximum blue values", function () { expect(function () { Color.fromRandom({ minimumBlue: 1, maximumBlue: 0, }); }).toThrowDeveloperError(); }); it("fromRandom throws with invalid minimum-maximum alpha values", function () { expect(function () { Color.fromRandom({ minimumAlpha: 1, maximumAlpha: 0, }); }).toThrowDeveloperError(); }); it("fromAlpha works", function () { var result = Color.fromAlpha(Color.RED, 0.5); expect(result).toEqual(new Color(1, 0, 0, 0.5)); }); it("fromAlpha works with result parameter", function () { var resultParam = new Color(); var result = Color.fromAlpha(Color.RED, 0.5, resultParam); expect(resultParam).toBe(result); expect(result).toEqual(new Color(1, 0, 0, 0.5)); }); it("fromAlpha throws with undefined color", function () { var result = new Color(); expect(function () { Color.fromAlpha(undefined, 0.5, result); }).toThrowDeveloperError(); }); it("fromAlpha throws with undefined color", function () { var result = new Color(); expect(function () { Color.fromAlpha(undefined, 0.5, result); }).toThrowDeveloperError(); }); it("fromAlpha throws with undefined alpha", function () { var result = new Color(); var color = new Color(); expect(function () { Color.fromAlpha(color, undefined, result); }).toThrowDeveloperError(); }); it("withAlpha works", function () { var resultParam = new Color(); var result = Color.RED.withAlpha(0.5, resultParam); expect(resultParam).toBe(result); expect(result).toEqual(new Color(1, 0, 0, 0.5)); }); it("toString produces correct results", function () { expect(new Color(0.1, 0.2, 0.3, 0.4).toString()).toEqual( "(0.1, 0.2, 0.3, 0.4)" ); }); it("can convert to and from RGBA", function () { // exact values will depend on endianness, but it should round-trip. var color = Color.fromBytes(0xff, 0xcc, 0x00, 0xee); var rgba = color.toRgba(); expect(rgba).toBeGreaterThan(0); var result = new Color(); var newColor = Color.fromRgba(rgba, result); expect(result).toBe(newColor); expect(color).toEqual(newColor); }); it("fromRgba works with result parameter", function () { var color = Color.fromBytes(0xff, 0xcc, 0x00, 0xee); var rgba = color.toRgba(); var newColor = Color.fromRgba(rgba); expect(color).toEqual(newColor); }); it("Can brighten", function () { var dark = new Color(0.2, 0.4, 0.6, 0.8); var brighter = dark.brighten(0.5, new Color()); expect(brighter.red).toEqual(0.6); expect(brighter.green).toEqual(0.7); expect(brighter.blue).toEqual(0.8); expect(brighter.alpha).toEqual(0.8); }); it("Can darken", function () { var dark = new Color(0.1, 0.6, 0.8, 0.8); var darker = dark.darken(0.2, new Color()); expect(darker.red).toEqualEpsilon(0.08, CesiumMath.EPSILON15); expect(darker.green).toEqualEpsilon(0.48, CesiumMath.EPSILON15); expect(darker.blue).toEqualEpsilon(0.64, CesiumMath.EPSILON15); expect(darker.alpha).toEqualEpsilon(0.8, CesiumMath.EPSILON15); }); it("brighten throws without result", function () { expect(function () { Color.RED.brighten(0.5, undefined); }).toThrowDeveloperError(); }); it("darken throws without result", function () { expect(function () { Color.RED.darken(0.5, undefined); }).toThrowDeveloperError(); }); it("brighten throws negative magnitude", function () { expect(function () { Color.RED.brighten(-0.5, new Color()); }).toThrowDeveloperError(); }); it("darken throws negative magnitude", function () { expect(function () { Color.RED.darken(-0.5, new Color()); }).toThrowDeveloperError(); }); it("brighten throws undefined magnitude", function () { expect(function () { Color.RED.brighten(undefined, new Color()); }).toThrowDeveloperError(); }); it("darken throws undefined magnitude", function () { expect(function () { Color.RED.darken(undefined, new Color()); }).toThrowDeveloperError(); }); it("Can add", function () { var left = new Color(0.1, 0.2, 0.3, 0.4); var right = new Color(0.3, 0.3, 0.3, 0.3); var result = Color.add(left, right, new Color()); expect(result.red).toEqual(0.4); expect(result.green).toEqual(0.5); expect(result.blue).toEqual(0.6); expect(result.alpha).toEqual(0.7); }); it("add throws with undefined parameters", function () { expect(function () { Color.add(undefined, new Color(), new Color()); }).toThrowDeveloperError(); expect(function () { Color.add(new Color(), undefined, new Color()); }).toThrowDeveloperError(); expect(function () { Color.add(new Color(), new Color(), undefined); }).toThrowDeveloperError(); }); it("can add with a result parameter that is an input parameter", function () { var left = new Color(0.1, 0.2, 0.3, 0.4); var right = new Color(0.3, 0.3, 0.3, 0.3); var result = Color.add(left, right, left); expect(result.red).toEqual(0.4); expect(result.green).toEqual(0.5); expect(result.blue).toEqual(0.6); expect(result.alpha).toEqual(0.7); }); it("Can subtract", function () { var left = new Color(1.0, 1.0, 1.0, 1.0); var right = new Color(0.1, 0.2, 0.3, 0.4); var result = Color.subtract(left, right, new Color()); expect(result.red).toEqual(0.9); expect(result.green).toEqual(0.8); expect(result.blue).toEqual(0.7); expect(result.alpha).toEqual(0.6); }); it("subtract throws with undefined parameters", function () { expect(function () { Color.subtract(undefined, new Color(), new Color()); }).toThrowDeveloperError(); expect(function () { Color.subtract(new Color(), undefined, new Color()); }).toThrowDeveloperError(); expect(function () { Color.subtract(new Color(), new Color(), undefined); }).toThrowDeveloperError(); }); it("subtract multiply with a result parameter that is an input parameter", function () { var left = new Color(1.0, 1.0, 1.0, 1.0); var right = new Color(0.1, 0.2, 0.3, 0.4); var result = Color.subtract(left, right, left); expect(result.red).toEqual(0.9); expect(result.green).toEqual(0.8); expect(result.blue).toEqual(0.7); expect(result.alpha).toEqual(0.6); }); it("Can multiply", function () { var left = new Color(0.1, 0.2, 0.3, 0.4); var right = new Color(0.2, 0.2, 0.2, 0.2); var result = Color.multiply(left, right, new Color()); expect(result.red).toEqualEpsilon(0.02, CesiumMath.EPSILON15); expect(result.green).toEqualEpsilon(0.04, CesiumMath.EPSILON15); expect(result.blue).toEqualEpsilon(0.06, CesiumMath.EPSILON15); expect(result.alpha).toEqualEpsilon(0.08, CesiumMath.EPSILON15); }); it("multiply throws with undefined parameters", function () { expect(function () { Color.multiply(undefined, new Color(), new Color()); }).toThrowDeveloperError(); expect(function () { Color.multiply(new Color(), undefined, new Color()); }).toThrowDeveloperError(); expect(function () { Color.multiply(new Color(), new Color(), undefined); }).toThrowDeveloperError(); }); it("can multiply with a result parameter that is an input parameter", function () { var left = new Color(0.1, 0.2, 0.3, 0.4); var right = new Color(0.2, 0.2, 0.2, 0.2); var result = Color.multiply(left, right, left); expect(result.red).toEqualEpsilon(0.02, CesiumMath.EPSILON15); expect(result.green).toEqualEpsilon(0.04, CesiumMath.EPSILON15); expect(result.blue).toEqualEpsilon(0.06, CesiumMath.EPSILON15); expect(result.alpha).toEqualEpsilon(0.08, CesiumMath.EPSILON15); }); it("Can divide", function () { var left = new Color(0.1, 0.2, 0.1, 0.2); var right = new Color(0.2, 0.2, 0.4, 0.4); var result = Color.divide(left, right, new Color()); expect(result.red).toEqualEpsilon(0.5, CesiumMath.EPSILON15); expect(result.green).toEqualEpsilon(1.0, CesiumMath.EPSILON15); expect(result.blue).toEqualEpsilon(0.25, CesiumMath.EPSILON15); expect(result.alpha).toEqualEpsilon(0.5, CesiumMath.EPSILON15); }); it("divide throws with undefined parameters", function () { expect(function () { Color.divide(undefined, new Color(), new Color()); }).toThrowDeveloperError(); expect(function () { Color.divide(new Color(), undefined, new Color()); }).toThrowDeveloperError(); expect(function () { Color.divide(new Color(), new Color(), undefined); }).toThrowDeveloperError(); }); it("can divide with a result parameter that is an input parameter", function () { var left = new Color(0.1, 0.2, 0.1, 0.2); var right = new Color(0.2, 0.2, 0.4, 0.4); var result = Color.divide(left, right, left); expect(result.red).toEqualEpsilon(0.5, CesiumMath.EPSILON15); expect(result.green).toEqualEpsilon(1.0, CesiumMath.EPSILON15); expect(result.blue).toEqualEpsilon(0.25, CesiumMath.EPSILON15); expect(result.alpha).toEqualEpsilon(0.5, CesiumMath.EPSILON15); }); it("Can mod", function () { var left = new Color(0.1, 0.2, 0.3, 0.2); var right = new Color(0.2, 0.2, 0.2, 0.4); var result = Color.mod(left, right, new Color()); expect(result.red).toEqualEpsilon(0.1, CesiumMath.EPSILON15); expect(result.green).toEqualEpsilon(0.0, CesiumMath.EPSILON15); expect(result.blue).toEqualEpsilon(0.1, CesiumMath.EPSILON15); expect(result.alpha).toEqualEpsilon(0.2, CesiumMath.EPSILON15); }); it("mod throws with undefined parameters", function () { expect(function () { Color.mod(undefined, new Color(), new Color()); }).toThrowDeveloperError(); expect(function () { Color.mod(new Color(), undefined, new Color()); }).toThrowDeveloperError(); expect(function () { Color.mod(new Color(), new Color(), undefined); }).toThrowDeveloperError(); }); it("can mod with a result parameter that is an input parameter", function () { var left = new Color(0.1, 0.2, 0.3, 0.2); var right = new Color(0.2, 0.2, 0.2, 0.4); var result = Color.mod(left, right, left); expect(result.red).toEqualEpsilon(0.1, CesiumMath.EPSILON15); expect(result.green).toEqualEpsilon(0.0, CesiumMath.EPSILON15); expect(result.blue).toEqualEpsilon(0.1, CesiumMath.EPSILON15); expect(result.alpha).toEqualEpsilon(0.2, CesiumMath.EPSILON15); }); it("Can multiply by scalar", function () { var color = new Color(0.1, 0.2, 0.3, 0.4); var result = Color.multiplyByScalar(color, 2.0, new Color()); expect(result.red).toEqualEpsilon(0.2, CesiumMath.EPSILON15); expect(result.green).toEqualEpsilon(0.4, CesiumMath.EPSILON15); expect(result.blue).toEqualEpsilon(0.6, CesiumMath.EPSILON15); expect(result.alpha).toEqualEpsilon(0.8, CesiumMath.EPSILON15); }); it("multiply by scalar throws with undefined parameters", function () { expect(function () { Color.multiplyByScalar(undefined, new Color(), new Color()); }).toThrowDeveloperError(); expect(function () { Color.multiplyByScalar(new Color(), undefined, new Color()); }).toThrowDeveloperError(); expect(function () { Color.multiplyByScalar(new Color(), new Color(), undefined); }).toThrowDeveloperError(); }); it("can multiply by scalar with a result parameter that is an input parameter", function () { var color = new Color(0.1, 0.2, 0.3, 0.4); var result = Color.multiplyByScalar(color, 2.0, color); expect(result.red).toEqualEpsilon(0.2, CesiumMath.EPSILON15); expect(result.green).toEqualEpsilon(0.4, CesiumMath.EPSILON15); expect(result.blue).toEqualEpsilon(0.6, CesiumMath.EPSILON15); expect(result.alpha).toEqualEpsilon(0.8, CesiumMath.EPSILON15); }); it("Can divide by scalar", function () { var color = new Color(0.1, 0.2, 0.3, 0.4); var result = Color.divideByScalar(color, 2.0, new Color()); expect(result.red).toEqualEpsilon(0.05, CesiumMath.EPSILON15); expect(result.green).toEqualEpsilon(0.1, CesiumMath.EPSILON15); expect(result.blue).toEqualEpsilon(0.15, CesiumMath.EPSILON15); expect(result.alpha).toEqualEpsilon(0.2, CesiumMath.EPSILON15); }); it("divide by scalar throws with undefined parameters", function () { expect(function () { Color.divideByScalar(undefined, new Color(), new Color()); }).toThrowDeveloperError(); expect(function () { Color.divideByScalar(new Color(), undefined, new Color()); }).toThrowDeveloperError(); expect(function () { Color.divideByScalar(new Color(), new Color(), undefined); }).toThrowDeveloperError(); }); it("can divide by scalar with a result parameter that is an input parameter", function () { var color = new Color(0.1, 0.2, 0.3, 0.4); var result = Color.divideByScalar(color, 2.0, color); expect(result.red).toEqualEpsilon(0.05, CesiumMath.EPSILON15); expect(result.green).toEqualEpsilon(0.1, CesiumMath.EPSILON15); expect(result.blue).toEqualEpsilon(0.15, CesiumMath.EPSILON15); expect(result.alpha).toEqualEpsilon(0.2, CesiumMath.EPSILON15); }); it("lerp throws with undefined parameters", function () { expect(function () { Color.lerp(undefined, new Color(), 0.0, new Color()); }).toThrowDeveloperError(); expect(function () { Color.lerp(new Color(), undefined, 0.0, new Color()); }).toThrowDeveloperError(); expect(function () { Color.lerp(new Color(), new Color(), undefined, new Color()); }).toThrowDeveloperError(); expect(function () { Color.lerp(new Color(), new Color(), 0.0, undefined); }).toThrowDeveloperError(); }); it("can lerp between two colors", function () { var colorA = new Color(0.0, 0.0, 0.0, 0.0); var colorB = new Color(1.0, 1.0, 1.0, 1.0); var result = Color.lerp(colorA, colorB, 0.5, new Color()); expect(result.red).toEqualEpsilon(0.5, CesiumMath.EPSILON15); expect(result.green).toEqualEpsilon(0.5, CesiumMath.EPSILON15); expect(result.blue).toEqualEpsilon(0.5, CesiumMath.EPSILON15); expect(result.alpha).toEqualEpsilon(0.5, CesiumMath.EPSILON15); }); createPackableSpecs(Color, new Color(0.1, 0.2, 0.3, 0.4), [ 0.1, 0.2, 0.3, 0.4, ]); });