// Copyright 2014 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.

#include "sky/engine/core/css/MediaQuery.h"

#include "sky/engine/core/css/MediaList.h"
#include "sky/engine/wtf/PassOwnPtr.h"
#include "sky/engine/wtf/text/StringBuilder.h"

#include <gtest/gtest.h>

namespace blink {

typedef struct {
    const char* input;
    const char* output;
    bool shouldWorkOnOldParser;
} TestCase;

static void testMediaQuery(TestCase test, MediaQuerySet& querySet, bool oldParser)
{
    StringBuilder output;
    size_t j = 0;
    while (j < querySet.queryVector().size()) {
        String queryText = querySet.queryVector()[j]->cssText();
        output.append(queryText);
        ++j;
        if (j >= querySet.queryVector().size())
            break;
        output.appendLiteral(", ");
    }
    if (!oldParser || test.shouldWorkOnOldParser) {
        if (test.output)
            ASSERT_STREQ(test.output, output.toString().ascii().data());
        else
            ASSERT_STREQ(test.input, output.toString().ascii().data());
    }
}

TEST(MediaQuerySetTest, Basic)
{
    // The first string represents the input string.
    // The second string represents the output string, if present.
    // Otherwise, the output string is identical to the first string.
    TestCase testCases[] = {
        {"", 0, true},
        {" ", "", true},
        {"screen", 0, true},
        {"screen and (color)", 0, true},
        {"all and (min-width:500px)", "(min-width: 500px)", true},
        {"all and (min-width:/*bla*/500px)", "(min-width: 500px)", true},
        {"(min-width:500px)", "(min-width: 500px)", true},
        {"screen and (color), projection and (color)", 0, true},
        {"not screen and (color)", 0, true},
        {"only screen and (color)", 0, true},
        {"screen and (color), projection and (color)", 0, true},
        {"aural and (device-aspect-ratio: 16/9)", 0, true},
        {"speech and (min-device-width: 800px)", 0, true},
        {"example", 0, true},
        {"screen and (max-weight: 3kg) and (color), (monochrome)", "not all, (monochrome)", true},
        {"(min-width: -100px)", "not all", true},
        {"(example, all,), speech", "not all, speech", true},
        {"&test, screen", "not all, screen", true},
        {"print and (min-width: 25cm)", 0, true},
        {"screen and (min-width: 400px) and (max-width: 700px)", "screen and (max-width: 700px) and (min-width: 400px)", true},
        {"screen and (device-width: 800px)", 0, true},
        {"screen and (device-height: 60em)", 0, true},
        {"screen and (device-height: 60rem)", 0, true},
        {"screen and (device-height: 60ch)", 0, true},
        {"screen and (device-aspect-ratio: 16/9)", 0, true},
        {"(device-aspect-ratio: 16.0/9.0)", "not all", true},
        {"(device-aspect-ratio: 16/ 9)", "(device-aspect-ratio: 16/9)", true},
        {"(device-aspect-ratio: 16/\r9)", "(device-aspect-ratio: 16/9)", true},
        {"all and (color)", "(color)", true},
        {"all and (min-color: 1)", "(min-color: 1)", true},
        {"all and (min-color: 1.0)", "not all", true},
        {"all and (min-color: 2)", "(min-color: 2)", true},
        {"all and (color-index)", "(color-index)", true},
        {"all and (min-color-index: 1)", "(min-color-index: 1)", true},
        {"all and (monochrome)", "(monochrome)", true},
        {"all and (min-monochrome: 1)", "(min-monochrome: 1)", true},
        {"all and (min-monochrome: 2)", "(min-monochrome: 2)", true},
        {"print and (monochrome)", 0, true},
        {"screen and (max-width: 50%)", "not all", true},
        {"screen and (max-WIDTH: 500px)", "screen and (max-width: 500px)", true},
        {"screen and (max-width: 24.4em)", 0, true},
        {"screen and (max-width: 24.4EM)", "screen and (max-width: 24.4em)", true},
        {"screen and (max-width: blabla)", "not all", true},
        {"screen and (max-width: 1)", "not all", true},
        {"screen and (max-width: 0)", 0, true},
        {"screen and (max-width: 1deg)", "not all", true},
        {"handheld and (min-width: 20em), \nscreen and (min-width: 20em)", "handheld and (min-width: 20em), screen and (min-width: 20em)", true},
        {"print and (min-resolution: 300dpi)", 0, true},
        {"print and (min-resolution: 118dpcm)", 0, true},
        {"(resolution: 0.83333333333333333333dppx)", "(resolution: 0.833333333333333dppx)", true},
        {"(resolution: 2.4dppx)", 0, true},
        {"all and(color)", "not all", true},
        {"all and (", "not all", true},
        {"test;,all", "not all, all", true},
        {"(color:20example)", "not all", false},
        {"not braille", 0, true},
        {",screen", "not all, screen", true},
        {",all", "not all, all", true},
        {",,all,,", "not all, not all, all, not all, not all", true},
        {",,all,, ", "not all, not all, all, not all, not all", true},
        {",screen,,&invalid,,", "not all, screen, not all, not all, not all, not all", true},
        {",screen,,(invalid,),,", "not all, screen, not all, not all, not all, not all", true},
        {",(all,),,", "not all, not all, not all, not all", true},
        {",", "not all, not all", true},
        {"  ", "", true},
        {"(color", "(color)", true},
        {"(min-color: 2", "(min-color: 2)", true},
        {"(orientation: portrait)", 0, true},
        {"tv and (scan: progressive)", 0, true},
        {"(pointer: coarse)", 0, true},
        {"(min-orientation:portrait)", "not all", true},
        {"all and (orientation:portrait)", "(orientation: portrait)", true},
        {"all and (orientation:landscape)", "(orientation: landscape)", true},
        {"NOT braille, tv AND (max-width: 200px) and (min-WIDTH: 100px) and (orientation: landscape), (color)",
            "not braille, tv and (max-width: 200px) and (min-width: 100px) and (orientation: landscape), (color)", true},
        {"(m\\61x-width: 300px)", "(max-width: 300px)", true},
        {"(max-width: 400\\70\\78)", "(max-width: 400px)", false},
        {"(max-width: 500\\0070\\0078)", "(max-width: 500px)", false},
        {"(max-width: 600\\000070\\000078)", "(max-width: 600px)", false},
        {"(max-width: 700px), (max-width: 700px)", "(max-width: 700px), (max-width: 700px)", true},
        {"(max-width: 800px()), (max-width: 800px)", "not all, (max-width: 800px)", true},
        {"(max-width: 900px(()), (max-width: 900px)", "not all", true},
        {"(max-width: 600px(())))), (max-width: 600px)", "not all, (max-width: 600px)", true},
        {"(max-width: 500px(((((((((())))), (max-width: 500px)", "not all", true},
        {"(max-width: 800px[]), (max-width: 800px)", "not all, (max-width: 800px)", true},
        {"(max-width: 900px[[]), (max-width: 900px)", "not all", true},
        {"(max-width: 600px[[]]]]), (max-width: 600px)", "not all, (max-width: 600px)", true},
        {"(max-width: 500px[[[[[[[[[[]]]]), (max-width: 500px)", "not all", true},
        {"(max-width: 800px{}), (max-width: 800px)", "not all, (max-width: 800px)", true},
        {"(max-width: 900px{{}), (max-width: 900px)", "not all", true},
        {"(max-width: 600px{{}}}}), (max-width: 600px)", "not all, (max-width: 600px)", true},
        {"(max-width: 500px{{{{{{{{{{}}}}), (max-width: 500px)", "not all", true},
        {"[(), (max-width: 400px)", "not all", true},
        {"[{}, (max-width: 500px)", "not all", true},
        {"[{]}], (max-width: 900px)", "not all, (max-width: 900px)", true},
        {"[{[]{}{{{}}}}], (max-width: 900px)", "not all, (max-width: 900px)", true},
        {"[{[}], (max-width: 900px)", "not all", true},
        {"[({)}], (max-width: 900px)", "not all", true},
        {"[]((), (max-width: 900px)", "not all", true},
        {"((), (max-width: 900px)", "not all", true},
        {"(foo(), (max-width: 900px)", "not all", true},
        {"[](()), (max-width: 900px)", "not all, (max-width: 900px)", true},
        {"all an[isdfs bla())()]icalc(i)(()), (max-width: 400px)", "not all, (max-width: 400px)", true},
        {"all an[isdfs bla())(]icalc(i)(()), (max-width: 500px)", "not all", true},
        {"all an[isdfs bla())(]icalc(i)(())), (max-width: 600px)", "not all", true},
        {"all an[isdfs bla())(]icalc(i)(()))], (max-width: 800px)", "not all, (max-width: 800px)", true},
        {"(max-width: '40px')", "not all", true},
        {"('max-width': 40px)", "not all", true},
        {"'\"'\", (max-width: 900px)", "not all", true},
        {"'\"\"\"', (max-width: 900px)", "not all, (max-width: 900px)", true},
        {"\"'\"', (max-width: 900px)", "not all", true},
        {"\"'''\", (max-width: 900px)", "not all, (max-width: 900px)", true},
        {0, 0} // Do not remove the terminator line.
    };

    for (unsigned i = 0; testCases[i].input; ++i) {
        RefPtr<MediaQuerySet> oldParserQuerySet = MediaQuerySet::create(testCases[i].input);
        RefPtr<MediaQuerySet> threadSafeQuerySet = MediaQuerySet::createOffMainThread(testCases[i].input);
        testMediaQuery(testCases[i], *oldParserQuerySet, true);
        testMediaQuery(testCases[i], *threadSafeQuerySet, false);
    }
}

} // namespace
