Rockbox open source high quality audio player as a Music Player Daemon
mpris
rockbox
mpd
libadwaita
audio
rust
zig
deno
1# frozen_string_literal: true
2
3require_relative "test_helper"
4
5class PluginTest < Minitest::Test
6 class TestPlugin < Rockbox::Plugin
7 attr_reader :installed_with, :uninstalled
8
9 def initialize(name = "test-plugin")
10 super()
11 @plugin_name = name
12 @uninstalled = false
13 end
14
15 def name; @plugin_name; end
16 def version; "1.0.0"; end
17
18 def install(ctx)
19 @installed_with = ctx
20 end
21
22 def uninstall
23 @uninstalled = true
24 end
25 end
26
27 def setup
28 @registry = Rockbox::PluginRegistry.new
29 @events = Rockbox::EventEmitter.new
30 @ctx = Rockbox::PluginContext.new(query: ->(_, _ = nil) {}, events: @events)
31 end
32
33 def test_register_calls_install_with_context
34 plugin = TestPlugin.new
35 @registry.register(plugin, @ctx)
36 assert_same @ctx, plugin.installed_with
37 assert @registry.installed?("test-plugin")
38 end
39
40 def test_double_register_raises
41 @registry.register(TestPlugin.new, @ctx)
42 assert_raises(ArgumentError) { @registry.register(TestPlugin.new, @ctx) }
43 end
44
45 def test_unregister_calls_uninstall
46 plugin = TestPlugin.new
47 @registry.register(plugin, @ctx)
48 @registry.unregister("test-plugin")
49 assert plugin.uninstalled
50 refute @registry.installed?("test-plugin")
51 end
52
53 def test_unregister_unknown_is_a_noop
54 assert_nil @registry.unregister("nope")
55 end
56
57 def test_list_returns_registered_plugins
58 a = TestPlugin.new("a")
59 b = TestPlugin.new("b")
60 @registry.register(a, @ctx)
61 @registry.register(b, @ctx)
62 assert_equal %w[a b], @registry.list.map(&:name).sort
63 end
64
65 def test_plugin_base_class_defaults
66 base = Rockbox::Plugin.new
67 assert_raises(NotImplementedError) { base.name }
68 assert_equal "0.0.0", base.version
69 assert_nil base.description
70 assert_nil base.install(nil)
71 assert_nil base.uninstall
72 end
73
74 def test_plugin_context_query_bang_delegates
75 captured = nil
76 ctx = Rockbox::PluginContext.new(
77 query: ->(q, vars = nil) { captured = [q, vars]; { ok: true } },
78 events: @events
79 )
80 result = ctx.query!("query Foo { foo }", { id: 1 })
81 assert_equal({ ok: true }, result)
82 assert_equal "query Foo { foo }", captured[0]
83 assert_equal({ id: 1 }, captured[1])
84 end
85end