42 lines
2.5 KiB
C#
42 lines
2.5 KiB
C#
using Microsoft.Win32;
|
|
using Orbit;
|
|
var key = @"Software\OrbitStorageChecks\" + Guid.NewGuid().ToString("N");
|
|
var folder = Path.Combine(Path.GetTempPath(), "OrbitStorageChecks-" + Guid.NewGuid().ToString("N"));
|
|
Directory.CreateDirectory(folder);
|
|
var legacy = Path.Combine(folder, "shortcuts.json");
|
|
var dataFolder = Path.Combine(folder, "data");
|
|
void Check(bool condition, string label) { if (!condition) throw new Exception(label); Console.WriteLine("PASS " + label); }
|
|
SettingsStore Store() => new(key, legacy, dataFolder);
|
|
try
|
|
{
|
|
using (var old = Registry.CurrentUser.CreateSubKey(key)) { old.SetValue("Library", "[{\"Name\":\"Original\"}]"); old.SetValue("DarkTheme", 1); }
|
|
var store = Store();
|
|
Check(store.LoadDarkTheme(), "Registry theme migrated");
|
|
Check(store.Load()!.Contains("Original"), "Registry links migrated");
|
|
Check(File.Exists(store.SettingsPath), "Migration creates JSON in app data directory");
|
|
using (var old = Registry.CurrentUser.CreateSubKey(key)) old.SetValue("Library", "[]");
|
|
Check(Store().Load()!.Contains("Original"), "JSON takes precedence after migration");
|
|
store.Save("[{\"Name\":\"Edited\"}]");
|
|
Check(Store().Load()!.Contains("Edited"), "Edited links persist");
|
|
Check(Store().LoadDarkTheme(), "Link save preserves theme");
|
|
store.SaveDarkTheme(false);
|
|
Check(!Store().LoadDarkTheme() && Store().Load()!.Contains("Edited"), "Theme save preserves links");
|
|
Check(File.Exists(store.SettingsPath + ".bak"), "Previous JSON backed up");
|
|
store.Save("[]"); Check(Store().Load() == "[]", "Empty library persists");
|
|
File.WriteAllText(store.SettingsPath, "broken");
|
|
try { store.Save("[]"); throw new Exception("Corrupt settings overwritten"); } catch (System.Text.Json.JsonException) { }
|
|
Check(File.ReadAllText(store.SettingsPath) == "broken", "Corrupt settings preserved");
|
|
File.Delete(store.SettingsPath);
|
|
Registry.CurrentUser.DeleteSubKeyTree(key, false);
|
|
File.WriteAllText(legacy, "[]"); File.SetAttributes(legacy, FileAttributes.ReadOnly);
|
|
Check(Store().Load() == "[]", "Read-only sidecar migration");
|
|
Check(File.ReadAllText(legacy) == "[]", "Legacy file untouched");
|
|
}
|
|
finally
|
|
{
|
|
Registry.CurrentUser.DeleteSubKeyTree(key, false);
|
|
if (File.Exists(legacy)) { File.SetAttributes(legacy, FileAttributes.Normal); File.Delete(legacy); }
|
|
if (Directory.Exists(dataFolder)) { foreach (var file in Directory.GetFiles(dataFolder)) File.Delete(file); Directory.Delete(dataFolder); }
|
|
Directory.Delete(folder);
|
|
}
|