rspec-openhab-scripting 0.0.2-java → 0.0.5-java

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: bb06cd0d4f2eb7710a678cf6b080ae636d81ef9faa4012a755ed8b73117a158a
4
- data.tar.gz: 3ed1a44e4cc9802054e6697807e75adafa75e6069647f917b809e20cbdb2e92a
3
+ metadata.gz: 66ee3ecec1c902dcf931cb3e51a7cacdb4df1e3b0798fa973aabf0147787c72f
4
+ data.tar.gz: da69d9608f4242545a4e01b0ae22e0133b6a1868b518ad1a95dd5d67bcd94785
5
5
  SHA512:
6
- metadata.gz: 4ee95923dc2c84ca4253112fcb0d6b351cb14d3a1879dcbcdd5e67dfcf095fdfdd0ab8f3c9d4b617fe2db13393a727f2687194531436c9572857066fcc57a62d
7
- data.tar.gz: 05245aa976b20f462002b87c9451b16c9aa1609f145981f259ee1637270e82a9ca295a55fcb15c6bc66a295664e313e0ffb5b280f193e624fc411ccf3138be2d
6
+ metadata.gz: 5160b3281ea2f567fd040f49cb0acf5b6c1b56ae050711ae049868ec645dc8a38799434c8c51c3c2a2fb806da98b5261b9c1e54119d3fd2c0d2888680cc2b762
7
+ data.tar.gz: c0ca81a870b864c45ba50d281fa9584421b36d64c48b86048765b32d6d0ab5aa64c92a49a4ddfcc6fa21d9b085b7e5a5baa63c95fcde295b090dd5967996d823
@@ -15,14 +15,21 @@ module OpenHAB
15
15
  end
16
16
 
17
17
  def version
18
- body = @faraday.get.body
19
- version = body.dig("runtimeInfo", "version")
20
- version = "#{version}-SNAPSHOT" if body.dig("runtimeInfo", "buildString")&.start_with?("Build #")
18
+ version = root_data.dig("runtimeInfo", "version")
19
+ version = "#{version}-SNAPSHOT" if root_data.dig("runtimeInfo", "buildString")&.start_with?("Build #")
21
20
  version
22
21
  end
23
22
 
23
+ def locale
24
+ root_data["locale"]
25
+ end
26
+
27
+ def measurement_system
28
+ root_data["measurementSystem"]
29
+ end
30
+
24
31
  def items
25
- @faraday.get("items").body
32
+ @faraday.get("items", metadata: ".*").body
26
33
  end
27
34
 
28
35
  def item(name)
@@ -30,5 +37,11 @@ module OpenHAB
30
37
  rescue Faraday::ResourceNotFound
31
38
  nil
32
39
  end
40
+
41
+ private
42
+
43
+ def root_data
44
+ @root_data ||= @faraday.get.body
45
+ end
33
46
  end
34
47
  end
@@ -15,10 +15,37 @@ module OpenHAB
15
15
  levels.each { |level| const_set(level, ch.qos.logback.classic.Level.const_get(level)) }
16
16
 
17
17
  extend Forwardable
18
- delegate %i[level level=] => :@sl4fj_logger
18
+ delegate %i[level] => :@sl4fj_logger
19
+
20
+ def level=(level)
21
+ if level.is_a?(String) || level.is_a?(Symbol)
22
+ level = ch.qos.logback.classic.Level.const_get(level.to_s.upcase, false)
23
+ end
24
+ @sl4fj_logger.level = level
25
+ end
26
+ end
27
+ end
28
+
29
+ module Log
30
+ class << self
31
+ def root
32
+ logger(org.slf4j.Logger::ROOT_LOGGER_NAME)
33
+ end
34
+
35
+ def events
36
+ logger("openhab.event")
37
+ end
38
+
39
+ def logger(object)
40
+ logger_name = case object
41
+ when String then object
42
+ else logger_name(object)
43
+ end
44
+ @loggers[logger_name] ||= Core::Logger.new(logger_name)
45
+ end
19
46
  end
