diff --git a/engine/core/painting/Color.dart b/engine/core/painting/Color.dart index 65ed9be1db6..266145ec18e 100644 --- a/engine/core/painting/Color.dart +++ b/engine/core/painting/Color.dart @@ -5,12 +5,12 @@ part of dart.sky; class Color { - const Color(this._value); + const Color(int value) : _value = (value & 0xFFFFFFFF); const Color.fromARGB(int a, int r, int g, int b) : - _value = (((a & 0xff) << 24) | - ((r & 0xff) << 16) | - ((g & 0xff) << 8) | - ((b & 0xff) << 0)); + _value = ((((a & 0xff) << 24) | + ((r & 0xff) << 16) | + ((g & 0xff) << 8) | + ((b & 0xff) << 0)) & 0xFFFFFFFF); final int _value; int get value => _value; diff --git a/tests/raw/color_bounds-expected.txt b/tests/raw/color_bounds-expected.txt new file mode 100644 index 00000000000..833a2ab4c8c --- /dev/null +++ b/tests/raw/color_bounds-expected.txt @@ -0,0 +1,8 @@ +CONSOLE: unittest-suite-wait-for-done +CONSOLE: PASS: paint set to black +CONSOLE: PASS: color created with out of bounds value +CONSOLE: PASS: color created with wildly out of bounds value +CONSOLE: +CONSOLE: All 3 tests passed. +CONSOLE: unittest-suite-success +DONE diff --git a/tests/raw/color_bounds.dart b/tests/raw/color_bounds.dart new file mode 100644 index 00000000000..aa63d2b6c3f --- /dev/null +++ b/tests/raw/color_bounds.dart @@ -0,0 +1,35 @@ +import 'dart:sky' as sky; + +import '../resources/third_party/unittest/unittest.dart'; +import '../resources/unit.dart'; + +void main() { + initUnit(); + + test("paint set to black", () { + sky.Color c = new sky.Color(0x00000000); + sky.Paint p = new sky.Paint(); + p.color = c; + expect(c.toString(), equals('Color(0x00000000)')); + }); + + test("color created with out of bounds value", () { + try { + sky.Color c = new sky.Color(0x100 << 24); + sky.Paint p = new sky.Paint(); + p.color = c; + } catch (e) { + expect(e != null, equals(true)); + } + }); + + test("color created with wildly out of bounds value", () { + try { + sky.Color c = new sky.Color(1 << 1000000); + sky.Paint p = new sky.Paint(); + p.color = c; + } catch (e) { + expect(e != null, equals(true)); + } + }); +}