rspec-openhab-scripting 0.0.13-java → 0.0.16-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/core/item_proxy.rb +19 -0
- data/lib/rspec/openhab/core/mocks/persistence_service.rb +144 -0
- data/lib/rspec/openhab/dsl/imports.rb +11 -0
- data/lib/rspec/openhab/dsl/rules/triggers/watch.rb +11 -0
- data/lib/rspec/openhab/hooks.rb +2 -0
- data/lib/rspec/openhab/version.rb +1 -1
- data/lib/rspec-openhab-scripting.rb +6 -1
- metadata +6 -3
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: a5dd7ea9915aa3edecf86f75d7331bfe77ad3fbbbee4c278fd130895e4bc1e6c
|
4
|
+
data.tar.gz: 489db2879bf94009c027fcbb87572ae5b3834d31fab17f473cddc2fdecfebdfd
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 967d33cd26a809179324637df7ebb9243ec901ae6c75aaa97a1615a6f699082bb83050727502c326bcf85732f86521f93ce253877306d8e6cf86b4ed84030708
|
7
|
+
data.tar.gz: 375c3ebb1c64176b3da00a8489b8b9574e5636d767a2cb981100dc3b6b3128cbf23fc8b7ab9998ed3b7154a9d0754be6f349d3711ef326e7714ec360cac89732
|
@@ -0,0 +1,19 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module OpenHAB
|
4
|
+
module Core
|
5
|
+
class ItemProxy
|
6
|
+
@proxies = {}
|
7
|
+
|
8
|
+
class << self
|
9
|
+
# ensure each item only has a single proxy, so that
|
10
|
+
# expect(item).to receive(:method) works
|
11
|
+
def new(item)
|
12
|
+
@proxies.fetch(item.name) do
|
13
|
+
@proxies[item.name] = super
|
14
|
+
end
|
15
|
+
end
|
16
|
+
end
|
17
|
+
end
|
18
|
+
end
|
19
|
+
end
|
@@ -0,0 +1,144 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module RSpec
|
4
|
+
module OpenHAB
|
5
|
+
module Core
|
6
|
+
module Mocks
|
7
|
+
class PersistenceService
|
8
|
+
include org.openhab.core.persistence.ModifiablePersistenceService
|
9
|
+
include Singleton
|
10
|
+
|
11
|
+
class HistoricItem
|
12
|
+
include org.openhab.core.persistence.HistoricItem
|
13
|
+
|
14
|
+
attr_reader :timestamp, :state, :name
|
15
|
+
|
16
|
+
def initialize(timestamp, state, name)
|
17
|
+
@timestamp = timestamp
|
18
|
+
@state = state
|
19
|
+
@name = name
|
20
|
+
end
|
21
|
+
end
|
22
|
+
|
23
|
+
attr_reader :id
|
24
|
+
|
25
|
+
def initialize
|
26
|
+
@id = "default"
|
27
|
+
reset
|
28
|
+
end
|
29
|
+
|
30
|
+
def reset
|
31
|
+
@data = Hash.new { |h, k| h[k] = [] }
|
32
|
+
end
|
33
|
+
|
34
|
+
def store(item, date = nil, state = nil)
|
35
|
+
date = nil if date.is_a?(String) # alias overload
|
36
|
+
state ||= item.state
|
37
|
+
date ||= ZonedDateTime.now
|
38
|
+
|
39
|
+
new_item = HistoricItem.new(date, state, item.name)
|
40
|
+
|
41
|
+
item_history = @data[item.name]
|
42
|
+
|
43
|
+
insert_index = item_history.bsearch_index do |i|
|
44
|
+
i.timestamp.compare_to(date).positive?
|
45
|
+
end
|
46
|
+
|
47
|
+
return item_history << new_item unless insert_index
|
48
|
+
|
49
|
+
return item_history[insert_index].state = state if item_history[insert_index].timestamp == date
|
50
|
+
|
51
|
+
item_history.insert(insert_index, new_item)
|
52
|
+
end
|
53
|
+
|
54
|
+
def remove(filter)
|
55
|
+
query_internal(filter) do |item_history, index|
|
56
|
+
historic_item = item_history.delete_at(index)
|
57
|
+
@data.delete(historic_item.name) if item_history.empty?
|
58
|
+
end
|
59
|
+
end
|
60
|
+
|
61
|
+
def query(filter)
|
62
|
+
result = []
|
63
|
+
|
64
|
+
query_internal(filter) do |item_history, index|
|
65
|
+
result << item_history[index]
|
66
|
+
|
67
|
+
return result if filter.page_number.zero? && result.length == filter.page_size && filter.item_name
|
68
|
+
end
|
69
|
+
|
70
|
+
result.sort_by! { |hi| hi.timestamp.to_instant.to_epoch_milli } unless filter.item_name
|
71
|
+
|
72
|
+
unless filter.page_number.zero?
|
73
|
+
result = result.slice(filter.page_number * filter.page_size, filter.page_size)
|
74
|
+
end
|
75
|
+
|
76
|
+
result
|
77
|
+
end
|
78
|
+
|
79
|
+
def get_item_info # rubocop:disable Naming/AccessorMethodName must match Java interface
|
80
|
+
@data.map do |(n, entries)|
|
81
|
+
[n, entries.length, entries.first.timestamp, entries.last.timestamp]
|
82
|
+
end.to_set
|
83
|
+
end
|
84
|
+
|
85
|
+
def get_default_strategies # rubocop:disable Naming/AccessorMethodName must match Java interface
|
86
|
+
[org.openhab.core.persistence.strategy.PersistenceStrategy::Globals::CHANGE]
|
87
|
+
end
|
88
|
+
|
89
|
+
private
|
90
|
+
|
91
|
+
def query_internal(filter, &block)
|
92
|
+
if filter.item_name
|
93
|
+
return unless @data.key?(filter.item_name)
|
94
|
+
|
95
|
+
query_item_internal(@data[filter.item_name], filter, &block)
|
96
|
+
else
|
97
|
+
@data.each_value do |item_history|
|
98
|
+
query_item_internal(item_history, filter, &block)
|
99
|
+
end
|
100
|
+
end
|
101
|
+
end
|
102
|
+
|
103
|
+
def query_item_internal(item_history, filter)
|
104
|
+
first_index = 0
|
105
|
+
last_index = item_history.length
|
106
|
+
|
107
|
+
if filter.begin_date
|
108
|
+
first_index = item_history.bsearch_index do |i|
|
109
|
+
i.timestamp.compare_to(filter.begin_date).positive?
|
110
|
+
end
|
111
|
+
return if first_index.nil?
|
112
|
+
end
|
113
|
+
|
114
|
+
if filter.end_date
|
115
|
+
last_index = item_history.bsearch_index do |i|
|
116
|
+
i.timestamp.compare_to(filter.end_date).positive?
|
117
|
+
end
|
118
|
+
return if last_index.zero?
|
119
|
+
|
120
|
+
last_index ||= item_history.length
|
121
|
+
end
|
122
|
+
|
123
|
+
range = first_index...last_index
|
124
|
+
|
125
|
+
operator = filter.operator.symbol
|
126
|
+
operator = "==" if operator == "="
|
127
|
+
|
128
|
+
block = lambda do |i|
|
129
|
+
next if filter.state && !item_history[i].state.send(operator, filter.state)
|
130
|
+
|
131
|
+
yield(item_history, i)
|
132
|
+
end
|
133
|
+
|
134
|
+
if filter.ordering == filter.class::Ordering::DESCENDING
|
135
|
+
range.reverse_each(&block)
|
136
|
+
else
|
137
|
+
range.each(&block)
|
138
|
+
end
|
139
|
+
end
|
140
|
+
end
|
141
|
+
end
|
142
|
+
end
|
143
|
+
end
|
144
|
+
end
|
@@ -400,6 +400,17 @@ module OpenHAB
|
|
400
400
|
el = org.openhab.core.io.monitor.internal.EventLogger.new(rs)
|
401
401
|
em.add_event_subscriber(el)
|
402
402
|
el.on_ready_marker_added(nil)
|
403
|
+
|
404
|
+
# set up persistence
|
405
|
+
psr = org.openhab.core.persistence.internal.PersistenceServiceRegistryImpl.new
|
406
|
+
org.openhab.core.persistence.extensions.PersistenceExtensions.new(psr)
|
407
|
+
psr.activate("default" => "default")
|
408
|
+
ps = RSpec::OpenHAB::Core::Mocks::PersistenceService.instance
|
409
|
+
psr.add_persistence_service(ps)
|
410
|
+
|
411
|
+
pm = org.openhab.core.persistence.internal.PersistenceManagerImpl.new(nil, ir, sc, rs)
|
412
|
+
pm.add_persistence_service(ps)
|
413
|
+
pm.on_ready_marker_added(nil)
|
403
414
|
end
|
404
415
|
end
|
405
416
|
end
|
data/lib/rspec/openhab/hooks.rb
CHANGED
@@ -42,9 +42,11 @@ maven_require do
|
|
42
42
|
require "jar org.openhab.core.bundles, org.openhab.core.model.core, #{openhab_version}"
|
43
43
|
require "jar org.openhab.core.bundles, org.openhab.core.model.item, #{openhab_version}"
|
44
44
|
require "jar org.openhab.core.bundles, org.openhab.core.model.script, #{openhab_version}"
|
45
|
+
require "jar org.openhab.core.bundles, org.openhab.core.persistence, #{openhab_version}"
|
45
46
|
require "jar org.openhab.core.bundles, org.openhab.core.semantics, #{openhab_version}"
|
46
47
|
require "jar org.openhab.core.bundles, org.openhab.core.thing, #{openhab_version}"
|
47
48
|
end
|
49
|
+
java_import org.openhab.core.persistence.extensions.PersistenceExtensions
|
48
50
|
|
49
51
|
require "openhab/version"
|
50
52
|
|
@@ -64,6 +66,7 @@ require "rspec/openhab/core/logger"
|
|
64
66
|
# during testing, we don't want "regular" output from rules
|
65
67
|
OpenHAB::Log.logger("org.openhab.automation.jruby.runtime").level = :warn
|
66
68
|
OpenHAB::Log.logger("org.openhab.automation.jruby.logger").level = :warn
|
69
|
+
require "rspec/openhab/core/mocks/persistence_service"
|
67
70
|
require "openhab/dsl/imports"
|
68
71
|
OpenHAB::DSL::Imports.api = api
|
69
72
|
OpenHAB::DSL::Imports.import_presets
|
@@ -73,8 +76,10 @@ require "openhab"
|
|
73
76
|
require "rspec/openhab/actions"
|
74
77
|
require "rspec/openhab/core/cron_scheduler"
|
75
78
|
|
76
|
-
# override several
|
79
|
+
# override several openhab-scripting methods
|
80
|
+
require_relative "rspec/openhab/core/item_proxy"
|
77
81
|
require_relative "rspec/openhab/dsl/timers/timer"
|
82
|
+
require_relative "rspec/openhab/dsl/rules/triggers/watch"
|
78
83
|
|
79
84
|
# RSpec additions
|
80
85
|
require "rspec/core"
|
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.16
|
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-07-
|
11
|
+
date: 2022-07-18 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
requirement: !ruby/object:Gem::Requirement
|
@@ -189,12 +189,15 @@ files:
|
|
189
189
|
- lib/rspec/openhab/actions.rb
|
190
190
|
- lib/rspec/openhab/api.rb
|
191
191
|
- lib/rspec/openhab/core/cron_scheduler.rb
|
192
|
+
- lib/rspec/openhab/core/item_proxy.rb
|
192
193
|
- lib/rspec/openhab/core/load_path.rb
|
193
194
|
- lib/rspec/openhab/core/logger.rb
|
195
|
+
- lib/rspec/openhab/core/mocks/persistence_service.rb
|
194
196
|
- lib/rspec/openhab/core/openhab_setup.rb
|
195
197
|
- lib/rspec/openhab/core/osgi.rb
|
196
198
|
- lib/rspec/openhab/core/script_handling.rb
|
197
199
|
- lib/rspec/openhab/dsl/imports.rb
|
200
|
+
- lib/rspec/openhab/dsl/rules/triggers/watch.rb
|
198
201
|
- lib/rspec/openhab/dsl/timers/timer.rb
|
199
202
|
- lib/rspec/openhab/helpers.rb
|
200
203
|
- lib/rspec/openhab/hooks.rb
|
@@ -242,7 +245,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
242
245
|
version: '0'
|
243
246
|
requirements:
|
244
247
|
- jar ch.qos.logback, logback-classic, 1.2.9
|
245
|
-
rubygems_version: 3.
|
248
|
+
rubygems_version: 3.2.29
|
246
249
|
signing_key:
|
247
250
|
specification_version: 4
|
248
251
|
summary: Library testing OpenHAB ruby rules with rspec.
|