Script 'mail_helper' called by obssrc Hello community, here is the log from the commit of package rubygem-ruby-dbus for openSUSE:Factory checked in at 2025-04-04 17:29:11 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Comparing /work/SRC/openSUSE:Factory/rubygem-ruby-dbus (Old) and /work/SRC/openSUSE:Factory/.rubygem-ruby-dbus.new.1907 (New) ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Package is "rubygem-ruby-dbus" Fri Apr 4 17:29:11 2025 rev:41 rq:1266924 version:0.25.0 Changes: -------- --- /work/SRC/openSUSE:Factory/rubygem-ruby-dbus/rubygem-ruby-dbus.changes 2025-01-07 20:51:25.695972652 +0100 +++ /work/SRC/openSUSE:Factory/.rubygem-ruby-dbus.new.1907/rubygem-ruby-dbus.changes 2025-04-04 17:29:28.132914781 +0200 @@ -1,0 +2,9 @@ +Thu Apr 3 12:35:53 UTC 2025 - Martin Vidner <mvid...@suse.com> + +- 0.25.0 + Bug fixes: + * Mention qualified property name in Get or Set errors + (gh#mvidner/ruby-dbus#147). + * Fix declaring logger and ostruct gems for Ruby 3.5 + +------------------------------------------------------------------- Old: ---- ruby-dbus-0.24.0.gem New: ---- ruby-dbus-0.25.0.gem ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Other differences: ------------------ ++++++ rubygem-ruby-dbus.spec ++++++ --- /var/tmp/diff_new_pack.AWlICo/_old 2025-04-04 17:29:29.144956509 +0200 +++ /var/tmp/diff_new_pack.AWlICo/_new 2025-04-04 17:29:29.144956509 +0200 @@ -24,12 +24,14 @@ # Name: rubygem-ruby-dbus -Version: 0.24.0 +Version: 0.25.0 Release: 0 %define mod_name ruby-dbus %define mod_full_name %{mod_name}-%{version} # MANUAL +BuildRequires: %{rubygem logger} BuildRequires: %{rubygem nokogiri >= 1.12} +BuildRequires: %{rubygem ostruct} BuildRequires: %{rubygem packaging_rake_tasks} BuildRequires: %{rubygem rake} BuildRequires: %{rubygem rspec >= 3.9} ++++++ gem2rpm.yml ++++++ --- /var/tmp/diff_new_pack.AWlICo/_old 2025-04-04 17:29:29.176957828 +0200 +++ /var/tmp/diff_new_pack.AWlICo/_new 2025-04-04 17:29:29.180957993 +0200 @@ -73,7 +73,9 @@ Provides: ruby-dbus = %{version} Obsoletes: ruby-dbus < %{version} :preamble: |- + BuildRequires: %{rubygem logger} BuildRequires: %{rubygem nokogiri >= 1.12} + BuildRequires: %{rubygem ostruct} BuildRequires: %{rubygem packaging_rake_tasks} BuildRequires: %{rubygem rake} BuildRequires: %{rubygem rspec >= 3.9} ++++++ ruby-dbus-0.24.0.gem -> ruby-dbus-0.25.0.gem ++++++ diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/NEWS.md new/NEWS.md --- old/NEWS.md 2025-01-02 15:13:57.000000000 +0100 +++ new/NEWS.md 2025-04-03 17:18:04.000000000 +0200 @@ -2,6 +2,14 @@ ## Unreleased +## Ruby D-Bus 0.25.0 - 2025-04-03 + +Bug fixes: + * Mention qualified property name in Get or Set errors ([#147][]). + * Fix declaring logger and ostruct gems for Ruby 3.5 + +[#147]: https://github.com/mvidner/ruby-dbus/pull/147 + ## Ruby D-Bus 0.24.0 - 2025-01-02 Bug fixes: diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/Rakefile new/Rakefile --- old/Rakefile 2025-01-02 15:13:57.000000000 +0100 +++ new/Rakefile 2025-04-03 17:18:04.000000000 +0200 @@ -4,7 +4,7 @@ require "rake" require "fileutils" require "tmpdir" -require "rspec/core/rake_task" +require "shellwords" begin require "rubocop/rake_task" rescue LoadError @@ -34,13 +34,18 @@ task default: [:spec, :rubocop] task test: :spec -RSpec::Core::RakeTask.new("bare:spec") +desc "Run RSpec code examples" +task "bare:spec", [:options] do |_t, args| + args.with_defaults(options: "") + sh "rspec #{args[:options]}" +end ["spec"].each do |tname| desc "Run bare:#{tname} in the proper environment" - task tname do |_t| + task tname, [:options] do |_t, args| + args.with_defaults(options: "") cd "spec/tools" do - sh "./test_env rake bare:#{tname}" + sh "./test_env rake bare:#{tname}[#{args[:options].shellescape}]" end end end diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/VERSION new/VERSION --- old/VERSION 2025-01-02 15:13:57.000000000 +0100 +++ new/VERSION 2025-04-03 17:18:04.000000000 +0200 @@ -1 +1 @@ -0.24.0 +0.25.0 Binary files old/checksums.yaml.gz and new/checksums.yaml.gz differ diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/lib/dbus/logger.rb new/lib/dbus/logger.rb --- old/lib/dbus/logger.rb 2025-01-02 15:13:57.000000000 +0100 +++ new/lib/dbus/logger.rb 2025-04-03 17:18:04.000000000 +0200 @@ -17,7 +17,7 @@ # The default one logs to STDERR, # with DEBUG if $DEBUG is set, otherwise INFO. def logger - if @logger.nil? + if !defined?(@logger) || @logger.nil? debug = $DEBUG || ENV["RUBY_DBUS_DEBUG"] @logger = Logger.new($stderr) @logger.level = debug ? Logger::DEBUG : Logger::INFO diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/lib/dbus/marshall.rb new/lib/dbus/marshall.rb --- old/lib/dbus/marshall.rb 2025-01-02 15:13:57.000000000 +0100 +++ new/lib/dbus/marshall.rb 2025-04-03 17:18:04.000000000 +0200 @@ -180,7 +180,7 @@ case alignment when 1, 2, 4, 8 bits = alignment - 1 - num + bits & ~bits + (num + bits) & ~bits else raise ArgumentError, "Unsupported alignment #{alignment}" end diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/lib/dbus/message.rb new/lib/dbus/message.rb --- old/lib/dbus/message.rb 2025-01-02 15:13:57.000000000 +0100 +++ new/lib/dbus/message.rb 2025-04-03 17:18:04.000000000 +0200 @@ -103,9 +103,9 @@ def to_s "#{message_type} sender=#{sender} -> dest=#{destination} " \ - "serial=#{serial} reply_serial=#{reply_serial} " \ - "path=#{path}; interface=#{interface}; member=#{member} " \ - "error_name=#{error_name}" + "serial=#{serial} reply_serial=#{reply_serial} " \ + "path=#{path}; interface=#{interface}; member=#{member} " \ + "error_name=#{error_name}" end # @return [String] name of message type, as used in match rules: diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/lib/dbus/object.rb new/lib/dbus/object.rb --- old/lib/dbus/object.rb 2025-01-02 15:13:57.000000000 +0100 +++ new/lib/dbus/object.rb 2025-04-03 17:18:04.000000000 +0200 @@ -116,7 +116,7 @@ # Forgetting to declare the interface for a method/signal/property # is a ScriptError. - class UndefinedInterface < ScriptError # rubocop:disable Lint/InheritException + class UndefinedInterface < ScriptError def initialize(sym) super "No interface specified for #{sym}. Enclose it in dbus_interface." end @@ -253,7 +253,7 @@ property = Property.new(dbus_name, type, :read, ruby_name: ruby_name) @@cur_intf.define(property) - ruby_name_eq = "#{ruby_name}=".to_sym + ruby_name_eq = :"#{ruby_name}=" return unless method_defined?(ruby_name_eq) dbus_watcher(ruby_name, dbus_name: dbus_name, emits_changed_signal: emits_changed_signal) @@ -294,7 +294,7 @@ interface_name = @@cur_intf.name ruby_name = ruby_name.to_s.sub(/=$/, "").to_sym - ruby_name_eq = "#{ruby_name}=".to_sym + ruby_name_eq = :"#{ruby_name}=" original_ruby_name_eq = "_original_#{ruby_name_eq}" dbus_name = make_dbus_name(ruby_name, dbus_name: dbus_name) @@ -455,11 +455,16 @@ property = dbus_lookup_property(interface_name, property_name) if property.readable? - ruby_name = property.ruby_name - value = public_send(ruby_name) - # may raise, DBus.error or https://ruby-doc.com/core-3.1.0/TypeError.html - typed_value = Data.make_typed(property.type, value) - [typed_value] + begin + ruby_name = property.ruby_name + value = public_send(ruby_name) + # may raise, DBus.error or https://ruby-doc.com/core-3.1.0/TypeError.html + typed_value = Data.make_typed(property.type, value) + [typed_value] + rescue StandardError => e + msg = "When getting '#{interface_name}.#{property_name}': " + e.message + raise e.exception(msg) + end else raise DBus.error("org.freedesktop.DBus.Error.PropertyWriteOnly"), "Property '#{interface_name}.#{property_name}' (on object '#{@path}') is not readable" @@ -470,11 +475,16 @@ property = dbus_lookup_property(interface_name, property_name) if property.writable? - ruby_name_eq = "#{property.ruby_name}=" - # TODO: declare dbus_method :Set to take :exact argument - # and type check it here before passing its :plain value - # to the implementation - public_send(ruby_name_eq, value) + begin + ruby_name_eq = "#{property.ruby_name}=" + # TODO: declare dbus_method :Set to take :exact argument + # and type check it here before passing its :plain value + # to the implementation + public_send(ruby_name_eq, value) + rescue StandardError => e + msg = "When setting '#{interface_name}.#{property_name}': " + e.message + raise e.exception(msg) + end else raise DBus.error("org.freedesktop.DBus.Error.PropertyReadOnly"), "Property '#{interface_name}.#{property_name}' (on object '#{@path}') is not writable" @@ -507,8 +517,8 @@ typed_value = Data.make_typed(property.type, value) p_hash[p_name.to_s] = typed_value rescue StandardError - DBus.logger.debug "Property '#{interface_name}.#{p_name}' (on object '#{@path}')" \ - " has raised during GetAll, omitting it" + DBus.logger.debug "Property '#{interface_name}.#{p_name}' (on object '#{@path}') " \ + "has raised during GetAll, omitting it" end end diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/lib/dbus/proxy_object.rb new/lib/dbus/proxy_object.rb --- old/lib/dbus/proxy_object.rb 2025-01-02 15:13:57.000000000 +0100 +++ new/lib/dbus/proxy_object.rb 2025-04-03 17:18:04.000000000 +0200 @@ -129,7 +129,7 @@ # @return [void] def on_signal(name, &block) unless @default_iface && has_iface?(@default_iface) - raise NoMethodError, "undefined signal #{OPEN_QUOTE}#{name}' for DBus interface "\ + raise NoMethodError, "undefined signal #{OPEN_QUOTE}#{name}' for DBus interface " \ "#{OPEN_QUOTE}#{@default_iface}' on object #{OPEN_QUOTE}#{@path}'" end @@ -139,13 +139,6 @@ #################################################### private - # rubocop:disable Lint/MissingSuper - # as this should forward everything - # - # https://github.com/rubocop-hq/ruby-style-guide#no-method-missing - # and http://blog.marc-andre.ca/2010/11/15/methodmissing-politely/ - # have a point to be investigated - # Handles all unkown methods, mostly to route method calls to the # default interface. def method_missing(name, *args, &reply_handler) @@ -154,7 +147,7 @@ # - di not specified # TODO # - di is specified but not found in introspection data - raise NoMethodError, "undefined method #{OPEN_QUOTE}#{name}' for DBus interface "\ + raise NoMethodError, "undefined method #{OPEN_QUOTE}#{name}' for DBus interface " \ "#{OPEN_QUOTE}#{@default_iface}' on object #{OPEN_QUOTE}#{@path}'" end @@ -166,16 +159,15 @@ raise unless e.to_s =~ /undefined method #{OPEN_QUOTE}#{name}'/ # BTW e.exception("...") would preserve the class. - raise NoMethodError, "undefined method #{OPEN_QUOTE}#{name}' for DBus interface "\ + raise NoMethodError, "undefined method #{OPEN_QUOTE}#{name}' for DBus interface " \ "#{OPEN_QUOTE}#{@default_iface}' on object #{OPEN_QUOTE}#{@path}'" end end - # rubocop:enable Lint/MissingSuper def respond_to_missing?(name, _include_private = false) - @default_iface && + (@default_iface && has_iface?(@default_iface) && - @interfaces[@default_iface].methods.key?(name) or super + @interfaces[@default_iface].methods.key?(name)) or super end end end diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/lib/dbus/type.rb new/lib/dbus/type.rb --- old/lib/dbus/type.rb 2025-01-02 15:13:57.000000000 +0100 +++ new/lib/dbus/type.rb 2025-04-03 17:18:04.000000000 +0200 @@ -163,7 +163,8 @@ if @sigtype == DICT_ENTRY case @members.size when 2 - raise SignatureException, "DICT_ENTRY must have 2 subtypes, found 3 or more in #{@signature}" + raise SignatureException, + "DICT_ENTRY must have 2 subtypes, found 3 or more: #{@members.inspect} << #{item.inspect}" when 0 if [STRUCT, ARRAY, DICT_ENTRY, VARIANT].member?(item.sigtype) raise SignatureException, "DICT_ENTRY key must be basic (non-container)" diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/metadata new/metadata --- old/metadata 2025-01-02 15:13:57.000000000 +0100 +++ new/metadata 2025-04-03 17:18:04.000000000 +0200 @@ -1,15 +1,30 @@ --- !ruby/object:Gem::Specification name: ruby-dbus version: !ruby/object:Gem::Version - version: 0.24.0 + version: 0.25.0 platform: ruby authors: - Ruby DBus Team +autorequire: bindir: bin cert_chain: [] -date: 2025-01-02 00:00:00.000000000 Z +date: 2025-04-03 00:00:00.000000000 Z dependencies: - !ruby/object:Gem::Dependency + name: logger + requirement: !ruby/object:Gem::Requirement + requirements: + - - ">=" + - !ruby/object:Gem::Version + version: '0' + type: :runtime + prerelease: false + version_requirements: !ruby/object:Gem::Requirement + requirements: + - - ">=" + - !ruby/object:Gem::Version + version: '0' +- !ruby/object:Gem::Dependency name: rexml requirement: !ruby/object:Gem::Requirement requirements: @@ -38,7 +53,7 @@ - !ruby/object:Gem::Version version: '0' - !ruby/object:Gem::Dependency - name: packaging_rake_tasks + name: ostruct requirement: !ruby/object:Gem::Requirement requirements: - - ">=" @@ -52,7 +67,7 @@ - !ruby/object:Gem::Version version: '0' - !ruby/object:Gem::Dependency - name: rake + name: packaging_rake_tasks requirement: !ruby/object:Gem::Requirement requirements: - - ">=" @@ -66,33 +81,33 @@ - !ruby/object:Gem::Version version: '0' - !ruby/object:Gem::Dependency - name: rspec + name: rake requirement: !ruby/object:Gem::Requirement requirements: - - - "~>" + - - ">=" - !ruby/object:Gem::Version - version: '3' + version: '0' type: :development prerelease: false version_requirements: !ruby/object:Gem::Requirement requirements: - - - "~>" + - - ">=" - !ruby/object:Gem::Version - version: '3' + version: '0' - !ruby/object:Gem::Dependency - name: rubocop + name: rspec requirement: !ruby/object:Gem::Requirement requirements: - - - '=' + - - "~>" - !ruby/object:Gem::Version - version: '1.0' + version: '3' type: :development prerelease: false version_requirements: !ruby/object:Gem::Requirement requirements: - - - '=' + - - "~>" - !ruby/object:Gem::Version - version: '1.0' + version: '3' - !ruby/object:Gem::Dependency name: simplecov requirement: !ruby/object:Gem::Requirement @@ -237,6 +252,7 @@ licenses: - LGPL-2.1-or-later metadata: {} +post_install_message: rdoc_options: [] require_paths: - lib @@ -251,7 +267,8 @@ - !ruby/object:Gem::Version version: '0' requirements: [] -rubygems_version: 3.6.2 +rubygems_version: 3.2.33 +signing_key: specification_version: 4 summary: Ruby module for interaction with D-Bus test_files: [] diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/ruby-dbus.gemspec new/ruby-dbus.gemspec --- old/ruby-dbus.gemspec 2025-01-02 15:13:57.000000000 +0100 +++ new/ruby-dbus.gemspec 2025-04-03 17:18:04.000000000 +0200 @@ -1,7 +1,6 @@ # frozen_string_literal: true # -*- ruby -*- -require "rubygems" GEMSPEC = Gem::Specification.new do |s| s.name = "ruby-dbus" @@ -22,6 +21,7 @@ s.required_ruby_version = ">= 2.4.0" + s.add_runtime_dependency "logger" # Either of rexml and nokogiri is required # but AFAIK gemspec cannot express that. # Nokogiri is recommended as rexml is dead slow. @@ -30,10 +30,10 @@ # workaround: rubocop-1.0 needs base64 which is no longer in stdlib in newer rubies s.add_development_dependency "base64" + s.add_development_dependency "ostruct" s.add_development_dependency "packaging_rake_tasks" s.add_development_dependency "rake" s.add_development_dependency "rspec", "~> 3" - s.add_development_dependency "rubocop", "= 1.0" s.add_development_dependency "simplecov" s.add_development_dependency "simplecov-lcov" end diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/spec/data_spec.rb new/spec/data_spec.rb --- old/spec/data_spec.rb 2025-01-02 15:13:57.000000000 +0100 +++ new/spec/data_spec.rb 2025-04-03 17:18:04.000000000 +0200 @@ -223,43 +223,43 @@ describe DBus::Data::Byte do include_examples "#== and #eql? work for basic types" - include_examples "constructor accepts numeric range", 0, 2**8 - 1 + include_examples "constructor accepts numeric range", 0, (2**8) - 1 include_examples "constructor accepts plain or typed values", 42 end describe DBus::Data::Int16 do include_examples "#== and #eql? work for basic types" - include_examples "constructor accepts numeric range", -2**15, 2**15 - 1 + include_examples "constructor accepts numeric range", -2**15, (2**15) - 1 include_examples "constructor accepts plain or typed values", 42 end describe DBus::Data::UInt16 do include_examples "#== and #eql? work for basic types" - include_examples "constructor accepts numeric range", 0, 2**16 - 1 + include_examples "constructor accepts numeric range", 0, (2**16) - 1 include_examples "constructor accepts plain or typed values", 42 end describe DBus::Data::Int32 do include_examples "#== and #eql? work for basic types" - include_examples "constructor accepts numeric range", -2**31, 2**31 - 1 + include_examples "constructor accepts numeric range", -2**31, (2**31) - 1 include_examples "constructor accepts plain or typed values", 42 end describe DBus::Data::UInt32 do include_examples "#== and #eql? work for basic types" - include_examples "constructor accepts numeric range", 0, 2**32 - 1 + include_examples "constructor accepts numeric range", 0, (2**32) - 1 include_examples "constructor accepts plain or typed values", 42 end describe DBus::Data::Int64 do include_examples "#== and #eql? work for basic types" - include_examples "constructor accepts numeric range", -2**63, 2**63 - 1 + include_examples "constructor accepts numeric range", -2**63, (2**63) - 1 include_examples "constructor accepts plain or typed values", 42 end describe DBus::Data::UInt64 do include_examples "#== and #eql? work for basic types" - include_examples "constructor accepts numeric range", 0, 2**64 - 1 + include_examples "constructor accepts numeric range", 0, (2**64) - 1 include_examples "constructor accepts plain or typed values", 42 end diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/spec/mock-service/spaghetti-monster.rb new/spec/mock-service/spaghetti-monster.rb --- old/spec/mock-service/spaghetti-monster.rb 2025-01-02 15:13:57.000000000 +0100 +++ new/spec/mock-service/spaghetti-monster.rb 2025-04-03 17:18:04.000000000 +0200 @@ -122,6 +122,8 @@ dbus_attr_reader :read_me, "s" def write_me=(value) + raise "We don't talk about Bruno" if value =~ /Bruno/ + @read_me = value end dbus_writer :write_me, "s" diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/spec/node_spec.rb new/spec/node_spec.rb --- old/spec/node_spec.rb 2025-01-02 15:13:57.000000000 +0100 +++ new/spec/node_spec.rb 2025-04-03 17:18:04.000000000 +0200 @@ -25,7 +25,7 @@ let(:manager_path) { "/org/example/FooManager" } let(:child_paths) do [ - # note that "/org/example/FooManager/good" + # NOTE: "/org/example/FooManager/good" # is a path under a managed object but there is no object there "/org/example/FooManager/good/1", "/org/example/FooManager/good/2", diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/spec/property_spec.rb new/spec/property_spec.rb --- old/spec/property_spec.rb 2025-01-02 15:13:57.000000000 +0100 +++ new/spec/property_spec.rb 2025-04-03 17:18:04.000000000 +0200 @@ -31,17 +31,36 @@ expect(iface["ReadMe"]).to eq("READ ME") end - it "gets an error when reading a property whose implementation raises" do - expect { @iface["Explosive"] }.to raise_error(DBus::Error, /Something failed/) + context "when reading a property fails" do + it "gets an error, mentioning the qualified property name" do + expect { @iface["Explosive"] } + .to raise_error(DBus::Error, /getting.*SampleInterface.Explosive.*Something failed/) + end end it "tests property nonreading" do expect { @iface["WriteMe"] }.to raise_error(DBus::Error, /not readable/) end - it "tests property writing" do - @iface["ReadOrWriteMe"] = "VALUE" - expect(@iface["ReadOrWriteMe"]).to eq("VALUE") + context "writing properties" do + it "tests property writing" do + @iface["ReadOrWriteMe"] = "VALUE" + expect(@iface["ReadOrWriteMe"]).to eq("VALUE") + end + + context "when writing a read-only property" do + it "gets an error, mentioning the qualified property name" do + expect { @iface["ReadMe"] = "WROTE" } + .to raise_error(DBus::Error, /SampleInterface.ReadMe.*not writable/) + end + end + + context "when writing a property fails" do + it "gets an error, mentioning the qualified property name" do + expect { @iface["WriteMe"] = "Bruno is a city in Czechia" } + .to raise_error(DBus::Error, /setting.*SampleInterface.WriteMe/) + end + end end # https://github.com/mvidner/ruby-dbus/pull/19 @@ -54,10 +73,6 @@ expect(@iface["ReadOrWriteMe"]).to eq("VALUE") end - it "tests property nonwriting" do - expect { @iface["ReadMe"] = "WROTE" }.to raise_error(DBus::Error, /not writable/) - end - it "tests get all" do all = @iface.all_properties expect(all.keys.sort).to eq(["MyArray", "MyByte", "MyDict", "MyStruct", "MyVariant", "ReadMe", "ReadOrWriteMe"])