/*
 * Copyright (C) 2018 Igalia S.L.
 *
 * This library is free software; you can redistribute it and/or
 * modify it under the terms of the GNU Lesser General Public
 * License as published by the Free Software Foundation; either
 * version 2,1 of the License, or (at your option) any later version.
 *
 * This library is distributed in the hope that it will be useful,
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
 * Library General Public License for more details.
 *
 * You should have received a copy of the GNU Library General Public License
 * along with this library; see the file COPYING.LIB.  If not, write to
 * the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
 * Boston, MA 02110-1301, USA.
 */

#include "config.h"

#include "WebViewTest.h"

static void testWebKitDOMElementAutoFill(WebViewTest* test, gconstpointer)
{
    static const gchar* testHTML = "<html><body><form action='#'><input id='auto-fill'></input></form></body></html>";
    g_assert_true(test->runWebProcessTest("WebKitDOMElement", "auto-fill", testHTML));
}

void beforeAll()
{
    WebViewTest::add("WebKitDOMElement", "auto-fill", testWebKitDOMElementAutoFill);
}

void afterAll()
{
}
