diff options
author | Feng Xiao <xfxyjwf@gmail.com> | 2015-06-15 18:21:48 -0700 |
---|---|---|
committer | Feng Xiao <xfxyjwf@gmail.com> | 2015-06-15 18:24:01 -0700 |
commit | e96ff30120a3834f7d1e31e43e591bf7cfbd731f (patch) | |
tree | 7e4c317912ac3809fbff11bb692084debd4a27eb /src/google/protobuf/util/internal/snake2camel_objectwriter_test.cc | |
parent | 4cbb612299eaf8259db25f5dcda46022fbd1db54 (diff) | |
download | protobuf-e96ff30120a3834f7d1e31e43e591bf7cfbd731f.tar.gz protobuf-e96ff30120a3834f7d1e31e43e591bf7cfbd731f.tar.bz2 protobuf-e96ff30120a3834f7d1e31e43e591bf7cfbd731f.zip |
Down-integrate from internal code base.
[ci skip]
Change-Id: I9391c09640e0b0b2b21c45a97a1fc91814d95c5d
Diffstat (limited to 'src/google/protobuf/util/internal/snake2camel_objectwriter_test.cc')
-rw-r--r-- | src/google/protobuf/util/internal/snake2camel_objectwriter_test.cc | 311 |
1 files changed, 311 insertions, 0 deletions
diff --git a/src/google/protobuf/util/internal/snake2camel_objectwriter_test.cc b/src/google/protobuf/util/internal/snake2camel_objectwriter_test.cc new file mode 100644 index 00000000..67388c3b --- /dev/null +++ b/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 |