20
47
  end
21
48
  end
22
49
 
23
- root_logger = org.slf4j.LoggerFactory.get_logger(org.slf4j.Logger::ROOT_LOGGER_NAME)
24
- root_logger.level = OpenHAB::Core::Logger::INFO
50
+ OpenHAB::Log.root.level = :info
51
+ OpenHAB::Log.events.level = :warn
@@ -34,8 +34,11 @@ module OpenHAB
34
34
  class BundleContext
35
35
  include org.osgi.framework.BundleContext
36
36
 
37
+ attr_reader :bundles
38
+
37
39
  def initialize(event_manager)
38
40
  @event_manager = event_manager
41
+ @bundles = []
39
42
  end
40
43
 
41
44
  def register_service(klass, service, _properties)
@@ -46,6 +49,10 @@ module OpenHAB
46
49
 
47
50
  @event_manager.add_event_subscriber(service)
48
51
  end
52
+
53
+ def get_service_reference(klass); end
54
+ def get_service(klass); end
55
+ def add_bundle_listener(listener); end
49
56
  end
50
57
 
51
58
  # don't depend on org.openhab.core.test
@@ -100,6 +107,17 @@ module OpenHAB
100
107
  end
101
108
  end
102
109
 
110
+ class ComponentContext
111
+ include org.osgi.service.component.ComponentContext
112
+
113
+ attr_reader :properties, :bundle_context
114
+
115
+ def initialize(bundle_context)
116
+ @properties = java.util.Hashtable.new
117
+ @bundle_context = bundle_context
118
+ end
119
+ end
120
+
103
121
  # subclass to expose private fields
104
122
  class EventManager < org.openhab.core.internal.events.OSGiEventManager
105
123
  field_reader :typedEventFactories, :typedEventSubscribers
@@ -108,6 +126,8 @@ module OpenHAB
108
126
  @imported = false
109
127
 
110
128
  class << self
129
+ attr_accessor :api
130
+
111
131
  def import_presets
112
132
  return if @imported
113
133
 
@@ -127,14 +147,23 @@ module OpenHAB
127
147
  at_exit { eh.close }
128
148
  ea = EventAdmin.new(eh)
129
149
  ep = org.openhab.core.internal.events.OSGiEventPublisher.new(ea)
150
+ bc = BundleContext.new(em)
151
+ cc = ComponentContext.new(bc)
152
+ cc.properties["measurementSystem"] = api.measurement_system if api
130
153
 
131
154
  # the registries!
155
+ ss = VolatileStorageService.new
132
156
  mr = org.openhab.core.internal.items.MetadataRegistryImpl.new
133
157
  OpenHAB::Core::OSGI.register_service("org.openhab.core.items.MetadataRegistry", mr)
158
+ mr.managed_provider = mmp = org.openhab.core.internal.items.ManagedMetadataProviderImpl.new(ss)
159
+ mr.add_provider(mmp)
134
160
  ir = org.openhab.core.internal.items.ItemRegistryImpl.new(mr)
135
- ss = VolatileStorageService.new
136
161
  ir.managed_provider = mip = org.openhab.core.items.ManagedItemProvider.new(ss, nil)
137
162
  ir.add_provider(mip)
163
+ ir.event_publisher = ep
164
+ up = org.openhab.core.internal.i18n.I18nProviderImpl.new(cc)
165
+ ir.unit_provider = up
166
+ ir.item_state_converter = org.openhab.core.internal.items.ItemStateConverterImpl.new(up)
138
167
  tr = org.openhab.core.thing.internal.ThingRegistryImpl.new
139
168
  mtr = org.openhab.core.automation.internal.type.ModuleTypeRegistryImpl.new
140
169
  rr = org.openhab.core.automation.internal.RuleRegistryImpl.new
