| // Copyright 2015 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 "wtf/Optional.h" | |
| #include "testing/gtest/include/gtest/gtest.h" | |
| namespace WTF { | |
| namespace { | |
| struct IntBox { | |
| IntBox(int n) : number(n) {} | |
| int number; | |
| }; | |
| class DestructionNotifier { | |
| public: | |
| DestructionNotifier(bool& flag) : m_flag(flag) {} | |
| ~DestructionNotifier() { m_flag = true; } | |
| private: | |
| bool& m_flag; | |
| }; | |
| TEST(OptionalTest, BooleanTest) { | |
| Optional<int> optional; | |
| EXPECT_FALSE(optional); | |
| optional.emplace(0); | |
| EXPECT_TRUE(optional); | |
| } | |
| TEST(OptionalTest, Dereference) { | |
| Optional<int> optional; | |
| optional.emplace(1); | |
| EXPECT_EQ(1, *optional); | |
| Optional<IntBox> optionalIntbox; | |
| optionalIntbox.emplace(42); | |
| EXPECT_EQ(42, optionalIntbox->number); | |
| } | |
| TEST(OptionalTest, DestructorCalled) { | |
| // Destroying a disengaged optional shouldn't do anything. | |
| { Optional<DestructionNotifier> optional; } | |
| // Destroying an engaged optional should call the destructor. | |
| bool isDestroyed = false; | |
| { | |
| Optional<DestructionNotifier> optional; | |
| optional.emplace(isDestroyed); | |
| EXPECT_FALSE(isDestroyed); | |
| } | |
| EXPECT_TRUE(isDestroyed); | |
| } | |
| } // namespace | |
| } // namespace WTF |