// 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 "base/supports_user_data.h"

#include <vector>

#include "testing/gtest/include/gtest/gtest.h"

namespace base {
namespace {

struct TestSupportsUserData : public SupportsUserData {};

struct UsesItself : public SupportsUserData::Data {
  UsesItself(SupportsUserData* supports_user_data, const void* key)
      : supports_user_data_(supports_user_data),
        key_(key) {
  }

  virtual ~UsesItself() {
    EXPECT_EQ(NULL, supports_user_data_->GetUserData(key_));
  }

  SupportsUserData* supports_user_data_;
  const void* key_;
};

TEST(SupportsUserDataTest, ClearWorksRecursively) {
  TestSupportsUserData supports_user_data;
  char key = 0;
  supports_user_data.SetUserData(&key,
                                 new UsesItself(&supports_user_data, &key));
  // Destruction of supports_user_data runs the actual test.
}

}  // namespace
}  // namespace base
