Add app document route core

This commit is contained in:
2026-06-02 22:10:50 +02:00
parent e15894e4ea
commit 0e03e5940a
10 changed files with 204 additions and 12 deletions

View File

@@ -0,0 +1,64 @@
#include "app_core/document_route.h"
#include "test_harness.h"
namespace {
void classifies_regular_project_path(pp::tests::Harness& harness)
{
const auto route = pp::app::classify_document_open_path("D:\\Paint\\Scenes\\demo.ppi");
PP_EXPECT(harness, route);
PP_EXPECT(harness, route.value().kind == pp::app::DocumentOpenKind::open_project);
PP_EXPECT(harness, route.value().path == "D:\\Paint\\Scenes\\demo.ppi");
PP_EXPECT(harness, route.value().directory == "D:\\Paint\\Scenes");
PP_EXPECT(harness, route.value().name == "demo");
PP_EXPECT(harness, route.value().extension == "ppi");
}
void classifies_brush_imports_case_insensitively(pp::tests::Harness& harness)
{
const auto abr_route = pp::app::classify_document_open_path("/brushes/Clouds.ABR");
const auto ppbr_route = pp::app::classify_document_open_path("/brushes/palette.PpBr");
PP_EXPECT(harness, abr_route);
PP_EXPECT(harness, ppbr_route);
PP_EXPECT(harness, abr_route.value().kind == pp::app::DocumentOpenKind::import_abr);
PP_EXPECT(harness, abr_route.value().extension == "abr");
PP_EXPECT(harness, ppbr_route.value().kind == pp::app::DocumentOpenKind::import_ppbr);
PP_EXPECT(harness, ppbr_route.value().extension == "ppbr");
}
void preserves_names_with_inner_dots(pp::tests::Harness& harness)
{
const auto route = pp::app::classify_document_open_path("C:/projects/shot.001.paint.ppi");
PP_EXPECT(harness, route);
PP_EXPECT(harness, route.value().directory == "C:/projects");
PP_EXPECT(harness, route.value().name == "shot.001.paint");
PP_EXPECT(harness, route.value().extension == "ppi");
}
void rejects_paths_that_legacy_regex_did_not_accept(pp::tests::Harness& harness)
{
const auto no_directory = pp::app::classify_document_open_path("demo.ppi");
const auto no_extension = pp::app::classify_document_open_path("D:/Paint/demo");
const auto empty_file = pp::app::classify_document_open_path("D:/Paint/.ppi");
const auto unsupported_extension_chars = pp::app::classify_document_open_path("D:/Paint/demo.ppi.tmp!");
PP_EXPECT(harness, !no_directory);
PP_EXPECT(harness, !no_extension);
PP_EXPECT(harness, !empty_file);
PP_EXPECT(harness, !unsupported_extension_chars);
}
}
int main()
{
pp::tests::Harness harness;
harness.run("classifies regular project path", classifies_regular_project_path);
harness.run("classifies brush imports case insensitively", classifies_brush_imports_case_insensitively);
harness.run("preserves names with inner dots", preserves_names_with_inner_dots);
harness.run("rejects paths that legacy regex did not accept", rejects_paths_that_legacy_regex_did_not_accept);
return harness.finish();
}