blob: 2f5f0b2da6e8b46ebc8e87cdb5f12867517e77c5 [file] [log] [blame]
// Copyright (c) 2012 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 <vector>
#include "base/string16.h"
#include "third_party/WebKit/Source/WebKit/chromium/public/WebFormControlElement.h"
#include "webkit/forms/webkit_forms_export.h"
namespace webkit {
namespace forms {
// Stores information about a field in a form.
struct WEBKIT_FORMS_EXPORT FormField {
virtual ~FormField();
// Equality tests for identity which does not include |value| or
// |is_autofilled|.
// TODO(dhollowa): These operators need to be revised when we implement field
// ids.
bool operator==(const FormField& field) const;
bool operator!=(const FormField& field) const;
// Comparsion operator exposed for STL map. Uses label, then name to sort.
bool operator<(const FormField& field) const;
string16 label;
string16 name;
string16 value;
string16 form_control_type;
string16 autocomplete_type;
size_t max_length;
bool is_autofilled;
bool is_focusable;
bool should_autocomplete;
// For the HTML snippet |<option value="US">United States</option>|, the
// value is "US" and the contents are "United States".
std::vector<string16> option_values;
std::vector<string16> option_contents;
// So we can compare FormFields with EXPECT_EQ().
WEBKIT_FORMS_EXPORT std::ostream& operator<<(std::ostream& os,
const FormField& field);
} // namespace forms
} // namespace webkit
// Prefer to use this macro in place of |EXPECT_EQ()| for comparing |FormField|s
// in test code.
#define EXPECT_FORM_FIELD_EQUALS(expected, actual) \
do { \
EXPECT_EQ(expected.label, actual.label); \
EXPECT_EQ(expected.value, actual.value); \
EXPECT_EQ(expected.form_control_type, actual.form_control_type); \
EXPECT_EQ(expected.autocomplete_type, actual.autocomplete_type); \
EXPECT_EQ(expected.max_length, actual.max_length); \
EXPECT_EQ(expected.is_autofilled, actual.is_autofilled); \
} while (0)