|  | <style> | 
|  | .container { | 
|  | height: 100px; | 
|  | width: 200px; | 
|  | margin: 30px; | 
|  | outline: 1px solid black; | 
|  | } | 
|  | .box { | 
|  | height: 100%; | 
|  | width: 100%; | 
|  | padding: 5px; | 
|  | margin: 5px; | 
|  | border: 5px solid gray; | 
|  | background-color: green; | 
|  | transform-origin: 20% 50%; | 
|  | } | 
|  | </style> | 
|  |  | 
|  | <div class="container"> | 
|  | <div id="test-box" class="box"></div> | 
|  | </div> | 
|  |  | 
|  | <script type="text/javascript" charset="utf-8"> | 
|  | import "../resources/third_party/unittest/unittest.dart"; | 
|  | import "../resources/unit.dart"; | 
|  |  | 
|  | import "dart:sky"; | 
|  |  | 
|  | void main() { | 
|  | initUnit(); | 
|  |  | 
|  | var testBox = document.getElementById('test-box'); | 
|  |  | 
|  | void testTransformRoundTrip(transform, resultMatrix) { | 
|  | testBox.style['transform'] = transform; | 
|  | var computedTransform = window.getComputedStyle(testBox)['transform']; | 
|  | expect(computedTransform, equals(resultMatrix)); | 
|  | } | 
|  |  | 
|  | test('pixel translate should roundtrip', () { | 
|  | testTransformRoundTrip('translate(80px, 90px)', 'matrix(1, 0, 0, 1, 80, 90)'); | 
|  | }); | 
|  |  | 
|  | test('percent translate should roundtrip', () { | 
|  | testTransformRoundTrip('translate(10px, 50%)', 'matrix(1, 0, 0, 1, 10, 60)'); | 
|  | }); | 
|  |  | 
|  | test('scale should roundtrip', () { | 
|  | testTransformRoundTrip('scale(1.2, 0.8)', 'matrix(1.2, 0, 0, 0.8, 0, 0)'); | 
|  | }); | 
|  |  | 
|  | test('removing a transform should not crash', () { | 
|  | testBox.style['transform'] = 'translate(0, 0, 0)'; | 
|  | testBox.getBoundingClientRect(); | 
|  | testBox.style.removeProperty('transform'); | 
|  | testBox.getBoundingClientRect(); | 
|  | }); | 
|  | } | 
|  | </script> |