#include "settings_merge.h" #include 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<