@@ -203,7 +232,6 @@ module OpenHAB
203
232
  em.add_event_factory(ief)
204
233
 
205
234
  # set up the rules engine part 2
206
- bc = BundleContext.new(em)
207
235
  k = org.openhab.core.automation.internal.module.factory.CoreModuleHandlerFactory
208
236
  # depending on OH version, this class is set up differently
209
237
  cmhf = begin
@@ -221,7 +249,12 @@ module OpenHAB
221
249
  re.add_module_handler_factory(cmhf)
222
250
  re.add_module_handler_factory(scmhf)
223
251
  re.add_module_handler_factory(spmhf)
224
- re.onReadyMarkerAdded(nil)
252
+ re.on_ready_marker_added(nil)
253
+
254
+ # enable event logging
255
+ el = org.openhab.core.io.monitor.internal.EventLogger.new(rs)
256
+ em.add_event_subscriber(el)
257
+ el.on_ready_marker_added(nil)
225
258
  end
226
259
  end
227
260
  end
@@ -15,11 +15,8 @@ module OpenHAB
15
15
  Timers.timer_manager.add(self)
16
16
  end
17
17
 
18
- def reschedule(duration = nil)
19
- duration ||= @duration
20
-
18
+ def reschedule(_duration = nil)
21
19
  Timers.timer_manager.add(self)
22
- reschedule(OpenHAB::DSL.to_zdt(duration))
23
20
  end
24
21
 
25
22
  #
@@ -34,6 +31,10 @@ module OpenHAB
34
31
  def terminated?; end
35
32
  alias_method :has_terminated, :terminated?
36
33
 
34
+ def is_active # rubocop:disable Naming/PredicateName
35
+ false
36
+ end
37
+
37
38
  private
38
39
 
39
40
  def timer_block
@@ -0,0 +1,79 @@
1
+ # frozen_string_literal: true
2
+
3
+ # rubocop:disable Style/GlobalVars
4
+ module RSpec
5
+ module OpenHAB
6
+ module Items
7
+ class << self
8
+ def populate_items_from_api(api)
9
+ all_items = api.items
10
+
11
+ gfh = org.openhab.core.internal.items.GroupFunctionHelper.new
12
+
13
+ all_items.each do |item_json|
14
+ type, _dimension = item_json["type"].split(":")
15
+ if type == "Group"
16
+ if item_json["groupType"]
17
+ type, _dimension = item_json["groupType"].split(":")
18
+ klass = ::OpenHAB::DSL::Items.const_get(:"#{type}Item")
19
+ base_item = klass.new(item_json["name"])
20
+ end
21
+ if item_json["function"]
22
+ dto = org.openhab.core.items.dto.GroupFunctionDTO.new
23
+ dto.name = item_json.dig("function", "name")
24
+ dto.params = item_json.dig("function", "params")
25
+ function = gfh.create_group_function(dto, base_item)
26
+ end
27
+ item = GroupItem.new(item_json["name"], base_item, function)
28
+ else
29
+ klass = ::OpenHAB::DSL::Items.const_get(:"#{type}Item")
30
+ item = klass.new(item_json["name"])
31
+ end
32
+
33
+ item.label = item_json["label"]
34
+ item_json["tags"].each do |tag|
35
+ item.add_tag(tag)
36
+ end
37
+ item_json["metadata"]&.each do |key, config|
38
+ item.meta[key] = config["value"], config["config"]
39
+ end
40
+
41
+ $ir.add(item)
42
+ end
43
+ all_items.each do |item_json| # rubocop:disable Style/CombinableLoops
44
+ item_json["groupNames"].each do |group_name|
45
+ next unless (group = $ir.get(group_name))
46
+
47
+ group.add_member($ir.get(item_json["name"]))
48
+ end
49
+ end
50
+ end
51
+ end
52
+
53
+ def autoupdate_all_items
54
+ @autoupdated_items ||= {}
55
+ $ir.for_each do |_provider, item|
56
+ @autoupdated_items[item] = item.meta.delete("autoupdate") if item.meta.key?("autoupdate")
57
+ end
58
+ end
59
+
60
+ private
61
+
62
+ def restore_autoupdate_items
63
+ return unless instance_variable_defined?(:@autoupdated_items)
64
+
65
+ @autoupdated_items.each do |(item, meta)|
66
+ item.meta["autoupdate"] = meta
67
+ end
68
+ end
69
+
70
+ ::RSpec.configure do |config|
71
+ config.include(self)
72
+ config.after do
73
+ restore_autoupdate_items
74
+ end
75
+ end
76
+ end
77
+ end
78
+ end
79
+ # rubocop:enable Style/GlobalVars
@@ -1,9 +1,24 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  RSpec.configure do |config|
4
+ org.openhab.core.items.GenericItem.field_reader :eventPublisher
5
+
6
+ # rubocop:disable Style/GlobalVars
4
7
  config.before(:each) do
