@@ -2335,4 +2335,145 @@ TEST_CASE("view.zip.dynamic")
23352335 REQUIRE (Index == 3 );
23362336 }
23372337}
2338+
2339+ // ----------------------------------------------------------------------------
2340+
2341+ #include " panel.hpp"
2342+ #include " panelmix.hpp"
2343+
2344+ TEST_CASE (" panelmix.StatusViewSettings" )
2345+ {
2346+ const auto CheckNameEmptySize = [](string_view const Widths)
2347+ {
2348+ const auto Lines = deserialize_status_line_settings (L" N||S" sv, Widths);
2349+
2350+ REQUIRE (Lines.size () == 3uz);
2351+ REQUIRE (Lines[0 ].size () == 1uz);
2352+ REQUIRE (Lines[0 ][0 ].type == column_type::name);
2353+ REQUIRE (Lines[0 ][0 ].width == 10 );
2354+
2355+ REQUIRE (Lines[1 ].empty ());
2356+
2357+ REQUIRE (Lines[2 ].size () == 1uz);
2358+ REQUIRE (Lines[2 ][0 ].type == column_type::size);
2359+ REQUIRE (Lines[2 ][0 ].width == 5 );
2360+
2361+ const auto [ColumnTitles, ColumnWidths] = serialize_status_line_settings (Lines);
2362+ REQUIRE (ColumnTitles == L" N||S" sv);
2363+ REQUIRE (ColumnWidths == L" 10||5" sv);
2364+ };
2365+
2366+ CheckNameEmptySize (L" 10,5" sv);
2367+ CheckNameEmptySize (L" 10|5" sv);
2368+ CheckNameEmptySize (L" 10||5" sv);
2369+
2370+ {
2371+ const auto Lines = deserialize_status_line_settings (L" <foo|bar>||N" sv, L" 7,8" sv);
2372+
2373+ REQUIRE (Lines.size () == 3uz);
2374+ REQUIRE (Lines[0 ].size () == 1uz);
2375+ REQUIRE (Lines[0 ][0 ].type == column_type::custom_0);
2376+ REQUIRE (Lines[0 ][0 ].title == L" foo|bar" sv);
2377+ REQUIRE (Lines[0 ][0 ].width == 7 );
2378+ REQUIRE (Lines[1 ].empty ());
2379+ REQUIRE (Lines[2 ].size () == 1uz);
2380+ REQUIRE (Lines[2 ][0 ].type == column_type::name);
2381+ REQUIRE (Lines[2 ][0 ].width == 8 );
2382+
2383+ const auto [ColumnTitles, ColumnWidths] = serialize_status_line_settings (Lines);
2384+ REQUIRE (ColumnTitles == L" <foo|bar>||N" sv);
2385+ REQUIRE (ColumnWidths == L" 7||8" sv);
2386+ }
2387+
2388+ {
2389+ const auto Lines = deserialize_status_line_settings (L" ||" sv, L" 10,5" sv);
2390+ REQUIRE (Lines.size () == 3uz);
2391+ REQUIRE (std::ranges::all_of (Lines, std::mem_fn (&status_line::empty)));
2392+
2393+ const auto [ColumnTitles, ColumnWidths] = serialize_status_line_settings (Lines);
2394+ REQUIRE (ColumnTitles == L" ||" sv);
2395+ REQUIRE (ColumnWidths == L" ||" sv);
2396+ }
2397+
2398+ {
2399+ const auto Lines = deserialize_status_line_settings (L" N|S" sv, L" 10%,5,7" sv);
2400+ REQUIRE (Lines.size () == 2uz);
2401+ REQUIRE (Lines[0 ].size () == 1uz);
2402+ REQUIRE (Lines[0 ][0 ].width == 10 );
2403+ REQUIRE (Lines[0 ][0 ].width_type == col_width::percent);
2404+ REQUIRE (Lines[1 ].size () == 1uz);
2405+ REQUIRE (Lines[1 ][0 ].width == 5 );
2406+
2407+ const auto [ColumnTitles, ColumnWidths] = serialize_status_line_settings (Lines);
2408+ REQUIRE (ColumnTitles == L" N|S" sv);
2409+ REQUIRE (ColumnWidths == L" 10%|5" sv);
2410+ }
2411+
2412+ {
2413+ const auto Lines = deserialize_status_line_settings (L" N|S" sv, L" 10" sv);
2414+ REQUIRE (Lines.size () == 2uz);
2415+ REQUIRE (Lines[0 ][0 ].width == 10 );
2416+ REQUIRE (Lines[1 ][0 ].width == 0 );
2417+
2418+ const auto [ColumnTitles, ColumnWidths] = serialize_status_line_settings (Lines);
2419+ REQUIRE (ColumnTitles == L" N|S" sv);
2420+ REQUIRE (ColumnWidths == L" 10|0" sv);
2421+ }
2422+
2423+ {
2424+ const auto Lines = deserialize_status_line_settings (L" " sv, L" " sv);
2425+ REQUIRE (Lines.size () == 1uz);
2426+ REQUIRE (Lines.front ().empty ());
2427+
2428+ const auto [ColumnTitles, ColumnWidths] = serialize_status_line_settings (Lines);
2429+ REQUIRE (ColumnTitles.empty ());
2430+ REQUIRE (ColumnWidths.empty ());
2431+ }
2432+ }
2433+
2434+ TEST_CASE (" panel.PanelViewSettingsClone" )
2435+ {
2436+ {
2437+ PanelViewSettings Settings;
2438+ Settings.PanelColumns =
2439+ {
2440+ { column_type::name, COLFLAGS_NONE , 42 , },
2441+ };
2442+ Settings.Name = L" test" sv;
2443+ Settings.Flags = PVS_FULLSCREEN ;
2444+
2445+ const auto Clone = Settings.clone ();
2446+
2447+ REQUIRE (Clone.PanelColumns .size () == 1uz);
2448+ REQUIRE (Clone.PanelColumns [0 ].type == column_type::name);
2449+ REQUIRE (Clone.StatusLines .empty ());
2450+ REQUIRE (Clone.Name == L" test" sv);
2451+ REQUIRE (Clone.Flags == PVS_FULLSCREEN );
2452+ }
2453+
2454+ {
2455+ PanelViewSettings Settings;
2456+ Settings.StatusLines =
2457+ {
2458+ {
2459+ { column_type::name, COLFLAGS_RIGHTALIGN , 10 , },
2460+ },
2461+ {
2462+ { column_type::size, COLFLAGS_NONE , 5 , },
2463+ },
2464+ };
2465+
2466+ const auto Clone = Settings.clone ();
2467+
2468+ REQUIRE (Clone.StatusLines .size () == 2uz);
2469+ REQUIRE (Clone.StatusLines [0 ].size () == 1uz);
2470+ REQUIRE (Clone.StatusLines [0 ][0 ].type == column_type::name);
2471+ REQUIRE (Clone.StatusLines [0 ][0 ].type_flags == COLFLAGS_RIGHTALIGN );
2472+ REQUIRE (Clone.StatusLines [0 ][0 ].width == 10 );
2473+ REQUIRE (Clone.StatusLines [1 ].size () == 1uz);
2474+ REQUIRE (Clone.StatusLines [1 ][0 ].type == column_type::size);
2475+ REQUIRE (Clone.StatusLines [1 ][0 ].type_flags == COLFLAGS_NONE );
2476+ REQUIRE (Clone.StatusLines [1 ][0 ].width == 5 );
2477+ }
2478+ }
23382479#endif
0 commit comments