// Copyright 2017 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.

(async function() {
  TestRunner.addResult(`Tests CSSLength.parse, CSSShadowModel.parseTextShadow, and CSSShadowModel.parseBoxShadow.\n`);
  await TestRunner.loadModule("inline_editor");

  TestRunner.addResult('-----CSSLengths-----');
  dumpCSSLength('10px');
  dumpCSSLength('10PX');
  dumpCSSLength('-10px');
  dumpCSSLength('+10px');
  dumpCSSLength('10.11px');
  dumpCSSLength('.11px');
  dumpCSSLength('10e3px');
  dumpCSSLength('10E3px');
  dumpCSSLength('10.11e3px');
  dumpCSSLength('-10.11e-3px');
  dumpCSSLength('0px');
  dumpCSSLength('0');
  dumpCSSLength('-0.0');
  dumpCSSLength('+0.0');
  dumpCSSLength('0e-3');
  // Start invalid lengths.
  dumpCSSLength('');
  dumpCSSLength('10');
  dumpCSSLength('10 px');
  dumpCSSLength('10.px');
  dumpCSSLength('10pxx');
  dumpCSSLength('10.10.10px');
  dumpCSSLength('hello10pxhello');

  TestRunner.addResult('\n-----Text Shadows-----');
  dumpTextShadow('0 0');
  dumpTextShadow('1px 2px');
  dumpTextShadow('1px 2px black');
  dumpTextShadow('1px 2px 2px');
  dumpTextShadow('rgb(0, 0, 0) 1px 2px 2px');
  dumpTextShadow('1px 2px 2px rgb(0, 0, 0)');
  dumpTextShadow('1px 2px black, 0 0 #ffffff');
  dumpTextShadow('1px -2px black, 0 0 rgb(0, 0, 0), 3px 3.5px 3px');
  // Start invalid text shadows.
  dumpTextShadow('');
  dumpTextShadow('0');
  dumpTextShadow('1 2 black');
  dumpTextShadow('1px black 2px');
  dumpTextShadow('1px 2px 2px 3px');
  dumpTextShadow('inset 1px 2px 2px');
  dumpTextShadow('red 1px 2px 2px red');
  dumpTextShadow('1px 2px rgb(0, 0, 0) 2px');
  dumpTextShadow('hello 1px 2px');
  dumpTextShadow('1px 2px black 0 0 #ffffff');
  dumpTextShadow('1px2px');
  dumpTextShadow('1px 2pxrgb(0, 0, 0)');
  dumpTextShadow('1px 2px black,, 0 0 #ffffff');

  TestRunner.addResult('\n-----Box Shadows-----');
  dumpBoxShadow('0 0');
  dumpBoxShadow('1px 2px');
  dumpBoxShadow('1px 2px black');
  dumpBoxShadow('1px 2px 2px');
  dumpBoxShadow('1px 2px 2px 3px');
  dumpBoxShadow('inset 1px 2px');
  dumpBoxShadow('1px 2px inset');
  dumpBoxShadow('INSET 1px 2px 2px 3px');
  dumpBoxShadow('rgb(0, 0, 0) 1px 2px 2px');
  dumpBoxShadow('inset rgb(0, 0, 0) 1px 2px 2px');
  dumpBoxShadow('inset 1px 2px 2px 3px rgb(0, 0, 0)');
  dumpBoxShadow('1px 2px 2px 3px rgb(0, 0, 0) inset');
  dumpBoxShadow('1px 2px black, inset 0 0 #ffffff');
  dumpBoxShadow('1px -2px black, inset 0 0 rgb(0, 0, 0), 3px 3.5px 3px 4px');
  // Start invalid box shadows.
  dumpBoxShadow('');
  dumpBoxShadow('0');
  dumpBoxShadow('1 2 black');
  dumpBoxShadow('1px black 2px');
  dumpBoxShadow('1px 2px 2px 3px 4px');
  dumpBoxShadow('1px 2px 2px inset 3px');
  dumpBoxShadow('inset 1px 2px 2px inset');
  dumpBoxShadow('1px 2px rgb(0, 0, 0) 2px');
  dumpBoxShadow('hello 1px 2px');
  dumpBoxShadow('1px 2px black 0 0 #ffffff');
  dumpBoxShadow('1px2px');
  dumpBoxShadow('1px 2pxrgb(0, 0, 0)');
  dumpBoxShadow('1px 2px black,, 0 0 #ffffff');

  TestRunner.completeTest();

  function dumpCSSLength(lengthText) {
    var length = InlineEditor.CSSLength.parse(lengthText);
    var statusText = length !== null ? 'Succeeded: ' + length.asCSSText() : 'Failed';
    TestRunner.addResult('"' + lengthText + '", Parsing ' + statusText);
  }

  function dumpTextShadow(shadowText) {
    dumpShadow(shadowText, false);
  }

  function dumpBoxShadow(shadowText) {
    dumpShadow(shadowText, true);
  }

  function dumpShadow(shadowText, isBoxShadow) {
    var shadows = isBoxShadow ? InlineEditor.CSSShadowModel.parseBoxShadow(shadowText) :
                                InlineEditor.CSSShadowModel.parseTextShadow(shadowText);
    var output = [];
    for (var i = 0; i < shadows.length; i++)
      output.push(shadows[i].asCSSText());
    var statusText = shadows.length !== 0 ? 'Succeeded: ' + output.join(', ') : 'Failed';
    TestRunner.addResult('"' + shadowText + '", Parsing ' + statusText);
  }
})();
