diff options
author | Allan Sandfeld Jensen <allan.jensen@qt.io> | 2020-10-12 14:27:29 +0200 |
---|---|---|
committer | Allan Sandfeld Jensen <allan.jensen@qt.io> | 2020-10-13 09:35:20 +0000 |
commit | c30a6232df03e1efbd9f3b226777b07e087a1122 (patch) | |
tree | e992f45784689f373bcc38d1b79a239ebe17ee23 /chromium/content/common/state_transitions_unittest.cc | |
parent | 7b5b123ac58f58ffde0f4f6e488bcd09aa4decd3 (diff) | |
download | qtwebengine-chromium-85-based.tar.gz |
BASELINE: Update Chromium to 85.0.4183.14085-based
Change-Id: Iaa42f4680837c57725b1344f108c0196741f6057
Reviewed-by: Allan Sandfeld Jensen <allan.jensen@qt.io>
Diffstat (limited to 'chromium/content/common/state_transitions_unittest.cc')
-rw-r--r-- | chromium/content/common/state_transitions_unittest.cc | 100 |
1 files changed, 100 insertions, 0 deletions
diff --git a/chromium/content/common/state_transitions_unittest.cc b/chromium/content/common/state_transitions_unittest.cc new file mode 100644 index 00000000000..e7edee2953f --- /dev/null +++ b/chromium/content/common/state_transitions_unittest.cc @@ -0,0 +1,100 @@ +// Copyright (c) 2020 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 "content/common/state_transitions.h" + +#include <ostream> +#include <string> + +#include "base/test/gtest_util.h" +#include "build/build_config.h" +#include "testing/gmock/include/gmock/gmock.h" +#include "testing/gtest/include/gtest/gtest.h" + +namespace content { + +enum class State { kState1 = 0, kState2, kState3, kState4 }; + +std::ostream& operator<<(std::ostream& o, const State& s) { + return o << static_cast<int>(s); +} + +TEST(StateTransitionsTest, Constructor) { + // No expectations, just make sure the constructor works. + const StateTransitions<State> transitions({ + {State::kState1, {State::kState2, State::kState3}}, + {State::kState2, {State::kState3, State::kState4}}, + }); +} + +TEST(StateTransitionsTest, GetValidTransitions) { + const StateTransitions<State> transitions({ + {State::kState1, {State::kState2, State::kState3}}, + {State::kState2, {State::kState3, State::kState4}}, + }); + EXPECT_THAT(transitions.GetValidTransitions(State::kState1), + testing::ElementsAre(State::kState2, State::kState3)); + EXPECT_THAT(transitions.GetValidTransitions(State::kState2), + testing::ElementsAre(State::kState3, State::kState4)); + EXPECT_THAT(transitions.GetValidTransitions(State::kState3), + testing::ElementsAre()); + EXPECT_THAT(transitions.GetValidTransitions(State::kState4), + testing::ElementsAre()); +} + +TEST(StateTransitionsTest, IsTransitionValid) { + const StateTransitions<State> transitions({ + {State::kState1, {State::kState2, State::kState3}}, + {State::kState2, {State::kState3, State::kState4}}, + }); + ASSERT_TRUE(transitions.IsTransitionValid(State::kState1, State::kState2)); + ASSERT_TRUE(transitions.IsTransitionValid(State::kState2, State::kState3)); + ASSERT_FALSE(transitions.IsTransitionValid(State::kState1, State::kState4)); + // kState3 was omitted from the definition. + ASSERT_FALSE(transitions.IsTransitionValid(State::kState3, State::kState4)); +} + +TEST(StateTransitionsTest, DCHECK_STATE_TRANSITION) { + const StateTransitions<State> transitions({ + {State::kState1, {State::kState2, State::kState3}}, + {State::kState2, {State::kState3, State::kState4}}, + }); + DCHECK_STATE_TRANSITION(&transitions, State::kState1, State::kState2); + DCHECK_STATE_TRANSITION(&transitions, State::kState2, State::kState3); + +#if DCHECK_IS_ON() + // EXPECT_DEATH is not defined on IOS. +#ifndef OS_IOS + EXPECT_DEATH( + DCHECK_STATE_TRANSITION(&transitions, State::kState1, State::kState4), + "Check failed.*Invalid transition: 0 -> 3"); + // kState3 was omitted from the definition. + EXPECT_DEATH( + DCHECK_STATE_TRANSITION(&transitions, State::kState3, State::kState4), + "Check failed.*Invalid transition: 2 -> 3"); +#endif // !OS_IOS +#endif // DCHECK_IS_ON() +} + +// Test that everything works OK with some other data type. +TEST(StateTransitionsTest, NonEnum) { + const StateTransitions<std::string> transitions({ + {"state1", {"state2", "state3"}}, + {"state2", {"state3", "state4"}}, + }); + ASSERT_TRUE(transitions.IsTransitionValid("state1", "state2")); + ASSERT_TRUE(transitions.IsTransitionValid("state2", "state3")); + ASSERT_FALSE(transitions.IsTransitionValid("state1", "state4")); + // kState3 was omitted from the definition. + ASSERT_FALSE(transitions.IsTransitionValid("state3", "state4")); + DCHECK_STATE_TRANSITION(&transitions, "state1", "state2"); + DCHECK_STATE_TRANSITION(&transitions, "state2", "state3"); + + // Try some states that are not in the specification at all. + ASSERT_FALSE(transitions.IsTransitionValid("foo", "state2")); + ASSERT_FALSE(transitions.IsTransitionValid("state1", "foo")); + ASSERT_FALSE(transitions.IsTransitionValid("foo", "bar")); +} + +} // namespace content |