5
- $ir.for_each do |_provider, item| # rubocop:disable Style/GlobalVars
8
+ ep = $ir.eventPublisher
9
+
10
+ # stash event publishers to avoid triggering any rules
11
+ $ir.for_each do |_provider, item|
12
+ item.event_publisher = nil
13
+ end
14
+
15
+ $ir.for_each do |_provider, item| # rubocop:disable Style/CombinableLoops
6
16
  item.state = NULL # don't use update, to avoid triggering any rules
7
17
  end
18
+ ensure
19
+ $ir.for_each do |_provider, item|
20
+ item.event_publisher = ep
21
+ end
8
22
  end
23
+ # rubocop:enable Style/GlobalVars
9
24
  end
@@ -2,6 +2,6 @@
2
2
 
3
3
  module RSpec
4
4
  module OpenHAB
5
- VERSION = "0.0.2"
5
+ VERSION = "0.0.5"
6
6
  end
7
7
  end
@@ -5,12 +5,11 @@ module RSpec
5
5
  module Wait
6
6
  def wait_for_rules
7
7
  loop do
8
- break if java.lang.Thread.all_stack_traces.keys.all? do |t|
9
- !t.name.match?(/^OH-rule-/) ||
10
- [java.lang.Thread::State::WAITING, java.lang.Thread::State::TIMED_WAITING].include?(t.state)
11
- end
12
-
13
8
  sleep(0.1)
9
+ break if java.lang.Thread.all_stack_traces.keys.all? do |t|
10
+ !t.name.match?(/^OH-rule-/) ||
11
+ [java.lang.Thread::State::WAITING, java.lang.Thread::State::TIMED_WAITING].include?(t.state)
12
+ end
14
13
  end
15
14
  end
16
15
  end
@@ -38,6 +38,7 @@ maven_require do
38
38
  require "jar org.openhab.core.bundles, org.openhab.core.automation, #{openhab_version}"
39
39
  require "jar org.openhab.core.bundles, org.openhab.core.automation.module.script, #{openhab_version}"
40
40
  require "jar org.openhab.core.bundles, org.openhab.core.automation.module.script.rulesupport, #{openhab_version}"
41
+ require "jar org.openhab.core.bundles, org.openhab.core.io.monitor, #{openhab_version}"
41
42
  require "jar org.openhab.core.bundles, org.openhab.core.model.core, #{openhab_version}"
42
43
  require "jar org.openhab.core.bundles, org.openhab.core.model.script, #{openhab_version}"
43
44
  require "jar org.openhab.core.bundles, org.openhab.core.semantics, #{openhab_version}"
@@ -58,6 +59,7 @@ end
58
59
  require "openhab/log/logger"
59
60
  require "rspec/openhab/core/logger"
60
61
  require "openhab/dsl/imports"
