/** * @file * @brief Unit tests for openshot::Profile * @author Jonathan Thomas * * @ref License */ // Copyright (c) 2008-2023 OpenShot Studios, LLC // // SPDX-License-Identifier: LGPL-3.0-or-later #include "openshot_catch.h" #include "Profiles.h" TEST_CASE( "empty constructor", "[libopenshot][profile]" ) { openshot::Profile p1; // Default values CHECK(p1.info.description.empty()); CHECK(p1.info.width == 0); CHECK(p1.info.height == 0); CHECK(p1.info.fps.num == 0); CHECK(p1.info.fps.den == 0); CHECK(p1.info.display_ratio.num == 0); CHECK(p1.info.display_ratio.den == 0); CHECK(p1.info.pixel_ratio.num == 0); CHECK(p1.info.pixel_ratio.den == 0); CHECK(p1.info.interlaced_frame == false); } TEST_CASE( "constructor with example profiles", "[libopenshot][profile]" ) { std::stringstream profile1; profile1 << TEST_MEDIA_PATH << "example_profile1"; openshot::Profile p1(profile1.str()); // Default values CHECK(p1.info.description == "HD 720p 24 fps"); CHECK(p1.info.width == 1280); CHECK(p1.info.height == 720); CHECK(p1.info.fps.num == 24); CHECK(p1.info.fps.den == 1); CHECK(p1.info.display_ratio.num == 16); CHECK(p1.info.display_ratio.den == 9); CHECK(p1.info.pixel_ratio.num == 1); CHECK(p1.info.pixel_ratio.den == 1); CHECK(p1.info.interlaced_frame == false); // Export to JSON openshot::Profile p1_json = openshot::Profile(); p1_json.SetJson(p1.Json()); CHECK(p1_json.info.description == "HD 720p 24 fps"); CHECK(p1_json.info.width == 1280); CHECK(p1_json.info.height == 720); CHECK(p1_json.info.fps.num == 24); CHECK(p1_json.info.fps.den == 1); CHECK(p1_json.info.display_ratio.num == 16); CHECK(p1_json.info.display_ratio.den == 9); CHECK(p1_json.info.pixel_ratio.num == 1); CHECK(p1_json.info.pixel_ratio.den == 1); CHECK(p1_json.info.interlaced_frame == false); std::stringstream profile2; profile2 << TEST_MEDIA_PATH << "example_profile2"; openshot::Profile p2(profile2.str()); // Default values CHECK(p2.info.description == "HD 1080i 29.97 fps"); CHECK(p2.info.width == 1920); CHECK(p2.info.height == 1080); CHECK(p2.info.fps.num == 30000); CHECK(p2.info.fps.den == 1001); CHECK(p2.info.display_ratio.num == 16); CHECK(p2.info.display_ratio.den == 9); CHECK(p2.info.pixel_ratio.num == 1); CHECK(p2.info.pixel_ratio.den == 1); CHECK(p2.info.interlaced_frame == true); } TEST_CASE( "24 fps names", "[libopenshot][profile]" ) { std::stringstream path; path << TEST_MEDIA_PATH << "example_profile1"; openshot::Profile p(path.str()); // Default values CHECK(p.Key() == "01280x0720p0024_16-09"); CHECK(p.ShortName() == "1280x720p24"); CHECK(p.LongName() == "1280x720p @ 24 fps (16:9)"); CHECK(p.LongNameWithDesc() == "1280x720p @ 24 fps (16:9) HD 720p 24 fps"); } TEST_CASE( "29.97 fps names", "[libopenshot][profile]" ) { std::stringstream path; path << TEST_MEDIA_PATH << "example_profile2"; openshot::Profile p(path.str()); // Default values CHECK(p.Key() == "01920x1080i2997_16-09"); CHECK(p.ShortName() == "1920x1080i29.97"); CHECK(p.LongName() == "1920x1080i @ 29.97 fps (16:9)"); CHECK(p.LongNameWithDesc() == "1920x1080i @ 29.97 fps (16:9) HD 1080i 29.97 fps"); } TEST_CASE( "compare profiles", "[libopenshot][profile]" ) { // 720p24 std::stringstream profile1; profile1 << TEST_MEDIA_PATH << "example_profile1"; openshot::Profile p1(profile1.str()); // 720p24 (copy) openshot::Profile p1copy(profile1.str()); // 1080i2997 std::stringstream profile2; profile2 << TEST_MEDIA_PATH << "example_profile2"; openshot::Profile p2(profile2.str()); // 1080i2997 (copy) openshot::Profile p2copy(profile2.str()); CHECK(p1 < p2); CHECK(p2 > p1); CHECK(p1 == p1copy); CHECK(p2 == p2copy); // 720p60 openshot::Profile p3(profile1.str()); p3.info.fps.num = 60; CHECK(p1 < p3); CHECK_FALSE(p1 == p3); // 72024, DAR: 4:3 p3.info.fps.num = 24; p3.info.display_ratio.num = 4; p3.info.display_ratio.den = 3; CHECK(p1 > p3); CHECK(p3 < p1); CHECK_FALSE(p1 == p3); } TEST_CASE( "save profiles", "[libopenshot][profile]" ) { // Load profile std::stringstream profile1; profile1 << TEST_MEDIA_PATH << "example_profile1"; openshot::Profile p1(profile1.str()); // Save copy std::stringstream profile1_copy; profile1_copy << TEST_MEDIA_PATH << "example_profile1_copy"; std::cout << profile1_copy.str() << std::endl; p1.Save(profile1_copy.str()); // Load saved copy openshot::Profile p1_load_copy(profile1_copy.str()); // Default values CHECK(p1_load_copy.info.description == "HD 720p 24 fps"); CHECK(p1_load_copy.info.width == 1280); CHECK(p1_load_copy.info.height == 720); CHECK(p1_load_copy.info.fps.num == 24); CHECK(p1_load_copy.info.fps.den == 1); CHECK(p1_load_copy.info.display_ratio.num == 16); CHECK(p1_load_copy.info.display_ratio.den == 9); CHECK(p1_load_copy.info.pixel_ratio.num == 1); CHECK(p1_load_copy.info.pixel_ratio.den == 1); CHECK(p1_load_copy.info.interlaced_frame == false); }