rspec-openhab-scripting 0.0.2-java → 0.0.5-java
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/lib/rspec/openhab/api.rb +17 -4
- data/lib/rspec/openhab/core/logger.rb +30 -3
- data/lib/rspec/openhab/dsl/imports.rb +36 -3
- data/lib/rspec/openhab/dsl/timers/timer.rb +5 -4
- data/lib/rspec/openhab/items.rb +79 -0
- data/lib/rspec/openhab/state.rb +16 -1
- data/lib/rspec/openhab/version.rb +1 -1
- data/lib/rspec/openhab/wait.rb +4 -5
- data/lib/rspec-openhab-scripting.rb +4 -34
- metadata +17 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 66ee3ecec1c902dcf931cb3e51a7cacdb4df1e3b0798fa973aabf0147787c72f
|
4
|
+
data.tar.gz: da69d9608f4242545a4e01b0ae22e0133b6a1868b518ad1a95dd5d67bcd94785
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 5160b3281ea2f567fd040f49cb0acf5b6c1b56ae050711ae049868ec645dc8a38799434c8c51c3c2a2fb806da98b5261b9c1e54119d3fd2c0d2888680cc2b762
|
7
|
+
data.tar.gz: c0ca81a870b864c45ba50d281fa9584421b36d64c48b86048765b32d6d0ab5aa64c92a49a4ddfcc6fa21d9b085b7e5a5baa63c95fcde295b090dd5967996d823
|
data/lib/rspec/openhab/api.rb
CHANGED
@@ -15,14 +15,21 @@ module OpenHAB
|
|
15
15
|
end
|
16
16
|
|
17
17
|
def version
|
18
|
-
|
19
|
-
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
|
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
|
-
|
24
|
-
|
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.
|
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(
|
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
|
data/lib/rspec/openhab/state.rb
CHANGED
@@ -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.
|
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
|
data/lib/rspec/openhab/wait.rb
CHANGED
@@ -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
|
-
|
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.
|
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-
|
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
|