| Index: third_party/protobuf/src/google/protobuf/util/internal/snake2camel_objectwriter_test.cc
|
| diff --git a/third_party/protobuf/src/google/protobuf/util/internal/snake2camel_objectwriter_test.cc b/third_party/protobuf/src/google/protobuf/util/internal/snake2camel_objectwriter_test.cc
|
| new file mode 100644
|
| index 0000000000000000000000000000000000000000..67388c3b57bf97ef5987bc79df322e8b7fb43337
|
| --- /dev/null
|
| +++ b/third_party/protobuf/src/google/protobuf/util/internal/snake2camel_objectwriter_test.cc
|
| @@ -0,0 +1,311 @@
|
| +// Protocol Buffers - Google's data interchange format
|
| +// Copyright 2008 Google Inc. All rights reserved.
|
| +// https://developers.google.com/protocol-buffers/
|
| +//
|
| +// Redistribution and use in source and binary forms, with or without
|
| +// modification, are permitted provided that the following conditions are
|
| +// met:
|
| +//
|
| +// * Redistributions of source code must retain the above copyright
|
| +// notice, this list of conditions and the following disclaimer.
|
| +// * Redistributions in binary form must reproduce the above
|
| +// copyright notice, this list of conditions and the following disclaimer
|
| +// in the documentation and/or other materials provided with the
|
| +// distribution.
|
| +// * Neither the name of Google Inc. nor the names of its
|
| +// contributors may be used to endorse or promote products derived from
|
| +// this software without specific prior written permission.
|
| +//
|
| +// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
|
| +// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
|
| +// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
|
| +// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
|
| +// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
|
| +// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
|
| +// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
|
| +// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
|
| +// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
|
| +// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
|
| +// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
| +
|
| +#include <google/protobuf/util/internal/snake2camel_objectwriter.h>
|
| +#include <google/protobuf/util/internal/expecting_objectwriter.h>
|
| +#include <gtest/gtest.h>
|
| +
|
| +namespace google {
|
| +namespace protobuf {
|
| +namespace util {
|
| +namespace converter {
|
| +
|
| +class Snake2CamelObjectWriterTest : public ::testing::Test {
|
| + protected:
|
| + Snake2CamelObjectWriterTest() : mock_(), expects_(&mock_), testing_(&mock_) {}
|
| + virtual ~Snake2CamelObjectWriterTest() {}
|
| +
|
| + MockObjectWriter mock_;
|
| + ExpectingObjectWriter expects_;
|
| + Snake2CamelObjectWriter testing_;
|
| +};
|
| +
|
| +TEST_F(Snake2CamelObjectWriterTest, Empty) {
|
| + // Set expectation
|
| + expects_.StartObject("")->EndObject();
|
| +
|
| + // Actual testing
|
| + testing_.StartObject("")->EndObject();
|
| +}
|
| +
|
| +TEST_F(Snake2CamelObjectWriterTest, UnderscoresOnly) {
|
| + // Set expectation
|
| + expects_.StartObject("")
|
| + ->RenderInt32("", 1)
|
| + ->RenderInt32("", 2)
|
| + ->RenderInt32("", 3)
|
| + ->RenderInt32("", 4)
|
| + ->RenderInt32("", 5)
|
| + ->EndObject();
|
| +
|
| + // Actual testing
|
| + testing_.StartObject("")
|
| + ->RenderInt32("_", 1)
|
| + ->RenderInt32("__", 2)
|
| + ->RenderInt32("___", 3)
|
| + ->RenderInt32("____", 4)
|
| + ->RenderInt32("_____", 5)
|
| + ->EndObject();
|
| +}
|
| +
|
| +TEST_F(Snake2CamelObjectWriterTest, LowercaseOnly) {
|
| + // Set expectation
|
| + expects_.StartObject("")
|
| + ->RenderString("key", "value")
|
| + ->RenderString("abracadabra", "magic")
|
| + ->EndObject();
|
| +
|
| + // Actual testing
|
| + testing_.StartObject("")
|
| + ->RenderString("key", "value")
|
| + ->RenderString("abracadabra", "magic")
|
| + ->EndObject();
|
| +}
|
| +
|
| +TEST_F(Snake2CamelObjectWriterTest, UppercaseOnly) {
|
| + // Set expectation
|
| + expects_.StartObject("")
|
| + ->RenderString("key", "VALUE")
|
| + ->RenderString("abracadabra", "MAGIC")
|
| + ->EndObject();
|
| +
|
| + // Actual testing
|
| + testing_.StartObject("")
|
| + ->RenderString("KEY", "VALUE")
|
| + ->RenderString("ABRACADABRA", "MAGIC")
|
| + ->EndObject();
|
| +}
|
| +
|
| +TEST_F(Snake2CamelObjectWriterTest, CamelCase) {
|
| + // Set expectation
|
| + expects_.StartObject("")
|
| + ->RenderString("camelCase", "camelCase")
|
| + ->RenderString("theQuickBrownFoxJumpsOverTheLazyDog",
|
| + "theQuickBrownFoxJumpsOverTheLazyDog")
|
| + ->EndObject();
|
| +
|
| + // Actual testing
|
| + testing_.StartObject("")
|
| + ->RenderString("camelCase", "camelCase")
|
| + ->RenderString("theQuickBrownFoxJumpsOverTheLazyDog",
|
| + "theQuickBrownFoxJumpsOverTheLazyDog")
|
| + ->EndObject();
|
| +}
|
| +
|
| +TEST_F(Snake2CamelObjectWriterTest, FirstCapCamelCase) {
|
| + // Sets expectation
|
| + expects_.StartObject("camel")
|
| + ->RenderString("camelCase", "CamelCase")
|
| + ->RenderString("theQuickBrownFoxJumpsOverTheLazyDog",
|
| + "TheQuickBrownFoxJumpsOverTheLazyDog")
|
| + ->EndObject();
|
| +
|
| + // Actual testing
|
| + testing_.StartObject("Camel")
|
| + ->RenderString("CamelCase", "CamelCase")
|
| + ->RenderString("TheQuickBrownFoxJumpsOverTheLazyDog",
|
| + "TheQuickBrownFoxJumpsOverTheLazyDog")
|
| + ->EndObject();
|
| +}
|
| +
|
| +TEST_F(Snake2CamelObjectWriterTest, LastCapCamelCase) {
|
| + // Sets expectation
|
| + expects_.StartObject("lastCapCamelCasE")->EndObject();
|
| +
|
| + // Actual testing
|
| + testing_.StartObject("lastCapCamelCasE")->EndObject();
|
| +}
|
| +
|
| +TEST_F(Snake2CamelObjectWriterTest, MixedCapCamelCase) {
|
| + // Sets expectation
|
| + expects_.StartObject("googleIsTheBest")
|
| + ->RenderFloat("iLoveGOOGLE", 1.61803f)
|
| + ->RenderFloat("goGoogleGO", 2.71828f)
|
| + ->RenderFloat("gBikeISCool", 3.14159f)
|
| + ->EndObject();
|
| +
|
| + // Actual testing
|
| + testing_.StartObject("GOOGLEIsTheBest")
|
| + ->RenderFloat("ILoveGOOGLE", 1.61803f)
|
| + ->RenderFloat("GOGoogleGO", 2.71828f)
|
| + ->RenderFloat("GBikeISCool", 3.14159f)
|
| + ->EndObject();
|
| +}
|
| +
|
| +TEST_F(Snake2CamelObjectWriterTest, MixedCase) {
|
| + // Sets expectation
|
| + expects_.StartObject("snakeCaseCamelCase")
|
| + ->RenderBool("camelCaseSnakeCase", false)
|
| + ->RenderBool("mixedCamelAndUnderScores", false)
|
| + ->RenderBool("goGOOGLEGo", true)
|
| + ->EndObject();
|
| +
|
| + // Actual testing
|
| + testing_.StartObject("snake_case_camelCase")
|
| + ->RenderBool("camelCase_snake_case", false)
|
| + ->RenderBool("MixedCamel_And_UnderScores", false)
|
| + ->RenderBool("Go_GOOGLEGo", true)
|
| + ->EndObject();
|
| +}
|
| +
|
| +TEST_F(Snake2CamelObjectWriterTest, SnakeCase) {
|
| + // Sets expectation
|
| + expects_.StartObject("")
|
| + ->RenderString("snakeCase", "snake_case")
|
| + ->RenderString("theQuickBrownFoxJumpsOverTheLazyDog",
|
| + "the_quick_brown_fox_jumps_over_the_lazy_dog")
|
| + ->EndObject();
|
| +
|
| + // Actual testing
|
| + testing_.StartObject("")
|
| + ->RenderString("snake_case", "snake_case")
|
| + ->RenderString("the_quick_brown_fox_jumps_over_the_lazy_dog",
|
| + "the_quick_brown_fox_jumps_over_the_lazy_dog")
|
| + ->EndObject();
|
| +}
|
| +
|
| +TEST_F(Snake2CamelObjectWriterTest, FirstCapSnakeCase) {
|
| + // Sets expectation
|
| + expects_.StartObject("firstCapSnakeCase")
|
| + ->RenderBool("helloWorld", true)
|
| + ->EndObject();
|
| +
|
| + // Actual testing
|
| + testing_.StartObject("First_Cap_Snake_Case")
|
| + ->RenderBool("Hello_World", true)
|
| + ->EndObject();
|
| +}
|
| +
|
| +TEST_F(Snake2CamelObjectWriterTest, AllCapSnakeCase) {
|
| + // Sets expectation
|
| + expects_.StartObject("allCAPSNAKECASE")
|
| + ->RenderDouble("nyseGOOGL", 600.0L)
|
| + ->RenderDouble("aBCDE", 1.0L)
|
| + ->RenderDouble("klMNOP", 2.0L)
|
| + ->RenderDouble("abcIJKPQRXYZ", 3.0L)
|
| + ->EndObject();
|
| +
|
| + // Actual testing
|
| + testing_.StartObject("ALL_CAP_SNAKE_CASE")
|
| + ->RenderDouble("NYSE_GOOGL", 600.0L)
|
| + ->RenderDouble("A_B_C_D_E", 1.0L)
|
| + ->RenderDouble("KL_MN_OP", 2.0L)
|
| + ->RenderDouble("ABC_IJK_PQR_XYZ", 3.0L)
|
| + ->EndObject();
|
| +}
|
| +
|
| +TEST_F(Snake2CamelObjectWriterTest, RepeatedUnderScoreSnakeCase) {
|
| + // Sets expectation
|
| + expects_.StartObject("")
|
| + ->RenderInt32("doubleUnderscoreSnakeCase", 2)
|
| + ->RenderInt32("tripleUnderscoreFirstCap", 3)
|
| + ->RenderInt32("quadrupleUNDERSCOREALLCAP", 4)
|
| + ->EndObject();
|
| +
|
| + // Actual testing
|
| + testing_.StartObject("")
|
| + ->RenderInt32("double__underscore__snake__case", 2)
|
| + ->RenderInt32("Triple___Underscore___First___Cap", 3)
|
| + ->RenderInt32("QUADRUPLE____UNDERSCORE____ALL____CAP", 4)
|
| + ->EndObject();
|
| +}
|
| +
|
| +TEST_F(Snake2CamelObjectWriterTest, LeadingUnderscoreSnakeCase) {
|
| + // Sets expectation
|
| + expects_.StartObject("leadingUnderscoreSnakeCase")
|
| + ->RenderUint32("leadingDoubleUnderscore", 2)
|
| + ->RenderUint32("leadingTripleUnderscoreFirstCap", 3)
|
| + ->RenderUint32("leadingQUADRUPLEUNDERSCOREALLCAP", 4)
|
| + ->EndObject();
|
| +
|
| + // Actual testing
|
| + testing_.StartObject("_leading_underscore_snake_case")
|
| + ->RenderUint32("__leading_double_underscore", 2)
|
| + ->RenderUint32("___Leading_Triple_Underscore_First_Cap", 3)
|
| + ->RenderUint32("____LEADING_QUADRUPLE_UNDERSCORE_ALL_CAP", 4)
|
| + ->EndObject();
|
| +}
|
| +
|
| +TEST_F(Snake2CamelObjectWriterTest, TrailingUnderscoreSnakeCase) {
|
| + // Sets expectation
|
| + expects_.StartObject("trailingUnderscoreSnakeCase")
|
| + ->RenderInt64("trailingDoubleUnderscore", 2L)
|
| + ->RenderInt64("trailingTripleUnderscoreFirstCap", 3L)
|
| + ->RenderInt64("trailingQUADRUPLEUNDERSCOREALLCAP", 4L)
|
| + ->EndObject();
|
| +
|
| + // Actual testing
|
| + testing_.StartObject("trailing_underscore_snake_case")
|
| + ->RenderInt64("trailing_double_underscore__", 2L)
|
| + ->RenderInt64("Trailing_Triple_Underscore_First_Cap___", 3L)
|
| + ->RenderInt64("TRAILING_QUADRUPLE_UNDERSCORE_ALL_CAP____", 4L)
|
| + ->EndObject();
|
| +}
|
| +
|
| +TEST_F(Snake2CamelObjectWriterTest, EnclosingUnderscoreSnakeCase) {
|
| + // Sets expectation
|
| + expects_.StartObject("enclosingUnderscoreSnakeCase")
|
| + ->RenderUint64("enclosingDoubleUnderscore", 2L)
|
| + ->RenderUint64("enclosingTripleUnderscoreFirstCap", 3L)
|
| + ->RenderUint64("enclosingQUADRUPLEUNDERSCOREALLCAP", 4L)
|
| + ->EndObject();
|
| +
|
| + // Actual testing
|
| + testing_.StartObject("_enclosing_underscore_snake_case_")
|
| + ->RenderUint64("__enclosing_double_underscore__", 2L)
|
| + ->RenderUint64("___Enclosing_Triple_Underscore_First_Cap___", 3L)
|
| + ->RenderUint64("____ENCLOSING_QUADRUPLE_UNDERSCORE_ALL_CAP____", 4L)
|
| + ->EndObject();
|
| +}
|
| +
|
| +TEST_F(Snake2CamelObjectWriterTest, DisableCaseNormalizationOnlyDisablesFirst) {
|
| + // Sets expectation
|
| + expects_.StartObject("")
|
| + ->RenderString("snakeCase", "snake_case")
|
| + ->RenderString(
|
| + "the_quick_brown_fox_jumps_over_the_lazy_dog", // case retained
|
| + "the_quick_brown_fox_jumps_over_the_lazy_dog")
|
| + ->RenderBool("theSlowFox", true) // disable case not in effect
|
| + ->EndObject();
|
| +
|
| + // Actual testing
|
| + testing_.StartObject("")
|
| + ->RenderString("snake_case", "snake_case")
|
| + ->DisableCaseNormalizationForNextKey()
|
| + ->RenderString("the_quick_brown_fox_jumps_over_the_lazy_dog",
|
| + "the_quick_brown_fox_jumps_over_the_lazy_dog")
|
| + ->RenderBool("the_slow_fox", true)
|
| + ->EndObject();
|
| +}
|
| +
|
| +} // namespace converter
|
| +} // namespace util
|
| +} // namespace protobuf
|
| +} // namespace google
|
|
|