Home | History | Annotate | Download | only in test
      1 <!doctype html>
      2 <!--
      3 @license
      4 Copyright (c) 2016 The Polymer Project Authors. All rights reserved.
      5 This code may only be used under the BSD style license found at http://polymer.github.io/LICENSE.txt
      6 The complete set of authors may be found at http://polymer.github.io/AUTHORS.txt
      7 The complete set of contributors may be found at http://polymer.github.io/CONTRIBUTORS.txt
      8 Code distributed by Google as part of the polymer project is also
      9 subject to an additional IP rights grant found at http://polymer.github.io/PATENTS.txt
     10 -->
     11 <html>
     12   <head>
     13     <title>iron-flex-layout-classes tests</title>
     14 
     15     <meta charset="utf-8">
     16     <meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">
     17     <meta name="viewport" content="width=device-width, minimum-scale=1.0, initial-scale=1, user-scalable=yes">
     18 
     19     <script src="../../webcomponentsjs/webcomponents.js"></script>
     20     <script src="../../web-component-tester/browser.js"></script>
     21     <link rel="import" href="../iron-flex-layout-classes.html">
     22 
     23     <style is="custom-style" include="iron-flex iron-flex-reverse iron-flex-factors iron-flex-alignment iron-positioning">
     24       body {
     25         margin: 0;
     26         padding: 0;
     27       }
     28       .container {
     29         width: 300px;
     30         min-height: 50px;
     31         background-color: #ccc;
     32       }
     33       .container > div {
     34         width: 50px;
     35         min-height: 50px; /* so that it can grow in vertical layouts. */
     36       }
     37       /* IE11 does not calculate flex proportions correctly in a vertical
     38        * layout if the children just have a min-height. For those tests,
     39        * use a fixed height instead. */
     40       .container > div.fixed-height {
     41         min-height: 0;
     42         height: 50px;
     43       }
     44       .container.relative > div {
     45         min-width: 50px;
     46         min-height: 50px;
     47         width: inherit;
     48       }
     49       .container.small { width: 120px; }
     50       .container.tall { height: 300px; }
     51 
     52       #c1 { background-color: #E91E63; }
     53       #c2 { background-color: #03A9F4; }
     54       #c3 { background-color: #CDDC39; }
     55       #c4 { background-color: #03A9F4; }
     56       #c5 { background-color: #E91E63; }
     57     </style>
     58   </head>
     59   <body>
     60     <test-fixture id="basic">
     61       <template>
     62         <div class="container layout">
     63           <div id="c1"></div>
     64           <div id="c2"></div>
     65           <div id="c3"></div>
     66         </div>
     67       </template>
     68     </test-fixture>
     69 
     70     <test-fixture id="flex">
     71       <template>
     72         <div class="container layout">
     73           <div id="c1" class="fixed-height"></div>
     74           <div id="c2" class="fixed-height"></div>
     75           <div id="c3" class="fixed-height"></div>
     76         </div>
     77       </template>
     78     </test-fixture>
     79 
     80     <test-fixture id="single-child">
     81       <template>
     82         <div class="container layout">
     83           <div id="c1"></div>
     84         </div>
     85       </template>
     86     </test-fixture>
     87 
     88     <test-fixture id="positioning">
     89       <template>
     90         <div class="container layout relative">
     91           <div id="c1"></div>
     92         </div>
     93       </template>
     94     </test-fixture>
     95 
     96     <test-fixture id="align-content">
     97       <template>
     98         <div class="container layout">
     99           <div id="c1"></div>
    100           <div id="c2"></div>
    101           <div id="c3"></div>
    102           <div id="c4"></div>
    103           <div id="c5"></div>
    104         </div>
    105       </template>
    106     </test-fixture>
    107     <script>
    108       function positionEquals(node, top, bottom, left, right) {
    109         var rect = node.getBoundingClientRect();
    110         return rect.top === top && rect.bottom === bottom && 
    111                rect.left === left && rect.right === right;
    112       }
    113       suite('basic layout', function() {
    114         var container;
    115 
    116         setup(function() {
    117           container = fixture('basic');
    118         });
    119 
    120         test('layout-horizontal', function() {
    121           container.classList.add('horizontal');
    122           assert.isTrue(positionEquals(container, 0, 50, 0, 300), "container position ok");
    123           // |c1| |c2| |c3|
    124           assert.isTrue(positionEquals(c1, 0, 50, 0, 50), "child 1 position ok");
    125           assert.isTrue(positionEquals(c2, 0, 50, 50, 100), "child 2 position ok");
    126           assert.isTrue(positionEquals(c3, 0, 50, 100, 150), "child 3 position ok");
    127         });
    128 
    129         test('layout-horizontal-reverse', function() {
    130           container.classList.add('horizontal-reverse');
    131           assert.isTrue(positionEquals(container, 0, 50, 0, 300), "container position ok");
    132           //     |c3| |c2| |c1|
    133           assert.isTrue(positionEquals(c1, 0, 50, 250, 300), "child 1 position ok");
    134           assert.isTrue(positionEquals(c2, 0, 50, 200, 250), "child 2 position ok");
    135           assert.isTrue(positionEquals(c3, 0, 50, 150, 200), "child 3 position ok");
    136         });
    137 
    138         test('layout-vertical', function() {
    139           container.classList.add('vertical');
    140           assert.isTrue(positionEquals(container, 0, 150, 0, 300), "container position ok");
    141           // vertically, |c1| |c2| |c3|
    142           assert.isTrue(positionEquals(c1, 0, 50, 0, 50), "child 1 position ok");
    143           assert.isTrue(positionEquals(c2, 50, 100, 0, 50), "child 2 position ok");
    144           assert.isTrue(positionEquals(c3, 100, 150, 0, 50), "child 3 position ok");
    145         });
    146 
    147         test('layout-vertical-reverse', function() {
    148           container.classList.add('vertical-reverse');
    149           assert.isTrue(positionEquals(container, 0, 150, 0, 300), "container position ok");
    150           // vertically, |c3| |c2| |c1|
    151           assert.isTrue(positionEquals(c1, 100, 150, 0, 50), "child 1 position ok");
    152           assert.isTrue(positionEquals(c2, 50, 100, 0, 50), "child 2 position ok");
    153           assert.isTrue(positionEquals(c3, 0, 50, 0, 50), "child 3 position ok");
    154         });
    155 
    156         test('layout-wrap', function() {
    157           container.classList.add('horizontal');
    158           container.classList.add('wrap');
    159           container.classList.add('small');
    160           assert.isTrue(positionEquals(container, 0, 100, 0, 120), "container position ok");
    161           // |c1| |c2|
    162           // |c3|
    163           assert.isTrue(positionEquals(c1, 0, 50, 0, 50), "child 1 position ok");
    164           assert.isTrue(positionEquals(c2, 0, 50, 50, 100), "child 2 position ok");
    165           assert.isTrue(positionEquals(c3, 50, 100, 0, 50), "child 3 position ok");
    166         });
    167 
    168         test('layout-wrap-reverse', function() {
    169           container.classList.add('horizontal-reverse');
    170           container.classList.add('wrap-reverse');
    171           container.style.width = '100px';
    172           assert.isTrue(positionEquals(container, 0, 100, 0, 100), "container position ok");
    173           //      |c3|
    174           // |c2| |c1|
    175           assert.isTrue(positionEquals(c1, 50, 100, 50, 100), "child 1 position ok");
    176           assert.isTrue(positionEquals(c2, 50, 100, 0, 50), "child 2 position ok");
    177           assert.isTrue(positionEquals(c3, 0, 50, 50, 100), "child 3 position ok");
    178         });
    179       });
    180 
    181       suite('flex', function() {
    182         var container;
    183 
    184         setup(function() {
    185           container = fixture('flex');
    186         });
    187 
    188         test('layout-flex child in a horizontal layout', function() {
    189           container.classList.add('horizontal');
    190           c2.classList.add('flex');
    191           assert.isTrue(positionEquals(container, 0, 50, 0, 300), "container position ok");
    192           // |c1| |    c2    | |c3|
    193           assert.isTrue(positionEquals(c1, 0, 50, 0, 50), "child 1 position ok");
    194           assert.isTrue(positionEquals(c2, 0, 50, 50, 250), "child 2 position ok");
    195           assert.isTrue(positionEquals(c3, 0, 50, 250, 300), "child 3 position ok");
    196         });
    197 
    198         test('layout-flex child in a vertical layout', function() {
    199           container.classList.add('vertical');
    200           container.classList.add('tall');
    201           c2.classList.add('flex');
    202           assert.isTrue(positionEquals(container, 0, 300, 0, 300), "container position ok");
    203           // vertically, |c1| |    c2    | |c3|
    204           assert.isTrue(positionEquals(c1, 0, 50, 0, 50), "child 1 position ok");
    205           assert.isTrue(positionEquals(c2, 50, 250, 0, 50), "child 2 position ok");
    206           assert.isTrue(positionEquals(c3, 250, 300, 0, 50), "child 3 position ok");
    207         });
    208 
    209         test('layout-flex, layout-flex-2, layout-flex-3 in a horizontal layout', function() {
    210           container.classList.add('horizontal');
    211           c1.classList.add('flex');
    212           c2.classList.add('flex-2');
    213           c3.classList.add('flex-3');
    214           assert.isTrue(positionEquals(container, 0, 50, 0, 300), "container position ok");
    215           // |c1| | c2 | |  c3  |
    216           assert.isTrue(positionEquals(c1, 0, 50, 0, 50), "child 1 position ok");
    217           assert.isTrue(positionEquals(c2, 0, 50, 50, 150), "child 2 position ok");
    218           assert.isTrue(positionEquals(c3, 0, 50, 150, 300), "child 3 position ok");
    219         });
    220 
    221         test('layout-flex, layout-flex-2, layout-flex-3 in a vertical layout', function() {
    222           container.classList.add('vertical');
    223           container.classList.add('tall');
    224           c1.classList.add('flex');
    225           c2.classList.add('flex-2');
    226           c3.classList.add('flex-3');
    227           assert.isTrue(positionEquals(container, 0, 300, 0, 300), "container position ok");
    228           // vertically, |c1| | c2 | |  c3  |
    229           assert.isTrue(positionEquals(c1, 0, 50, 0, 50), "child 1 position ok");
    230           assert.isTrue(positionEquals(c2, 50, 150, 0, 50), "child 2 position ok");
    231           assert.isTrue(positionEquals(c3, 150, 300, 0, 50), "child 3 position ok");
    232         });
    233       });
    234 
    235       suite('alignment', function() {
    236         var container;
    237 
    238         setup(function() {
    239           container = fixture('single-child');
    240           container.classList.add('horizontal');
    241         });
    242 
    243         test('stretch (default)', function() {
    244           container.classList.add('tall');
    245           assert.isTrue(positionEquals(container, 0, 300, 0, 300), "container position ok");
    246           assert.isTrue(positionEquals(c1, 0, 300, 0, 50), "child 1 position ok");
    247         });
    248 
    249         test('layout-center', function() {
    250           container.classList.add('center');
    251           container.classList.add('tall');
    252           assert.isTrue(positionEquals(container, 0, 300, 0, 300), "container position ok");
    253           var center = (300 - 50) / 2;
    254           assert.isTrue(positionEquals(c1, center, center + 50, 0, 50), "child 1 position ok");
    255         });
    256 
    257         test('layout-start', function() {
    258           container.classList.add('start');
    259           container.classList.add('tall');
    260           assert.isTrue(positionEquals(container, 0, 300, 0, 300), "container position ok");
    261           assert.isTrue(positionEquals(c1, 0, 50, 0, 50), "child 1 position ok");
    262         });
    263 
    264         test('layout-end', function() {
    265           container.classList.add('end');
    266           container.classList.add('tall');
    267           assert.isTrue(positionEquals(container, 0, 300, 0, 300), "container position ok");
    268           assert.isTrue(positionEquals(c1, 250, 300, 0, 50), "child 1 position ok");
    269         });
    270 
    271         test('layout-start-justified', function() {
    272           container.classList.add('start-justified');
    273           assert.isTrue(positionEquals(container, 0, 50, 0, 300), "container position ok");
    274           assert.isTrue(positionEquals(c1, 0, 50, 0, 50), "child 1 position ok");
    275         });
    276 
    277         test('layout-end-justified', function() {
    278           container.classList.add('end-justified');
    279           assert.isTrue(positionEquals(container, 0, 50, 0, 300), "container position ok");
    280           assert.isTrue(positionEquals(c1, 0, 50, 250, 300), "child 1 position ok");
    281         });
    282 
    283         test('layout-center-justified', function() {
    284           container.classList.add('center-justified');
    285           assert.isTrue(positionEquals(container, 0, 50, 0, 300), "container position ok");
    286           var center = (300 - 50) / 2;
    287           assert.isTrue(positionEquals(c1, 0, 50, center, center + 50), "child 1 position ok");
    288         });
    289       });
    290 
    291       suite('justification', function() {
    292         var container;
    293 
    294         setup(function() {
    295           container = fixture('flex');
    296           container.classList.add('horizontal');
    297         });
    298 
    299         test('layout-justified', function() {
    300           container.classList.add('justified');
    301           assert.isTrue(positionEquals(container, 0, 50, 0, 300), "container position ok");
    302           var center = (300 - 50) / 2;
    303           assert.isTrue(positionEquals(c1, 0, 50, 0, 50), "child 1 position ok");
    304           assert.isTrue(positionEquals(c2, 0, 50, center, center + 50), "child 2 position ok");
    305           assert.isTrue(positionEquals(c3, 0, 50, 250, 300), "child 3 position ok");
    306         });
    307 
    308         test('layout-around-justified', function() {
    309           container.classList.add('around-justified');
    310           assert.isTrue(positionEquals(container, 0, 50, 0, 300), "container position ok");
    311           var spacing = (300 - 50 * 3) / 6;
    312           // Every child gets `spacing` on its left and right side.
    313           assert.isTrue(positionEquals(c1, 0, 50, spacing, spacing + 50), "child 1 position ok");
    314           var end = spacing + 50 + spacing;
    315           assert.isTrue(positionEquals(c2, 0, 50, end + spacing, end + spacing + 50), "child 2 position ok");
    316           end = end + spacing + 50 + spacing;
    317           assert.isTrue(positionEquals(c3, 0, 50, end + spacing, end + spacing + 50), "child 3 position ok");
    318         });
    319       });
    320 
    321       suite('align-content', function() {
    322         var container;
    323 
    324         setup(function() {
    325           container = fixture('align-content');
    326           container.classList.add('small');
    327           container.classList.add('tall');
    328           container.classList.add('horizontal');
    329           container.classList.add('flex');
    330           container.classList.add('wrap');
    331         });
    332 
    333         test('default is stretch', function() {
    334           assert.isTrue(positionEquals(container, 0, 300, 0, 120), "container position ok");
    335           assert.isTrue(positionEquals(c1, 0, 100, 0, 50), "child 1 position ok");
    336           assert.isTrue(positionEquals(c2, 0, 100, 50, 100), "child 2 position ok");
    337           assert.isTrue(positionEquals(c3, 100, 200, 0, 50), "child 3 position ok");
    338           assert.isTrue(positionEquals(c4, 100, 200, 50, 100), "child 4 position ok");
    339           assert.isTrue(positionEquals(c5, 200, 300, 0, 50), "child 5 position ok");
    340         });
    341 
    342         test('layout-start-aligned', function() {
    343           container.classList.add('start-aligned');
    344           assert.isTrue(positionEquals(container, 0, 300, 0, 120), "container position ok");
    345           assert.isTrue(positionEquals(c1, 0, 50, 0, 50), "child 1 position ok");
    346           assert.isTrue(positionEquals(c2, 0, 50, 50, 100), "child 2 position ok");
    347           assert.isTrue(positionEquals(c3, 50, 100, 0, 50), "child 3 position ok");
    348           assert.isTrue(positionEquals(c4, 50, 100, 50, 100), "child 4 position ok");
    349           assert.isTrue(positionEquals(c5, 100, 150, 0, 50), "child 5 position ok");
    350         });
    351 
    352         test('layout-end-aligned', function() {
    353           container.classList.add('end-aligned');
    354           assert.isTrue(positionEquals(container, 0, 300, 0, 120), "container position ok");
    355           assert.isTrue(positionEquals(c1, 150, 200, 0, 50), "child 1 position ok");
    356           assert.isTrue(positionEquals(c2, 150, 200, 50, 100), "child 2 position ok");
    357           assert.isTrue(positionEquals(c3, 200, 250, 0, 50), "child 3 position ok");
    358           assert.isTrue(positionEquals(c4, 200, 250, 50, 100), "child 4 position ok");
    359           assert.isTrue(positionEquals(c5, 250, 300, 0, 50), "child 5 position ok");
    360         });
    361 
    362         test('layout-center-aligned', function() {
    363           container.classList.add('center-aligned');
    364           assert.isTrue(positionEquals(container, 0, 300, 0, 120), "container position ok");
    365           var center = (300 - 50) / 2;
    366           assert.isTrue(positionEquals(c1, center-50, center, 0, 50), "child 1 position ok");
    367           assert.isTrue(positionEquals(c2, center-50, center, 50, 100), "child 2 position ok");
    368           assert.isTrue(positionEquals(c3, center, center+50, 0, 50), "child 3 position ok");
    369           assert.isTrue(positionEquals(c4, center, center+50, 50, 100), "child 4 position ok");
    370           assert.isTrue(positionEquals(c5, center+50, center+100, 0, 50), "child 5 position ok");
    371         });
    372 
    373         test('layout-between-aligned', function() {
    374           container.classList.add('between-aligned');
    375           assert.isTrue(positionEquals(container, 0, 300, 0, 120), "container position ok");
    376           var center = (300 - 50) / 2;
    377           assert.isTrue(positionEquals(c1, 0, 50, 0, 50), "child 1 position ok");
    378           assert.isTrue(positionEquals(c2, 0, 50, 50, 100), "child 2 position ok");
    379           assert.isTrue(positionEquals(c3, center, center+50, 0, 50), "child 3 position ok");
    380           assert.isTrue(positionEquals(c4, center, center+50, 50, 100), "child 4 position ok");
    381           assert.isTrue(positionEquals(c5, 250, 300, 0, 50), "child 5 position ok");
    382         });
    383 
    384         test('layout-around-aligned', function() {
    385           container.classList.add('around-aligned');
    386           assert.isTrue(positionEquals(container, 0, 300, 0, 120), "container position ok");
    387           var center = (300 - 50) / 2;
    388           assert.isTrue(positionEquals(c1, 25, 75, 0, 50), "child 1 position ok");
    389           assert.isTrue(positionEquals(c2, 25, 75, 50, 100), "child 2 position ok");
    390           assert.isTrue(positionEquals(c3, center, center+50, 0, 50), "child 3 position ok");
    391           assert.isTrue(positionEquals(c4, center, center+50, 50, 100), "child 4 position ok");
    392           assert.isTrue(positionEquals(c5, 225, 275, 0, 50), "child 5 position ok");
    393         });
    394       });
    395 
    396       suite('positioning', function() {
    397         var container;
    398 
    399         setup(function() {
    400           container = fixture('positioning');
    401           container.classList.add('tall');
    402         });
    403 
    404         test('layout-fit', function() {
    405           c1.classList.add('fit');
    406           assert.isTrue(positionEquals(container, 0, 300, 0, 300), "container position ok");
    407           assert.isTrue(positionEquals(container, 0, 300, 0, 300), "child 1 position ok");
    408         });
    409       });
    410     </script>
    411   </body>
    412 </html>
    413