#include // Other 1st party headers #include #include #include #include #include #include TEST_CASE("[Audio] sf::Sound", runAudioDeviceTests()) { SECTION("Type traits") { STATIC_CHECK(!std::is_constructible_v); STATIC_CHECK(std::is_copy_constructible_v); STATIC_CHECK(std::is_copy_assignable_v); STATIC_CHECK(std::is_move_constructible_v); STATIC_CHECK(!std::is_nothrow_move_constructible_v); STATIC_CHECK(std::is_move_assignable_v); STATIC_CHECK(!std::is_nothrow_move_assignable_v); STATIC_CHECK(std::has_virtual_destructor_v); } sf::SoundBuffer soundBuffer; REQUIRE(soundBuffer.loadFromFile("Audio/ding.flac")); SECTION("Construction") { const sf::Sound sound(soundBuffer); CHECK(&sound.getBuffer() == &soundBuffer); CHECK(!sound.getLoop()); CHECK(sound.getPlayingOffset() == sf::Time::Zero); CHECK(sound.getStatus() == sf::SoundSource::Status::Stopped); } SECTION("Copy semantics") { const sf::Sound sound(soundBuffer); SECTION("Construction") { const sf::Sound soundCopy(sound); // NOLINT(performance-unnecessary-copy-initialization) CHECK(&soundCopy.getBuffer() == &soundBuffer); CHECK(!soundCopy.getLoop()); CHECK(soundCopy.getPlayingOffset() == sf::Time::Zero); CHECK(soundCopy.getStatus() == sf::SoundSource::Status::Stopped); } SECTION("Assignment") { const sf::SoundBuffer emptySoundBuffer; sf::Sound soundCopy(emptySoundBuffer); soundCopy = sound; CHECK(&soundCopy.getBuffer() == &soundBuffer); CHECK(!soundCopy.getLoop()); CHECK(soundCopy.getPlayingOffset() == sf::Time::Zero); CHECK(soundCopy.getStatus() == sf::SoundSource::Status::Stopped); } } SECTION("Set/get buffer") { const sf::SoundBuffer otherSoundBuffer; sf::Sound sound(soundBuffer); sound.setBuffer(otherSoundBuffer); CHECK(&sound.getBuffer() == &otherSoundBuffer); } SECTION("Set/get loop") { sf::Sound sound(soundBuffer); sound.setLoop(true); CHECK(sound.getLoop()); } SECTION("Set/get playing offset") { sf::Sound sound(soundBuffer); sound.setPlayingOffset(sf::seconds(10)); CHECK(sound.getPlayingOffset() == sf::seconds(10)); } }