62
+ OpenHAB::DSL::Imports.api = api
61
63
  OpenHAB::DSL::Imports.import_presets
62
64
 
63
65
  require "openhab"
@@ -68,46 +70,14 @@ require "rspec/openhab/core/cron_scheduler"
68
70
  OpenHAB::DSL.send(:remove_const, :Timer)
69
71
  require_relative "rspec/openhab/dsl/timers/timer"
70
72
 
71
- # rubocop:disable Style/GlobalVars
72
-
73
73
  # RSpec additions
74
74
  require "rspec/openhab/dsl/rules/rspec"
75
75
  require "rspec/openhab/state"
76
76
  require "rspec/openhab/trigger"
77
77
  require "rspec/openhab/wait"
78
+ require "rspec/openhab/items"
78
79
 
79
- # populate item registry
80
- all_items = api.items
81
- all_items.each do |item_json|
82
- type, _dimension = item_json["type"].split(":")
83
- if type == "Group"
84
- if item_json["groupType"]
85
- type, _dimension = item_json["groupType"].split(":")
86
- klass = OpenHAB::DSL::Items.const_get(:"#{type}Item")
87
- base_item = klass.new(item_json["name"])
88
- end
89
- # TODO: create group function
90
- item = GroupItem.new(item_json["name"], base_item)
91
- else
92
- klass = OpenHAB::DSL::Items.const_get(:"#{type}Item")
93
- item = klass.new(item_json["name"])
94
- end
95
-
96
- item.label = item_json["label"]
97
- item_json["tags"].each do |tag|
98
- item.add_tag(tag)
99
- end
100
- $ir.add(item)
101
- end
102
- all_items.each do |item_json| # rubocop:disable Style/CombinableLoops
103
- item_json["groupNames"].each do |group_name|
104
- next unless (group = $ir.get(group_name))
105
-
106
- group.add_member($ir.get(item_json["name"]))
107
- end
108
- end
109
-
110
- # rubocop:enable Style/GlobalVars
80
+ RSpec::OpenHAB::Items.populate_items_from_api(api)
111
81
 
112
82
  # load rules files
113
83
  OPENHAB_AUTOMATION_PATH = "#{org.openhab.core.OpenHAB.config_folder}/automation/jsr223/ruby/personal"
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: rspec-openhab-scripting
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.2
4
+ version: 0.0.5
5
5
  platform: java
6
6
  authors:
7
7
  - Cody Cutrer
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2022-06-30 00:00:00.000000000 Z
11
+ date: 2022-07-01 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  requirement: !ruby/object:Gem::Requirement
@@ -66,6 +66,20 @@ dependencies:
66
66
  - - "~>"
67
67
  - !ruby/object:Gem::Version
68
68
  version: '4.42'
69
+ - !ruby/object:Gem::Dependency
70
+ requirement: !ruby/object:Gem::Requirement
71
+ requirements:
72
+ - - "~>"
73
+ - !ruby/object:Gem::Version
74
+ version: '3.11'
75
+ name: rspec-core
76
+ prerelease: false
77
+ type: :runtime
78
+ version_requirements: !ruby/object:Gem::Requirement
79
+ requirements:
80
+ - - "~>"
81
+ - !ruby/object:Gem::Version
82
+ version: '3.11'
69
83
  - !ruby/object:Gem::Dependency
70
84
  requirement: !ruby/object:Gem::Requirement
71
85
  requirements:
@@ -169,6 +183,7 @@ files:
169
183
  - lib/rspec/openhab/dsl/imports.rb
170
184
  - lib/rspec/openhab/dsl/rules/rspec.rb
171
185
  - lib/rspec/openhab/dsl/timers/timer.rb
186
+ - lib/rspec/openhab/items.rb
172
187
  - lib/rspec/openhab/state.rb
173
188
  - lib/rspec/openhab/trigger.rb
174
189
  - lib/rspec/openhab/version.rb