ref_counted_memory_unittest.cc revision f2477e01787aa58f445919b809d89e252beef54f
15821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Copyright (c) 2011 The Chromium Authors. All rights reserved.
25821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Use of this source code is governed by a BSD-style license that can be
35821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// found in the LICENSE file.
45821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
55821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "base/memory/ref_counted_memory.h"
65821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
75821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "testing/gtest/include/gtest/gtest.h"
85821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
95821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)namespace base {
105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)TEST(RefCountedMemoryUnitTest, RefCountedStaticMemory) {
125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  scoped_refptr<RefCountedMemory> mem = new RefCountedStaticMemory(
135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      reinterpret_cast<const uint8*>("static mem00"), 10);
145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_EQ(10U, mem->size());
165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_EQ("static mem",
175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)            std::string(reinterpret_cast<const char*>(mem->front()),
185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                        mem->size()));
195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)TEST(RefCountedMemoryUnitTest, RefCountedBytes) {
225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  std::vector<uint8> data;
235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  data.push_back(45);
245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  data.push_back(99);
255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  scoped_refptr<RefCountedMemory> mem = RefCountedBytes::TakeVector(&data);
265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_EQ(0U, data.size());
285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_EQ(2U, mem->size());
305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_EQ(45U, mem->front()[0]);
315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_EQ(99U, mem->front()[1]);
325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)TEST(RefCountedMemoryUnitTest, RefCountedString) {
355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  std::string s("destroy me");
365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  scoped_refptr<RefCountedMemory> mem = RefCountedString::TakeString(&s);
375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_EQ(0U, s.size());
395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_EQ(10U, mem->size());
415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_EQ('d', mem->front()[0]);
425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_EQ('e', mem->front()[1]);
435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
45f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)TEST(RefCountedMemoryUnitTest, RefCountedMallocedMemory) {
46f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  void* data = malloc(6);
47f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  memcpy(data, "hello", 6);
48f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)
49f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  scoped_refptr<RefCountedMemory> mem = new RefCountedMallocedMemory(data, 6);
50f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)
51f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  EXPECT_EQ(6U, mem->size());
52f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  EXPECT_EQ(0, memcmp("hello", mem->front(), 6));
53f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)}
54f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)
552a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)TEST(RefCountedMemoryUnitTest, Equals) {
562a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  std::string s1("same");
572a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  scoped_refptr<RefCountedMemory> mem1 = RefCountedString::TakeString(&s1);
582a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
592a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  std::vector<unsigned char> d2;
602a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  d2.push_back('s');
612a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  d2.push_back('a');
622a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  d2.push_back('m');
632a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  d2.push_back('e');
642a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  scoped_refptr<RefCountedMemory> mem2 = RefCountedBytes::TakeVector(&d2);
652a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
662a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  EXPECT_TRUE(mem1->Equals(mem2));
672a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
682a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  std::string s3("diff");
692a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  scoped_refptr<RefCountedMemory> mem3 = RefCountedString::TakeString(&s3);
702a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
712a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  EXPECT_FALSE(mem1->Equals(mem3));
722a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  EXPECT_FALSE(mem2->Equals(mem3));
732a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)}
742a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
752a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)TEST(RefCountedMemoryUnitTest, EqualsNull) {
762a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  std::string s("str");
772a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  scoped_refptr<RefCountedMemory> mem = RefCountedString::TakeString(&s);
782a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  EXPECT_FALSE(mem->Equals(NULL));
792a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)}
802a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}  //  namespace base
82