text: test(
    'browser/core/LayoutTest', [
      'tinymce.themes.inlite.core.Layout'
    ],
    function (Layout) {
      // TODO: Move this to atomic test when we can require parts of tinymce core using bolt
  
      var rect = function (x, y, w, h) {
        return { x: x, y: y, w: w, h: h };
      };
  
      var clientRect = function (x, y, w, h) {
        return { left: x, top: y, width: w, height: h, bottom: y + h, right: x + w };
      };
  
      var assertLayout = function (expected, rects) {
        var result;
  
        result = Layout.calc(
          rects.targetRect,
          rects.contentAreaRect,
          rects.panelRect
        );
  
        assert.eq(expected, result);
      };
  
      var testCalcPanelAtBottomLeft = function () {
        assertLayout({
          rect: rect(0, 10, 20, 10),
          position: 'bl-tl'
        }, {
          contentAreaRect: rect(0, 0, 100, 100),
          targetRect: rect(0, 0, 10, 10),
          panelRect: rect(0, 0, 20, 10)
        });
      };
  
      var testCalcPanelAtBottomRight = function () {
        assertLayout({
          rect: rect(80, 10, 20, 10),
          position: 'br-tr'
        }, {
          contentAreaRect: rect(0, 0, 100, 100),
          targetRect: rect(90, 0, 10, 10),
          panelRect: rect(0, 0, 20, 10)
        });
      };
  
      var testCalcPanelAtTopLeft = function () {
        assertLayout({
          rect: rect(0, 10, 20, 10),
          position: 'tl-bl'
        }, {
          contentAreaRect: rect(0, 0, 100, 100),
          targetRect: rect(0, 20, 10, 10),
          panelRect: rect(0, 0, 20, 10)
        });
      };
  
      var testCalcPanelAtTopRight = function () {
        assertLayout({
          rect: rect(80, 10, 20, 10),
          position: 'tr-br'
        }, {
          contentAreaRect: rect(0, 0, 100, 100),
          targetRect: rect(90, 20, 10, 10),
          panelRect: rect(0, 0, 20, 10)
        });
      };
  
      var testCalcPanelAtTopCenter = function () {
        assertLayout({
          rect: rect(35, 10, 20, 10),
          position: 'tc-bc'
        }, {
          contentAreaRect: rect(0, 0, 100, 100),
          targetRect: rect(40, 20, 10, 10),
          panelRect: rect(0, 0, 20, 10)
        });
      };
  
      var testCalcPanelAtBottomCenter = function () {
        assertLayout({
          rect: rect(35, 10, 20, 10),
          position: 'bc-tc'
        }, {
          contentAreaRect: rect(0, 0, 100, 100),
          targetRect: rect(40, 0, 10, 10),
          panelRect: rect(0, 0, 20, 10)
        });
      };
  
      var testUserConstrain = function () {
        var targetRect, contentAreaRect, panelRect, userConstrainedPanelRect, handler;
  
        contentAreaRect = rect(0, 0, 100, 100);
        targetRect = rect(40, 0, 10, 10);
        panelRect = rect(0, 0, 20, 10);
  
        handler = function (rects) {
          assert.eq(rects.elementRect, clientRect(40, 0, 10, 10));
          assert.eq(rects.contentAreaRect, clientRect(0, 0, 100, 100));
          assert.eq(rects.panelRect, clientRect(0, 0, 20, 10));
          return clientRect(1, 2, 3, 4);
        };
  
        userConstrainedPanelRect = Layout.userConstrain(handler, targetRect, contentAreaRect, panelRect);
        assert.eq(userConstrainedPanelRect, rect(1, 2, 3, 4));
      };
  
      testCalcPanelAtBottomLeft();
      testCalcPanelAtBottomRight();
      testCalcPanelAtTopLeft();
      testCalcPanelAtTopRight();
      testCalcPanelAtTopCenter();
      testCalcPanelAtBottomCenter();
      testUserConstrain();
    }
  );
  