feat: add independent CLI launches and preserve shared video bookmarks
This commit is contained in:
@@ -20,7 +20,9 @@ struct PlaybackProgressChecks {
|
||||
try FileManager.default.createSymbolicLink(at: alias, withDestinationURL: file)
|
||||
let youtube = URL(string: "https://www.youtube.com/watch?v=jNQXAC9IVRw")!
|
||||
|
||||
var progress = PlaybackProgress(defaults: defaults)
|
||||
let progress = PlaybackProgress(defaults: defaults)
|
||||
let independent = PlaybackProgress(defaults: UserDefaults(suiteName: suite)!)
|
||||
let independentFile = directory.appendingPathComponent("independent.mp4")
|
||||
progress.save(123.25, for: file)
|
||||
progress.save(18, for: otherFile)
|
||||
progress.save(9.5, for: youtube)
|
||||
@@ -29,12 +31,20 @@ struct PlaybackProgressChecks {
|
||||
require(reopened.position(for: alias) == 123.25, "symlink and original file share progress")
|
||||
require(reopened.position(for: otherFile) == 18, "local files keep separate positions")
|
||||
require(reopened.position(for: youtube) == 9.5, "canonical YouTube URL persists independently of local files")
|
||||
independent.save(27, for: independentFile)
|
||||
let shared = PlaybackProgress(defaults: defaults)
|
||||
require(shared.position(for: file) == 123.25 && shared.position(for: youtube) == 9.5,
|
||||
"an independently initialized player cannot overwrite another video's bookmarks")
|
||||
require(shared.position(for: independentFile) == 27,
|
||||
"independent player progress is also retained")
|
||||
|
||||
progress.save(nil, for: alias)
|
||||
let completed = PlaybackProgress(defaults: defaults)
|
||||
require(completed.position(for: file) == nil, "completion clears progress through either file identity")
|
||||
require(completed.position(for: otherFile) == 18 && completed.position(for: youtube) == 9.5,
|
||||
"clearing one video preserves other videos")
|
||||
require(completed.position(for: independentFile) == 27,
|
||||
"clearing progress in one player preserves a different player's bookmark")
|
||||
for position in [Double.nan, Double.infinity, -Double.infinity, -1, 0] {
|
||||
progress.save(position, for: file)
|
||||
require(PlaybackProgress(defaults: defaults).position(for: file) == nil,
|
||||
@@ -44,6 +54,15 @@ struct PlaybackProgressChecks {
|
||||
defer { isolated.removePersistentDomain(forName: suite + ".isolated") }
|
||||
require(PlaybackProgress(defaults: isolated).position(for: youtube) == nil,
|
||||
"injected preference domains remain isolated")
|
||||
isolated.set([file.standardizedFileURL.absoluteString: 42.5, youtube.absoluteString: 15],
|
||||
forKey: "playbackPositions")
|
||||
let migrated = PlaybackProgress(defaults: isolated)
|
||||
require(migrated.position(for: alias) == 42.5 && migrated.position(for: youtube) == 15,
|
||||
"existing local and YouTube bookmarks survive the shared-history migration")
|
||||
migrated.save(43, for: file)
|
||||
let migratedAgain = PlaybackProgress(defaults: isolated)
|
||||
require(migratedAgain.position(for: file) == 43 && migratedAgain.position(for: youtube) == 15,
|
||||
"opening another player preserves both migrated bookmarks and newer progress")
|
||||
print("Playback progress checks passed")
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user