22 lines
1.8 KiB
C++
22 lines
1.8 KiB
C++
#include "settings_merge.h"
|
|
#include <iostream>
|
|
using namespace ks;
|
|
int main(){try{
|
|
Settings base;base.autoCorrect=false;base.toggle=L"Ctrl+Alt+F11";
|
|
auto draft=base,current=base;draft.toggle=L"Ctrl+Alt+F12";current.autoCorrect=true;
|
|
auto merged=decodeSettings(mergeConfigurationSettings(encodeSettings(base),encodeSettings(draft),encodeSettings(current)),{});
|
|
if(merged.toggle!=draft.toggle||!merged.autoCorrect)throw std::runtime_error("independent changes lost");
|
|
current.toggle=L"Ctrl+Alt+F10";bool rejected=false;
|
|
try{mergeConfigurationSettings(encodeSettings(base),encodeSettings(draft),encodeSettings(current));}
|
|
catch(const std::exception &e){rejected=std::string(e.what()).starts_with("Settings conflict: ");}
|
|
if(!rejected)throw std::runtime_error("same-field conflict silently overwritten");
|
|
merged=decodeSettings(mergeConfigurationSettings(encodeSettings(base),encodeSettings(draft),encodeSettings(current),true),{});
|
|
if(merged.toggle!=draft.toggle||!merged.autoCorrect)throw std::runtime_error("confirmed edits discarded unrelated current changes");
|
|
merged=decodeSettings(mergeConfigurationSettings(encodeSettings(base),encodeSettings(base),encodeSettings(current)),{});
|
|
if(merged.toggle!=current.toggle||!merged.autoCorrect)throw std::runtime_error("unchanged draft reverted current settings");
|
|
draft=base;current=base;draft.chatCycles[L"telegram\nfirst"]={L"win:04090409"};current.chatCycles[L"telegram\nsecond"]={L"win:04220422"};
|
|
merged=decodeSettings(mergeConfigurationSettings(encodeSettings(base),encodeSettings(draft),encodeSettings(current)),{});
|
|
if(merged.chatCycles.size()!=2)throw std::runtime_error("independent nested changes lost");
|
|
std::cout<<"Passed 5 settings-save merge checks\n";
|
|
}catch(const std::exception &e){std::cerr<<e.what()<<'\n';return 1;}}
|