/* * Copyright (c) 2018-2023, Andreas Kling * * SPDX-License-Identifier: BSD-2-Clause */ #include #include #include #include #include TEST_CASE(destroy_self_owning_object) { // This test is a little convoluted because SelfOwning can't own itself // through a NonnullOwnPtr directly. We have to use an intermediate object ("Inner"). struct SelfOwning { SelfOwning() { } struct Inner { explicit Inner(NonnullOwnPtr self) : self(move(self)) { } NonnullOwnPtr self; }; OwnPtr inner; }; OwnPtr object = make(); auto* object_ptr = object.ptr(); object_ptr->inner = make(object.release_nonnull()); object_ptr->inner = nullptr; } struct Foo { }; template<> struct AK::Formatter : Formatter { ErrorOr format(FormatBuilder& builder, Foo const&) { return Formatter::format(builder, ":^)"sv); } }; TEST_CASE(formatter) { auto foo = make(); EXPECT_EQ(MUST(String::formatted("{}", foo)), ":^)"sv); }