| // 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 "core/testing/UnionTypesTest.h" |
| |
| #include "wtf/text/StringBuilder.h" |
| |
| namespace blink { |
| |
| void UnionTypesTest::doubleOrStringOrStringArrayAttribute(DoubleOrStringOrStringArray& doubleOrStringOrStringArray) |
| { |
| switch (m_attributeType) { |
| case SpecificTypeNone: |
| // Default value is zero (of double). |
| doubleOrStringOrStringArray.setDouble(0); |
| break; |
| case SpecificTypeDouble: |
| doubleOrStringOrStringArray.setDouble(m_attributeDouble); |
| break; |
| case SpecificTypeString: |
| doubleOrStringOrStringArray.setString(m_attributeString); |
| break; |
| case SpecificTypeStringArray: |
| doubleOrStringOrStringArray.setStringArray(m_attributeStringArray); |
| break; |
| default: |
| ASSERT_NOT_REACHED(); |
| } |
| } |
| |
| void UnionTypesTest::setDoubleOrStringOrStringArrayAttribute(const DoubleOrStringOrStringArray& doubleOrStringOrStringArray) |
| { |
| if (doubleOrStringOrStringArray.isDouble()) { |
| m_attributeDouble = doubleOrStringOrStringArray.getAsDouble(); |
| m_attributeType = SpecificTypeDouble; |
| } else if (doubleOrStringOrStringArray.isString()) { |
| m_attributeString = doubleOrStringOrStringArray.getAsString(); |
| m_attributeType = SpecificTypeString; |
| } else if (doubleOrStringOrStringArray.isStringArray()) { |
| m_attributeStringArray = doubleOrStringOrStringArray.getAsStringArray(); |
| m_attributeType = SpecificTypeStringArray; |
| } else { |
| ASSERT_NOT_REACHED(); |
| } |
| } |
| |
| String UnionTypesTest::doubleOrStringArg(DoubleOrString& doubleOrString) |
| { |
| if (doubleOrString.isNull()) |
| return "null is passed"; |
| if (doubleOrString.isDouble()) |
| return "double is passed: " + String::numberToStringECMAScript(doubleOrString.getAsDouble()); |
| if (doubleOrString.isString()) |
| return "string is passed: " + doubleOrString.getAsString(); |
| ASSERT_NOT_REACHED(); |
| return String(); |
| } |
| |
| String UnionTypesTest::doubleOrInternalEnumArg(DoubleOrInternalEnum& doubleOrInternalEnum) |
| { |
| if (doubleOrInternalEnum.isDouble()) |
| return "double is passed: " + String::numberToStringECMAScript(doubleOrInternalEnum.getAsDouble()); |
| if (doubleOrInternalEnum.isInternalEnum()) |
| return "InternalEnum is passed: " + doubleOrInternalEnum.getAsInternalEnum(); |
| ASSERT_NOT_REACHED(); |
| return String(); |
| } |
| |
| String UnionTypesTest::doubleOrStringArrayArg(HeapVector<DoubleOrString>& array) |
| { |
| if (!array.size()) |
| return ""; |
| |
| StringBuilder builder; |
| for (DoubleOrString& doubleOrString : array) { |
| ASSERT(!doubleOrString.isNull()); |
| if (doubleOrString.isDouble()) { |
| builder.append("double: "); |
| builder.append(String::numberToStringECMAScript(doubleOrString.getAsDouble())); |
| } else if (doubleOrString.isString()) { |
| builder.append("string: "); |
| builder.append(doubleOrString.getAsString()); |
| } else { |
| ASSERT_NOT_REACHED(); |
| } |
| builder.append(", "); |
| } |
| return builder.substring(0, builder.length() - 2); |
| } |
| |
| String UnionTypesTest::doubleOrStringSequenceArg(HeapVector<DoubleOrString>& sequence) |
| { |
| return doubleOrStringArrayArg(sequence); |
| } |
| |
| String UnionTypesTest::nodeListOrElementArg(NodeListOrElement& nodeListOrElement) |
| { |
| ASSERT(!nodeListOrElement.isNull()); |
| return nodeListOrElementOrNullArg(nodeListOrElement); |
| } |
| |
| String UnionTypesTest::nodeListOrElementOrNullArg(NodeListOrElement& nodeListOrElementOrNull) |
| { |
| if (nodeListOrElementOrNull.isNull()) |
| return "null or undefined is passed"; |
| if (nodeListOrElementOrNull.isNodeList()) |
| return "nodelist is passed"; |
| if (nodeListOrElementOrNull.isElement()) |
| return "element is passed"; |
| ASSERT_NOT_REACHED(); |
| return String(); |
| } |
| |
| String UnionTypesTest::doubleOrStringOrStringArrayArg(const DoubleOrStringOrStringArray& doubleOrStringOrStringArray) |
| { |
| if (doubleOrStringOrStringArray.isNull()) |
| return "null"; |
| |
| if (doubleOrStringOrStringArray.isDouble()) |
| return "double: " + String::numberToStringECMAScript(doubleOrStringOrStringArray.getAsDouble()); |
| |
| if (doubleOrStringOrStringArray.isString()) |
| return "string: " + doubleOrStringOrStringArray.getAsString(); |
| |
| ASSERT(doubleOrStringOrStringArray.isStringArray()); |
| const Vector<String>& array = doubleOrStringOrStringArray.getAsStringArray(); |
| if (!array.size()) |
| return "array: []"; |
| StringBuilder builder; |
| builder.append("array: ["); |
| for (const String& item : array) { |
| ASSERT(!item.isNull()); |
| builder.append(item); |
| builder.append(", "); |
| } |
| return builder.substring(0, builder.length() - 2) + "]"; |
| } |
| |
| String UnionTypesTest::doubleOrStringOrStringSequenceArg(const DoubleOrStringOrStringSequence& doubleOrStringOrStringSequence) |
| { |
| if (doubleOrStringOrStringSequence.isNull()) |
| return "null"; |
| |
| if (doubleOrStringOrStringSequence.isDouble()) |
| return "double: " + String::numberToStringECMAScript(doubleOrStringOrStringSequence.getAsDouble()); |
| |
| if (doubleOrStringOrStringSequence.isString()) |
| return "string: " + doubleOrStringOrStringSequence.getAsString(); |
| |
| ASSERT(doubleOrStringOrStringSequence.isStringSequence()); |
| const Vector<String>& sequence = doubleOrStringOrStringSequence.getAsStringSequence(); |
| if (!sequence.size()) |
| return "sequence: []"; |
| StringBuilder builder; |
| builder.append("sequence: ["); |
| for (const String& item : sequence) { |
| ASSERT(!item.isNull()); |
| builder.append(item); |
| builder.append(", "); |
| } |
| return builder.substring(0, builder.length() - 2) + "]"; |
| } |
| |
| } // namespace blink |