Index: sdch/open_vcdiff/depot/opensource/open-vcdiff/src/headerparser_test.cc |
=================================================================== |
--- sdch/open_vcdiff/depot/opensource/open-vcdiff/src/headerparser_test.cc (revision 2678) |
+++ sdch/open_vcdiff/depot/opensource/open-vcdiff/src/headerparser_test.cc (working copy) |
@@ -1,209 +0,0 @@ |
-// Copyright 2008 Google Inc. |
-// Author: Lincoln Smith |
-// |
-// Licensed under the Apache License, Version 2.0 (the "License"); |
-// you may not use this file except in compliance with the License. |
-// You may obtain a copy of the License at |
-// |
-// http://www.apache.org/licenses/LICENSE-2.0 |
-// |
-// Unless required by applicable law or agreed to in writing, software |
-// distributed under the License is distributed on an "AS IS" BASIS, |
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. |
-// See the License for the specific language governing permissions and |
-// limitations under the License. |
- |
-#include <config.h> |
-#include "headerparser.h" |
-#include <cstdlib> // rand, srand |
-#include <string> |
-#include <vector> |
-#include "testing.h" |
-#include "varint_bigendian.h" |
- |
-namespace open_vcdiff { |
-namespace { // anonymous |
- |
-using std::string; |
-using std::vector; |
- |
-class VCDiffHeaderParserTest : public testing::Test { |
- protected: |
- static const int kTestSize = 1024; |
- |
- VCDiffHeaderParserTest() : parser(NULL) { } |
- |
- virtual ~VCDiffHeaderParserTest() { |
- delete parser; |
- } |
- |
- virtual void SetUp() { |
- srand(1); // make sure each test uses the same data set |
- } |
- |
- void StartParsing() { |
- parser = new VCDiffHeaderParser( |
- encoded_buffer_.data(), |
- encoded_buffer_.data() + encoded_buffer_.size()); |
- EXPECT_EQ(encoded_buffer_.data(), parser->UnparsedData()); |
- } |
- |
- void VerifyByte(unsigned char expected_value) { |
- unsigned char decoded_byte = 0; |
- const char* prior_position = parser->UnparsedData(); |
- EXPECT_TRUE(parser->ParseByte(&decoded_byte)); |
- EXPECT_EQ(expected_value, decoded_byte); |
- EXPECT_EQ(RESULT_SUCCESS, parser->GetResult()); |
- EXPECT_EQ(prior_position + sizeof(unsigned char), |
- parser->UnparsedData()); |
- } |
- |
- void VerifyInt32(int32_t expected_value) { |
- int32_t decoded_integer = 0; |
- const char* prior_position = parser->UnparsedData(); |
- EXPECT_TRUE(parser->ParseInt32("decoded int32", &decoded_integer)); |
- EXPECT_EQ(expected_value, decoded_integer); |
- EXPECT_EQ(RESULT_SUCCESS, parser->GetResult()); |
- EXPECT_EQ(prior_position + VarintBE<int32_t>::Length(decoded_integer), |
- parser->UnparsedData()); |
- } |
- |
- void VerifyUInt32(uint32_t expected_value) { |
- uint32_t decoded_integer = 0; |
- const char* prior_position = parser->UnparsedData(); |
- EXPECT_TRUE(parser->ParseUInt32("decoded uint32", &decoded_integer)); |
- EXPECT_EQ(expected_value, decoded_integer); |
- EXPECT_EQ(RESULT_SUCCESS, parser->GetResult()); |
- EXPECT_EQ(prior_position + VarintBE<int64_t>::Length(decoded_integer), |
- parser->UnparsedData()); |
- } |
- |
- void VerifyChecksum(VCDChecksum expected_value) { |
- VCDChecksum decoded_checksum = 0; |
- const char* prior_position = parser->UnparsedData(); |
- EXPECT_TRUE(parser->ParseChecksum("decoded checksum", &decoded_checksum)); |
- EXPECT_EQ(expected_value, decoded_checksum); |
- EXPECT_EQ(RESULT_SUCCESS, parser->GetResult()); |
- EXPECT_EQ(prior_position + VarintBE<int64_t>::Length(decoded_checksum), |
- parser->UnparsedData()); |
- } |
- |
- string encoded_buffer_; |
- VCDiffHeaderParser* parser; |
-}; |
- |
-TEST_F(VCDiffHeaderParserTest, ParseRandomBytes) { |
- vector<unsigned char> byte_values; |
- for (int i = 0; i < kTestSize; ++i) { |
- unsigned char random_byte = PortableRandomInRange<unsigned char>(0xFF); |
- encoded_buffer_.push_back(random_byte); |
- byte_values.push_back(random_byte); |
- } |
- StartParsing(); |
- for (int position = 0; position < kTestSize; ++position) { |
- VerifyByte(byte_values[position]); |
- } |
- unsigned char decoded_byte = 0; |
- EXPECT_FALSE(parser->ParseByte(&decoded_byte)); |
- EXPECT_EQ(RESULT_END_OF_DATA, parser->GetResult()); |
- EXPECT_EQ(encoded_buffer_.data() + encoded_buffer_.size(), |
- parser->UnparsedData()); |
-} |
- |
-TEST_F(VCDiffHeaderParserTest, ParseRandomInt32) { |
- vector<int32_t> integer_values; |
- for (int i = 0; i < kTestSize; ++i) { |
- int32_t random_integer = PortableRandomInRange<int32_t>(0x7FFFFFFF); |
- VarintBE<int32_t>::AppendToString(random_integer, &encoded_buffer_); |
- integer_values.push_back(random_integer); |
- } |
- StartParsing(); |
- for (int i = 0; i < kTestSize; ++i) { |
- VerifyInt32(integer_values[i]); |
- } |
- int32_t decoded_integer = 0; |
- EXPECT_FALSE(parser->ParseInt32("decoded integer", &decoded_integer)); |
- EXPECT_EQ(RESULT_END_OF_DATA, parser->GetResult()); |
- EXPECT_EQ(encoded_buffer_.data() + encoded_buffer_.size(), |
- parser->UnparsedData()); |
-} |
- |
-TEST_F(VCDiffHeaderParserTest, ParseRandomUInt32) { |
- vector<uint32_t> integer_values; |
- for (int i = 0; i < kTestSize; ++i) { |
- uint32_t random_integer = PortableRandomInRange<uint32_t>(0xFFFFFFFF); |
- VarintBE<int64_t>::AppendToString(random_integer, &encoded_buffer_); |
- integer_values.push_back(random_integer); |
- } |
- StartParsing(); |
- uint32_t decoded_integer = 0; |
- for (int i = 0; i < kTestSize; ++i) { |
- VerifyUInt32(integer_values[i]); |
- } |
- EXPECT_FALSE(parser->ParseUInt32("decoded integer", &decoded_integer)); |
- EXPECT_EQ(RESULT_END_OF_DATA, parser->GetResult()); |
- EXPECT_EQ(encoded_buffer_.data() + encoded_buffer_.size(), |
- parser->UnparsedData()); |
-} |
- |
-TEST_F(VCDiffHeaderParserTest, ParseRandomChecksum) { |
- vector<VCDChecksum> checksum_values; |
- for (int i = 0; i < kTestSize; ++i) { |
- VCDChecksum random_checksum = |
- PortableRandomInRange<VCDChecksum>(0xFFFFFFFF); |
- VarintBE<int64_t>::AppendToString(random_checksum, &encoded_buffer_); |
- checksum_values.push_back(random_checksum); |
- } |
- StartParsing(); |
- for (int i = 0; i < kTestSize; ++i) { |
- VerifyChecksum(checksum_values[i]); |
- } |
- VCDChecksum decoded_checksum = 0; |
- EXPECT_FALSE(parser->ParseChecksum("decoded checksum", &decoded_checksum)); |
- EXPECT_EQ(RESULT_END_OF_DATA, parser->GetResult()); |
- EXPECT_EQ(encoded_buffer_.data() + encoded_buffer_.size(), |
- parser->UnparsedData()); |
-} |
- |
-TEST_F(VCDiffHeaderParserTest, ParseMixed) { |
- VarintBE<int64_t>::AppendToString(0xCAFECAFE, &encoded_buffer_); |
- encoded_buffer_.push_back(0xFF); |
- VarintBE<int32_t>::AppendToString(0x02020202, &encoded_buffer_); |
- VarintBE<int64_t>::AppendToString(0xCAFECAFE, &encoded_buffer_); |
- encoded_buffer_.push_back(0xFF); |
- encoded_buffer_.push_back(0xFF); |
- StartParsing(); |
- VerifyUInt32(0xCAFECAFE); |
- VerifyByte(0xFF); |
- VerifyInt32(0x02020202); |
- VerifyChecksum(0xCAFECAFE); |
- int32_t incomplete_int32 = 0; |
- EXPECT_FALSE(parser->ParseInt32("incomplete Varint", &incomplete_int32)); |
- EXPECT_EQ(0, incomplete_int32); |
- EXPECT_EQ(RESULT_END_OF_DATA, parser->GetResult()); |
- EXPECT_EQ(encoded_buffer_.data() + encoded_buffer_.size() - 2, |
- parser->UnparsedData()); |
-} |
- |
-TEST_F(VCDiffHeaderParserTest, ParseInvalidVarint) { |
- // Start with a byte that has the continuation bit plus a high-order bit set |
- encoded_buffer_.append(1, static_cast<char>(0xC0)); |
- // Add too many bytes with continuation bits |
- encoded_buffer_.append(6, static_cast<char>(0x80)); |
- StartParsing(); |
- int32_t invalid_int32 = 0; |
- EXPECT_FALSE(parser->ParseInt32("invalid Varint", &invalid_int32)); |
- EXPECT_EQ(0, invalid_int32); |
- EXPECT_EQ(RESULT_ERROR, parser->GetResult()); |
- EXPECT_EQ(encoded_buffer_.data(), parser->UnparsedData()); |
- // After the parse failure, any other call to Parse... should return an error, |
- // even though there is still a byte that could be read as valid. |
- unsigned char decoded_byte = 0; |
- EXPECT_FALSE(parser->ParseByte(&decoded_byte)); |
- EXPECT_EQ(0, decoded_byte); |
- EXPECT_EQ(RESULT_ERROR, parser->GetResult()); |
- EXPECT_EQ(encoded_buffer_.data(), parser->UnparsedData()); |
-} |
- |
-} // namespace open_vcdiff |
-} // anonymous namespace |