rdoba 0.9.1 → 0.9.2
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 +7 -7
- data/.gitignore +4 -0
- data/.travis.yml +28 -0
- data/CHANGES.md +6 -0
- data/Gemfile +5 -0
- data/README.md +75 -90
- data/Rakefile +61 -55
- data/TODO +6 -0
- data/features/log.feature +100 -29
- data/features/mixin.feature +85 -0
- data/features/step_definitions/log_steps.rb +58 -22
- data/features/step_definitions/mixin_steps.rb +266 -0
- data/features/support/env.rb +48 -24
- data/features/support/fulltest_as_log.rb.in +143 -0
- data/features/support/fulltest_as_self.rb.in +144 -0
- data/features/support/mixin_support.rb +13 -0
- data/html/.keep +0 -0
- data/html/created.rid +28 -0
- data/html/css/fonts.css +167 -0
- data/html/css/rdoc.css +590 -0
- data/html/fonts/Lato-Light.ttf +0 -0
- data/html/fonts/Lato-LightItalic.ttf +0 -0
- data/html/fonts/Lato-Regular.ttf +0 -0
- data/html/fonts/Lato-RegularItalic.ttf +0 -0
- data/html/fonts/SourceCodePro-Bold.ttf +0 -0
- data/html/fonts/SourceCodePro-Regular.ttf +0 -0
- data/html/images/add.png +0 -0
- data/html/images/arrow_up.png +0 -0
- data/html/images/brick.png +0 -0
- data/html/images/brick_link.png +0 -0
- data/html/images/bug.png +0 -0
- data/html/images/bullet_black.png +0 -0
- data/html/images/bullet_toggle_minus.png +0 -0
- data/html/images/bullet_toggle_plus.png +0 -0
- data/html/images/date.png +0 -0
- data/html/images/delete.png +0 -0
- data/html/images/find.png +0 -0
- data/html/images/loadingAnimation.gif +0 -0
- data/html/images/macFFBgHack.png +0 -0
- data/html/images/package.png +0 -0
- data/html/images/page_green.png +0 -0
- data/html/images/page_white_text.png +0 -0
- data/html/images/page_white_width.png +0 -0
- data/html/images/plugin.png +0 -0
- data/html/images/ruby.png +0 -0
- data/html/images/tag_blue.png +0 -0
- data/html/images/tag_green.png +0 -0
- data/html/images/transparent.png +0 -0
- data/html/images/wrench.png +0 -0
- data/html/images/wrench_orange.png +0 -0
- data/html/images/zoom.png +0 -0
- data/html/js/darkfish.js +161 -0
- data/html/js/jquery.js +4 -0
- data/html/js/navigation.js +142 -0
- data/html/js/navigation.js.gz +0 -0
- data/html/js/search.js +109 -0
- data/html/js/search_index.js +1 -0
- data/html/js/search_index.js.gz +0 -0
- data/html/js/searcher.js +228 -0
- data/html/js/searcher.js.gz +0 -0
- data/lib/rdoba/_version_.rb +1 -1
- data/lib/rdoba/common.rb +0 -15
- data/lib/rdoba/debug.rb +5 -1
- data/lib/rdoba/log.rb +360 -189
- data/lib/rdoba/merge.rb +21 -0
- data/lib/rdoba/mixin/time.rb +11 -0
- data/lib/rdoba/mixin/try.rb +6 -0
- data/lib/rdoba/mixin/try_1_9_0.rb +4 -0
- data/lib/rdoba/mixin/wait_if.rb +21 -0
- data/lib/rdoba/mixin.rb +270 -6
- data/lib/rdoba/strings.rb +4 -141
- data/lib/rdoba.rb +13 -19
- data/rdoba.gemspec +30 -24
- data/tddium.yml +11 -0
- metadata +260 -65
- data/features/bcd.feature +0 -29
- data/features/step_definitions/bcd_steps.rb +0 -69
- data/test/helper.rb +0 -18
- data/test/rdoba_test.rb.stub +0 -59
- data/test/test_rdoba.rb +0 -7
@@ -0,0 +1,85 @@
|
|
1
|
+
# language: ru
|
2
|
+
Функционал: Примесь рдобы
|
3
|
+
Сценарий: Провѣрка подпримѣси .пуздро (case)
|
4
|
+
Допустим ꙇє примѣнена подпримѣсь .пуздро бисера рдоба
|
5
|
+
Если къ кирилическу слову въ верхнемъ пуздрѣ ꙇє примѣненъ приꙇомъ :ниспуздри
|
6
|
+
То кирилическо слово имаꙇє буквы въ нижнемъ пуздрѣ
|
7
|
+
Если къ кирилическу слову въ нижнемъ пуздрѣ ꙇє примѣненъ приꙇомъ :воспуздри
|
8
|
+
То кирилическо слово имаꙇє буквы въ верхнемъ пуздрѣ
|
9
|
+
Если къ кирилическу слову въ смѣшанѣмъ пуздрѣ ꙇє примѣненъ приꙇомъ :воспуздри
|
10
|
+
То кирилическо слово имаꙇє буквы въ верхнемъ пуздрѣ
|
11
|
+
Если къ латыньску слову въ верхнемъ пуздрѣ ꙇє примѣненъ приꙇомъ :ниспуздри
|
12
|
+
То латыньско слово имаꙇє буквы въ нижнемъ пуздрѣ
|
13
|
+
Если къ латыньску слову въ нижнемъ пуздрѣ ꙇє примѣненъ приꙇомъ :воспуздри
|
14
|
+
То латыньско слово имаꙇє буквы въ верхнемъ пуздрѣ
|
15
|
+
Если къ кирилическу слову въ смѣшанѣмъ пуздрѣ ꙇє примѣненъ приꙇомъ :ниспуздри
|
16
|
+
То кирилическо слово имаꙇє буквы въ нижнемъ пуздрѣ
|
17
|
+
|
18
|
+
Сценарий: Провѣрка подпримѣси .обратка (reverse)
|
19
|
+
Допустим ꙇє примѣнена подпримѣсь .обратка бисера рдоба
|
20
|
+
То Стразовъ приꙇомъ :обратка повратє обратну Стразу
|
21
|
+
И Стразовъ приꙇомъ :обратка сѫ кракомъ повратє обратну Стразу
|
22
|
+
И Стразовъ приꙇомъ :обратка сѫ доведомъ повратє обратну Стразу
|
23
|
+
|
24
|
+
Сценарий: Провѣрка подпримѣси .ли_пущь (empty)
|
25
|
+
Допустим ꙇє примѣнена подпримѣсь .ли_пущь бисера рдоба
|
26
|
+
То приꙇомъ :ли_пущь рода пущь повратє вѣрнъ
|
27
|
+
И приꙇомъ :ли_пущь рода лжа повратє лжъ
|
28
|
+
И приꙇомъ :ли_пущь рода нове вещи повратє лжъ
|
29
|
+
|
30
|
+
Сценарий: Провѣрка подпримѣси .во_сл (to_h)
|
31
|
+
Допустим ꙇє примѣнена подпримѣсь .во_сл бисера рдоба
|
32
|
+
Если ровнъ наборъ ꙇє пречиненъ во словникъ
|
33
|
+
То тъꙇи имѣꙇє ровнъ словникъ сѫ пущими значѣми
|
34
|
+
Если двуглубнъ наборъ ꙇє пречиненъ во словникъ
|
35
|
+
То тъꙇи имѣꙇє ровнъ словникъ сѫ ровнѣми значѣми
|
36
|
+
Если триглубнъ наборъ ꙇє пречиненъ во словникъ
|
37
|
+
То тъꙇи имѣꙇє ровнъ словникъ сѫ двуглубнѣми значѣми
|
38
|
+
Если двуглубнъ наборъ сѫ одинакыми частьми ꙇє пречиненъ во словникъ
|
39
|
+
То тъꙇи имѣꙇє ровнъ словникъ сѫ двами двуглубнѣмы значѣмы
|
40
|
+
Если двуглубнъ наборъ сѫ одинакыми частьми ꙇє пречиненъ во словникъ приꙇомомъ :во_сл сѫ клѵчемъ :кромѣ_двоꙇниковъ
|
41
|
+
То тъꙇи имѣꙇє ровнъ словникъ сѫ однимъ двуглубнѣмъ значѣмъ
|
42
|
+
|
43
|
+
Сценарий: Провѣрка подпримѣси .режь_по (split_by)
|
44
|
+
Допустим ꙇє примѣнена подпримѣсь .режь_по бисера рдоба
|
45
|
+
И у нас есть набор чисел
|
46
|
+
Если рассечём его на чётные и нечётные
|
47
|
+
То получим два набора чётных и нечётных чисел
|
48
|
+
|
49
|
+
Сценарий: Провѣрка подпримѣси .пробь (try)
|
50
|
+
Допустим ꙇє примѣнена подпримѣсь .пробь бисера рдоба
|
51
|
+
Если спробуем вызвать метод :qwer пущя
|
52
|
+
То той вернёт пущь
|
53
|
+
|
54
|
+
Сценарий: Провѣрка подпримѣси .жди_ьже (wait_if)
|
55
|
+
Допустим ꙇє примѣнена подпримѣсь .жди_ьже бисера рдоба
|
56
|
+
Если спробуем подождать мало, чтобы условие выполнилось
|
57
|
+
То той вернёт ложно
|
58
|
+
|
59
|
+
Если спробуем подождать мало, чтобы условие не выполнилось
|
60
|
+
То той вернёт исте
|
61
|
+
|
62
|
+
Если спробуем подождать долго, чтобы условие выполнилось
|
63
|
+
То недождёмся
|
64
|
+
|
65
|
+
Сценарий: Провѣрка подпримѣси .время (time)
|
66
|
+
Допустим ꙇє примѣнена подпримѣсь .время бисера рдоба
|
67
|
+
Если спробуем вызвать метод :mtime кута временного
|
68
|
+
То той вернёт верно время изменения
|
69
|
+
|
70
|
+
Если спробуем вызвать метод :atime кута временного
|
71
|
+
То той вернёт верно время доступа
|
72
|
+
|
73
|
+
Если спробуем вызвать метод :ctime кута временного
|
74
|
+
То той вернёт верно время создания
|
75
|
+
|
76
|
+
Сценарий: Провѣрка подпримѣси .сравнена (compare)
|
77
|
+
Допустим ꙇє примѣнена подпримѣсь .сравнена бисера рдоба
|
78
|
+
Если имѣмы двѣ Стразы
|
79
|
+
То приꙇомъ :сравнена двухъ Стразъ повратє безъ одна
|
80
|
+
И приꙇомъ :сравнена двухъ Стразъ сѫ презоромъ надъстрочниковъ повратє одна
|
81
|
+
И приꙇомъ :сравнена двухъ Стразъ сѫ презоромъ надъстрочниковъ ꙇакъ словникъ повратє одна
|
82
|
+
|
83
|
+
Сценарий: Провѣрка невѣрной подпримѣси
|
84
|
+
Если ꙇє примѣнена подпримѣсь невѣрна бисера рдоба
|
85
|
+
То исключение невѣрнѣ опции вызвано будетъ
|
@@ -1,5 +1,8 @@
|
|
1
|
-
When /appl(
|
2
|
-
|
1
|
+
When /appl(y|ied) Rdoba (Log|Debug) module(?: with set([\w\s,:]+ keywords?| a file name) for :(io|as|in|functions|prefix) options?| with an (invalid) :io option value)?(?: inside a (class))?(?:, and :as option pointing to (self|log))?/ do |var, kind, subs, opt, invalid, cls, as |
|
2
|
+
if var == 'ied'
|
3
|
+
rdoba_sim kind.downcase.to_sym, :init, subs, cls
|
4
|
+
end
|
5
|
+
rdoba_sim kind.downcase.to_sym, :apply, opt, subs, as
|
3
6
|
end
|
4
7
|
|
5
8
|
When /issue a call to the function/ do
|
@@ -10,13 +13,19 @@ When /issue a creation of the class/ do
|
|
10
13
|
rdoba_sim :log, :create
|
11
14
|
end
|
12
15
|
|
16
|
+
When /declare the (Cls) class/ do| cls |
|
17
|
+
rdoba_sim :log, :declare, cls
|
18
|
+
end
|
19
|
+
|
13
20
|
When /(issue|define) an output of an? (variable|number|string|array)(?: inside an? (initializer|singleton function))?(?: using (?:the|an?) (keyword|invalid keyword|class))?/ do |issue, subject, inside, cond|
|
14
21
|
|
15
22
|
case inside
|
16
23
|
when 'initializer'
|
17
24
|
rdoba_sim :log, :def, :init
|
18
25
|
when 'singleton function'
|
19
|
-
rdoba_sim :log, :def, :single
|
26
|
+
rdoba_sim :log, :def, :single
|
27
|
+
else
|
28
|
+
rdoba_sim :log, :def ; end
|
20
29
|
|
21
30
|
func = :func
|
22
31
|
case subject
|
@@ -27,36 +36,41 @@ When /(issue|define) an output of an? (variable|number|string|array)(?: inside a
|
|
27
36
|
when 'string'
|
28
37
|
rdoba_sim :log, func, cond, :>, "string"
|
29
38
|
when 'array'
|
30
|
-
rdoba_sim :log, func, cond, :>, [ 'array value1', 'array value2' ] ; end
|
39
|
+
rdoba_sim :log, func, cond, :>, [ 'array value1', 'array value2' ] ; end
|
31
40
|
|
32
|
-
|
41
|
+
if issue == 'issue'
|
42
|
+
rdoba_sim :log, :close ; end ; end
|
43
|
+
|
44
|
+
When /issue an? :(extended|info|warn|enter|leave|compat) output of a variable?/ do |key|
|
33
45
|
case key
|
34
46
|
when 'extended'
|
35
|
-
rdoba_sim :log, :func, :
|
47
|
+
rdoba_sim :log, :func, :log, :>>, { variable: 'value' }
|
36
48
|
when 'info'
|
37
|
-
rdoba_sim :log, :func, :
|
49
|
+
rdoba_sim :log, :func, :log, :*, { variable: 'value' }
|
38
50
|
when 'warn'
|
39
|
-
rdoba_sim :log, :func, :
|
51
|
+
rdoba_sim :log, :func, :log, :%, { variable: 'value' }
|
40
52
|
when 'enter'
|
41
|
-
rdoba_sim :log, :func, :
|
53
|
+
rdoba_sim :log, :func, :log, :+, { variable: 'value' }
|
42
54
|
when 'leave'
|
43
|
-
rdoba_sim :log, :func, :
|
55
|
+
rdoba_sim :log, :func, :log, :-, true # TODO check return
|
44
56
|
when 'compat'
|
45
|
-
rdoba_sim :log, :func, :dbp11, "'variable: \"value\"'" ; end
|
57
|
+
rdoba_sim :log, :func, :dbp11, "'variable: \"value\"'" ; end
|
58
|
+
|
59
|
+
rdoba_sim :log, :close ; end
|
46
60
|
|
47
61
|
When /issue an output of the thrown (exception|standard error)(.*)/ do |type, note|
|
48
62
|
case type
|
49
63
|
when 'exception'
|
50
64
|
if note =~ /out/
|
51
|
-
rdoba_sim :log, :func, :
|
65
|
+
rdoba_sim :log, :func, :log, :e, :'Exception.new', :$stdout
|
52
66
|
else
|
53
|
-
rdoba_sim :log, :func, :
|
67
|
+
rdoba_sim :log, :func, :log, :e, :'Exception.new' ; end
|
54
68
|
when 'standard error'
|
55
69
|
if note =~ /notification/
|
56
|
-
rdoba_sim :log, :func, :
|
70
|
+
rdoba_sim :log, :func, :log, :e, :'StandardError.new',
|
57
71
|
[ 'standard error extended info' ]
|
58
72
|
else
|
59
|
-
rdoba_sim :log, :func, :
|
73
|
+
rdoba_sim :log, :func, :log, :e, :'StandardError.new' ; end ; end ; end
|
60
74
|
|
61
75
|
When /look into(?: the)? (stdout|stderr|file|IO)/ do |ioname|
|
62
76
|
@res = case ioname
|
@@ -69,14 +83,14 @@ When /look into(?: the)? (stdout|stderr|file|IO)/ do |ioname|
|
|
69
83
|
when 'stderr'
|
70
84
|
rdoba_sim :log, :exec, :stderr; end ; end
|
71
85
|
|
72
|
-
When /(remove|add) :(basic|extended|info|warn|enter|leave|compat) keyword.* :(functions) option
|
86
|
+
When /(remove|add) :(basic|extended|info|warn|enter|leave|compat) keyword.* :(functions) option(?: to the (self) object)?/ do |act, key, opt, obj|
|
73
87
|
if act == 'remove'
|
74
|
-
rdoba_sim :log, :func,
|
88
|
+
rdoba_sim :log, :func, obj, :>=, [ key.to_sym ]
|
75
89
|
else
|
76
|
-
rdoba_sim :log, :func,
|
90
|
+
rdoba_sim :log, :func, obj, :<=, [ key.to_sym ] ; end ; end
|
77
91
|
|
78
92
|
When /clear the :(functions) option/ do |opt|
|
79
|
-
rdoba_sim :log, :func, :
|
93
|
+
rdoba_sim :log, :func, :log, :>=, [ :* ]
|
80
94
|
end
|
81
95
|
|
82
96
|
Then /see the (variable|string|number|array|'true' value) output(?: with the :(basic|extended|info|warn|enter|leave) notice)?(?: preficed with the :(.*))?/ do |subject, notice, prefices|
|
@@ -104,9 +118,11 @@ Then /see the (variable|string|number|array|'true' value) output(?: with the :(b
|
|
104
118
|
raise "Invalid answer: #{@res.chomp}, must be like " +
|
105
119
|
"[00:00:00.000000000]{0000}(name)#{sym} variable: \"value\"" ; end
|
106
120
|
when [:timestamp, :pid, :function_name, :function_line]
|
107
|
-
if @res !~ /\[\d\d:\d\d:\d\d\.\d{9}\]\{\d+\}\([
|
121
|
+
if @res !~ /\[\d\d:\d\d:\d\d\.\d{9}\]\{\d+\}\([^\.]+\.\d+\)#{symr} variable: "value"/
|
108
122
|
raise "Invalid answer: #{@res.chomp}, must be like " +
|
109
|
-
"[00:00:00.000000000]{0000}(name
|
123
|
+
"[00:00:00.000000000]{0000}(name.0)#{sym} variable: \"value\"" ; end
|
124
|
+
when [:timestamp, :pid, :function]
|
125
|
+
expect( @res ).to match( /\[\d\d:\d\d:\d\d\.\d{9}\]\{\d+\}\([^:]+:[^\.]+\.\d+\)#{symr} variable: "value"/ )
|
110
126
|
else
|
111
127
|
raise "Invalid answer: #{@res}"
|
112
128
|
end
|
@@ -156,9 +172,29 @@ Then /see(?: a| the)? (nothing|warning|.* error exception)/ do |subject|
|
|
156
172
|
raise "Invalid answer: #{@res.inspect}, must notify" +
|
157
173
|
" that the interpreter has not found the specified method" ; end
|
158
174
|
when /name error/
|
159
|
-
if @res !~
|
175
|
+
if @res !~ /.* \(NameError\)/
|
160
176
|
raise "Invalid answer: #{@res.inspect}, must notify" +
|
161
177
|
" that the the specified name isn't declared" ; end
|
162
178
|
else
|
163
179
|
raise "Invalid answer: #{@res.inspect}" ; end ; end
|
164
180
|
|
181
|
+
|
182
|
+
Given(/^selected full Rdoba Log test plan( with self keyword)?$/) do |slf|
|
183
|
+
@testplan = 'features/support/' +
|
184
|
+
if slf
|
185
|
+
'fulltest_as_self.rb.in'
|
186
|
+
else
|
187
|
+
'fulltest_as_log.rb.in' ; end
|
188
|
+
if !File.exist? @testplan
|
189
|
+
raise "Invalid file #{@testplan} for the specified full test plan" ; end
|
190
|
+
end
|
191
|
+
|
192
|
+
When(/^we run the test plan$/) do
|
193
|
+
Open3.popen3( @testplan ) do |stdin, stdout, stderr, wait_thr|
|
194
|
+
@out = stdout.read
|
195
|
+
@err = stderr.read ; end ; end
|
196
|
+
|
197
|
+
Then(/^we see no error on its output$/) do
|
198
|
+
if !@err.empty?
|
199
|
+
raise "Error found: #{@err}" ; end ; end
|
200
|
+
|
@@ -0,0 +1,266 @@
|
|
1
|
+
#coding: utf-8
|
2
|
+
Допустим( /ꙇє примѣнена подпримѣсь \.([^\s]+) бисера рдоба/i ) do |подпримѣсь|
|
3
|
+
require 'rdoba'
|
4
|
+
case подпримѣсь
|
5
|
+
when 'пуздро'
|
6
|
+
rdoba :mixin => [ :case ]
|
7
|
+
when 'обратка'
|
8
|
+
rdoba :mixin => [ :reverse ]
|
9
|
+
when 'ли_пущь'
|
10
|
+
rdoba :mixin => [ :empty ]
|
11
|
+
when 'во_сл'
|
12
|
+
rdoba :mixin => [ :to_h ]
|
13
|
+
when 'сравнена'
|
14
|
+
rdoba :mixin => [ :compare ]
|
15
|
+
when 'режь_по'
|
16
|
+
rdoba :mixin => [ :split_by ]
|
17
|
+
when 'жди_ьже'
|
18
|
+
rdoba :mixin => [ :wait_if ]
|
19
|
+
when 'время'
|
20
|
+
rdoba :mixin => [ :time ]
|
21
|
+
when 'пробь'
|
22
|
+
rdoba :mixin => [ :try ]
|
23
|
+
else
|
24
|
+
raise ; end ; end
|
25
|
+
|
26
|
+
Допустим(/^у нас есть набор чисел$/) do
|
27
|
+
@набор = [ 1, 2, 3, 4, 5, 6, 7, 8 ] ; end
|
28
|
+
|
29
|
+
Если(/къ (кирилическу|латыньску) слову въ (верхнемъ|нижнемъ|смѣшанѣмъ) пуздрѣ ꙇє примѣненъ приꙇомъ :(ниспуздри|воспуздри)/) do | ꙇезикъ, пуздро, приꙇомъ |
|
30
|
+
стр = if ꙇезикъ =~ /кирилическу/
|
31
|
+
if пуздро =~ /верхнемъ/
|
32
|
+
'КИРИЛИЧЕСКЫ БУКЫ ЗРИЙ СІИ: Ѡ И Ꙍ'
|
33
|
+
elsif пуздро =~ /нижнемъ/
|
34
|
+
'кирилическы букы зрий сіи: ѡ и ꙍ'
|
35
|
+
else
|
36
|
+
'КиРиЛиЧеСкЫ бУкЫ зРиЙ сІи: Ѡ и Ꙍ' ; end
|
37
|
+
else
|
38
|
+
if пуздро =~ /верхнемъ/
|
39
|
+
'LATIN LETTERS SEE THE FOLLOWING: ÆǞ'
|
40
|
+
elsif пуздро =~ /нижнемъ/
|
41
|
+
'latin letters see the following: æǟ'
|
42
|
+
else
|
43
|
+
'LaTiN lEtTeRs SeE tHe FoLlOwInG: æǞ' ; end ; end
|
44
|
+
|
45
|
+
@плодъ = ( приꙇомъ =~ /ниспуздри/ ) && стр.downcase || стр.upcase ; end
|
46
|
+
|
47
|
+
Если(/^рассечём его на чётные и нечётные$/) do
|
48
|
+
( @чётъ, @нечётъ ) = @набор.split_by { |x| x % 2 == 0 } ; end
|
49
|
+
|
50
|
+
Если(/^спробуем вызвать метод :qwer пущя$/) do
|
51
|
+
@плодъ = nil.try( :qwer ) ; end
|
52
|
+
|
53
|
+
То(/^(кирилическо|латыньско) слово имаꙇє буквы въ (нижнемъ|верхнемъ) пуздрѣ$/) do | ꙇезикъ, пуздро |
|
54
|
+
плодъ = if ꙇезикъ =~ /кирилическо/
|
55
|
+
( пуздро =~ /верхнемъ/ ) &&
|
56
|
+
'КИРИЛИЧЕСКЫ БУКЫ ЗРИЙ СІИ: Ѡ И Ꙍ'||
|
57
|
+
'кирилическы букы зрий сіи: ѡ и ꙍ'
|
58
|
+
else
|
59
|
+
( пуздро =~ /верхнемъ/ ) &&
|
60
|
+
'LATIN LETTERS SEE THE FOLLOWING: ÆǞ' ||
|
61
|
+
'latin letters see the following: æǟ' ; end
|
62
|
+
|
63
|
+
if @плодъ != плодъ
|
64
|
+
raise "Плодна Страза со значенꙇемъ '#{@плодъ}' должна имѣти значенꙇе " \
|
65
|
+
"'#{плодъ}'" ; end ; end
|
66
|
+
|
67
|
+
|
68
|
+
|
69
|
+
|
70
|
+
То(/^Стразовъ приꙇомъ :обратка( сѫ кракомъ| сѫ доведомъ)? повратє обратну Стразу$/) do | доведъ |
|
71
|
+
требе = case доведъ
|
72
|
+
when nil
|
73
|
+
"акортс"
|
74
|
+
when /кракомъ/u
|
75
|
+
"\xB0\xD0\xBA\xD0\xBE\xD0\x80\xD1\x82\xD1\x81\xD1"
|
76
|
+
when /доведомъ/u
|
77
|
+
"карост"
|
78
|
+
end
|
79
|
+
|
80
|
+
исходъ = case доведъ
|
81
|
+
when nil
|
82
|
+
'строка'.reverse
|
83
|
+
when /кракомъ/u
|
84
|
+
'строка'.reverse :byte_by_byte
|
85
|
+
when /доведомъ/u
|
86
|
+
'строка'.reverse 2
|
87
|
+
end
|
88
|
+
|
89
|
+
if исходъ != требе
|
90
|
+
raise "Ложнъ исходъ '#{исходъ}' ꙇє повратнъ отъ приꙇома :обратка#{доведъ}, требуꙇє '#{требе}'" ; end
|
91
|
+
end
|
92
|
+
|
93
|
+
То(/^приꙇомъ :ли_пущь рода (пущь|лжа|нове вещи) повратє (вѣрнъ|лжъ)$/) do | вещь, поврать |
|
94
|
+
поврать = ( поврать == 'вѣрнъ' ) && true || false
|
95
|
+
исходъ = case вещь
|
96
|
+
when 'пущь'
|
97
|
+
nil.empty? == поврать
|
98
|
+
when 'лжа'
|
99
|
+
false.empty? == поврать
|
100
|
+
when 'нове вещи'
|
101
|
+
Object.new.empty? == поврать
|
102
|
+
end
|
103
|
+
if !исходъ
|
104
|
+
raise "Ложнъ исходъ ꙇє повратнъ отъ приꙇома :ли_пущь рода #{вещь}" ; end
|
105
|
+
end
|
106
|
+
|
107
|
+
|
108
|
+
Если(/^(ровнъ|двуглубнъ|триглубнъ) наборъ( сѫ одинакыми частьми)? ꙇє пречиненъ во словникъ( приꙇомомъ :во_сл сѫ клѵчемъ :кромѣ_двоꙇниковъ)?$/) do | видъ, одинакъ, клѵчь |
|
109
|
+
@вещь =
|
110
|
+
case видъ
|
111
|
+
when 'ровнъ'
|
112
|
+
[ 'aa', 0, 'bb', 1 ].to_h
|
113
|
+
when 'двуглубнъ'
|
114
|
+
if одинакъ
|
115
|
+
if клѵчь
|
116
|
+
[ [ 'aa', 0, ], [ 'aa', 0 ] ].to_h( :save_unique => true )
|
117
|
+
else
|
118
|
+
[ [ 'aa', 0, ], [ 'aa', 0 ] ].to_h ; end
|
119
|
+
else
|
120
|
+
[ [ 'aa', 0, ], [ 'bb', 1 ] ].to_h ; end
|
121
|
+
when 'триглубнъ'
|
122
|
+
[ [ 'aa', 0, 1, ], [ 'bb', [ 1, 0 ] ] ].to_h
|
123
|
+
end
|
124
|
+
end
|
125
|
+
|
126
|
+
То(/^тъꙇи имѣꙇє ровнъ словникъ сѫ (пущими |ровнѣми |двуглубнѣми )?значѣми$/) do | видъ |
|
127
|
+
@схъ =
|
128
|
+
if видъ =~ /пущими/u
|
129
|
+
{ "aa" => nil, 0 => nil, "bb" => nil, 1 => nil }
|
130
|
+
elsif видъ =~ /ровнѣми/u
|
131
|
+
{ "aa" => 0, "bb" => 1 }
|
132
|
+
else
|
133
|
+
{ "aa" => [ 0, 1 ], "bb" => [ 1, 0 ] } ; end
|
134
|
+
|
135
|
+
if @вещь != @схъ
|
136
|
+
raise "Наборъ '#{@вещь}' требуꙇє быти '#{@схъ}'" ; end
|
137
|
+
end
|
138
|
+
|
139
|
+
То(/^тъꙇи имѣꙇє ровнъ словникъ сѫ (однимъ|двами) двуглубн(?:ѣмъ|ѣмы) знач(?:ѣмъ|ѣмы)$/) do | видъ |
|
140
|
+
@схъ =
|
141
|
+
if видъ =~ /двами/
|
142
|
+
{ "aa" => [ 0, 0 ] }
|
143
|
+
else
|
144
|
+
{ "aa" => [ 0 ] } ; end
|
145
|
+
|
146
|
+
if @вещь != @схъ
|
147
|
+
raise "Наборъ '#{@вещь}' требуꙇє быти '#{@схъ}'" ; end
|
148
|
+
end
|
149
|
+
|
150
|
+
Если(/^имѣмы двѣ Стразы$/) do
|
151
|
+
@стры = [ 'а҆́гнецъ', 'а҆гкѵ́ра' ] ; end
|
152
|
+
|
153
|
+
То(/^приꙇомъ :сравнена двухъ Стразъ( сѫ презоромъ надъстрочниковъ( ꙇакъ словникъ)?)? повратє (безъ )?одна$/) do | доведъ, подобье, знакъ |
|
154
|
+
поврать = ( знакъ =~ /безъ/u ) && -1 || 1
|
155
|
+
|
156
|
+
исходъ =
|
157
|
+
if доведъ
|
158
|
+
if подобье
|
159
|
+
@стры[ 0 ].compare_to( @стры[ 1 ], :ignore_diacritics => true) == поврать
|
160
|
+
else
|
161
|
+
@стры[ 0 ].compare_to( @стры[ 1 ], :ignore_diacritics) == поврать ; end
|
162
|
+
else
|
163
|
+
@стры[ 0 ].compare_to( @стры[ 1 ] ) == поврать ; end
|
164
|
+
|
165
|
+
if !исходъ
|
166
|
+
raise "Приꙇомъ :сравнена двухъ Стразъ#{доведъ}#{подобье} требуꙇє повратъти '#{поврать}'" ; end
|
167
|
+
end
|
168
|
+
|
169
|
+
То(/^получим два набора чётных и нечётных чисел$/) do
|
170
|
+
expect( @чётъ ).to be_eql( [ 2, 4, 6, 8 ] )
|
171
|
+
expect( @нечётъ ).to be_eql( [ 1, 3, 5, 7 ] ) ; end
|
172
|
+
|
173
|
+
То(/^той вернёт пущь$/) do
|
174
|
+
expect( @плодъ ).to be_nil ; end
|
175
|
+
|
176
|
+
Если(/^спробуем подождать мало, чтобы условие не выполнилось$/) do
|
177
|
+
@плодъ = wait_if( 1 ) { false } ; end
|
178
|
+
|
179
|
+
Если(/^спробуем подождать мало, чтобы условие выполнилось$/) do
|
180
|
+
@плодъ = wait_if( 1 ) { true } ; end
|
181
|
+
|
182
|
+
Если(/^спробуем подождать долго, чтобы условие выполнилось$/) do
|
183
|
+
@плодъ =
|
184
|
+
begin
|
185
|
+
Timeout.timeout( 2 ) do
|
186
|
+
wait_if( 10 ) { true } ; end
|
187
|
+
rescue Timeout::Error
|
188
|
+
nil; end ; end
|
189
|
+
|
190
|
+
То(/^недождёмся$/) do
|
191
|
+
expect( @плодъ ).to be_nil ; end
|
192
|
+
|
193
|
+
То(/^той вернёт ложно$/) do
|
194
|
+
expect( @плодъ ).to be_falsey ; end
|
195
|
+
|
196
|
+
То(/^той вернёт исте$/) do
|
197
|
+
expect( @плодъ ).to be_truthy ; end
|
198
|
+
|
199
|
+
|
200
|
+
Если(/^спробуем вызвать метод :mtime кута временного$/) do
|
201
|
+
@кут = tmpfile
|
202
|
+
@время = File.mtime( @кут ) ; end
|
203
|
+
|
204
|
+
Если(/^спробуем вызвать метод :atime кута временного$/) do
|
205
|
+
@кут = tmpfile
|
206
|
+
@время = File.atime( @кут ) ; end
|
207
|
+
|
208
|
+
Если(/^спробуем вызвать метод :ctime кута временного$/) do
|
209
|
+
@кут = tmpfile
|
210
|
+
@время = File.ctime( @кут ) ; end
|
211
|
+
|
212
|
+
То(/^той вернёт верно время/) do
|
213
|
+
время = @время.strftime( "%Y-%m-%d %H:%M:%S.%N %z" )
|
214
|
+
expect( время ).to be_eql( `stat -c %y #{@кут}`.strip ) ; end
|
215
|
+
|
216
|
+
Если(/^ꙇє примѣнена подпримѣсь невѣрна бисера рдоба$/) do
|
217
|
+
@проц = Proc.new { rdoba :mixin => [ :false ] } ; end
|
218
|
+
|
219
|
+
То(/^исключение невѣрнѣ опции вызвано будетъ$/) do
|
220
|
+
expect{ @проц.call }.to raise_error( Rdoba::Mixin::InvalidOption ) ; end
|
221
|
+
|
222
|
+
|
223
|
+
=begin
|
224
|
+
#!/usr/bin/ruby -KU
|
225
|
+
|
226
|
+
if $0 == __FILE__
|
227
|
+
p s.to_res
|
228
|
+
[1,2,3,4,5].each_comby do |c|
|
229
|
+
p c
|
230
|
+
end
|
231
|
+
|
232
|
+
len = 4
|
233
|
+
value = 100
|
234
|
+
p sprintf("%.*X", len, value )
|
235
|
+
|
236
|
+
s = ' 1221 eeee 4564 wwww ' + 258.to_p
|
237
|
+
ppp = s.scanf(' %d %s %d %s %.2+c')
|
238
|
+
p ppp
|
239
|
+
p 258.to_p.to_i(String::BE)
|
240
|
+
|
241
|
+
null = nil
|
242
|
+
p null.class, null
|
243
|
+
null <<= 'qweqweqweqwe'
|
244
|
+
p null.class, null
|
245
|
+
null << 'qweqweqweqwe'
|
246
|
+
p null.class, null
|
247
|
+
i = 12
|
248
|
+
p sprintf("0x%X", i)
|
249
|
+
p sprintf("%.3X", i)
|
250
|
+
|
251
|
+
p '----------'
|
252
|
+
|
253
|
+
str = <<STR
|
254
|
+
<font size="4" face="Irmologion Ucs">и3зhде
|
255
|
+
повелёніе t кeсарz ѓvгуста, написaти всю2
|
256
|
+
вселeнную</font>
|
257
|
+
STR
|
258
|
+
|
259
|
+
|
260
|
+
str = '/font><font size="4">III</font><i> </i>греч.<font size="4"><i></i> </font><font size="4" face="Irmologion Ucs">Мёсzца ѓvгуста въ Gi-й дeнь. Слyжба с™и1телю и3 чудотв0рцу тЂхwну, є3пcкпу вор0нежскому.</font>13 августа, Тихона Воронежского, заголовок службы m_aug\13p.hip'
|
261
|
+
re = /<font size="4" face="Irmologion Ucs">([ -"'-\?A-BD-HJ-\[\]`-hj-\}¤¦-§©«-®±µ-·»Ё-ЌЎ-яё-ќў-џҐ-ґ–-—‘-‚“-„†-•…‰‹-›€№™∙]+?)<\/font>/
|
262
|
+
|
263
|
+
p(str.match re)
|
264
|
+
end
|
265
|
+
|
266
|
+
=end
|
data/features/support/env.rb
CHANGED
@@ -1,8 +1,18 @@
|
|
1
1
|
require 'rdoba'
|
2
|
-
require '
|
2
|
+
require 'tmpdir'
|
3
3
|
require 'open3'
|
4
4
|
require 'coveralls'
|
5
|
+
require "codeclimate-test-reporter"
|
6
|
+
require 'simplecov'
|
7
|
+
require 'rspec/expectations'
|
8
|
+
|
9
|
+
# specific external test/development libraries
|
10
|
+
#
|
11
|
+
#
|
5
12
|
Coveralls.wear!
|
13
|
+
CodeClimate::TestReporter.start
|
14
|
+
SimpleCov.start
|
15
|
+
##############################################
|
6
16
|
|
7
17
|
RdobaSimSimpleHead=<<HEAD
|
8
18
|
#!/usr/bin/env ruby
|
@@ -10,13 +20,10 @@ RdobaSimSimpleHead=<<HEAD
|
|
10
20
|
require 'rdoba'
|
11
21
|
HEAD
|
12
22
|
|
13
|
-
|
14
|
-
#!/usr/bin/env ruby
|
15
|
-
|
16
|
-
require 'rdoba'
|
23
|
+
RdobaCodeClassDeclaration=<<HEAD
|
17
24
|
class Cls
|
18
25
|
def initialize
|
19
|
-
|
26
|
+
log > {:variable=>"value"}
|
20
27
|
end
|
21
28
|
end
|
22
29
|
HEAD
|
@@ -35,13 +42,13 @@ def format str
|
|
35
42
|
def store
|
36
43
|
file = @inithead + @init + @echo + ( "end\n" * @deep )
|
37
44
|
puts file
|
38
|
-
File.open(
|
45
|
+
File.open( @tmpfile, 'w+' ) do |f|
|
39
46
|
f.puts file ; end ; end
|
40
47
|
|
41
48
|
def match_keywords keystr
|
42
49
|
keys = ( keystr || '' ).split( /[,:\s]/ ).map do |k|
|
43
50
|
[ :basic, :extended, :enter, :leave, :compat, :timestamp, :pid,
|
44
|
-
:function_name, :function_line ].include?( k.to_sym ) && k.to_sym || nil
|
51
|
+
:function_name, :function_line, :function ].include?( k.to_sym ) && k.to_sym || nil
|
45
52
|
end.compact ; end
|
46
53
|
|
47
54
|
def rdoba_sim sub, cmd, *args
|
@@ -50,24 +57,31 @@ def rdoba_sim sub, cmd, *args
|
|
50
57
|
when :log, :debug
|
51
58
|
case cmd
|
52
59
|
when :init
|
53
|
-
|
54
|
-
|
60
|
+
$tmpdir ||= Dir.mktmpdir
|
61
|
+
@tmpfile ||= File.join( $tmpdir, 'tmp.log' )
|
55
62
|
|
56
|
-
if args[
|
63
|
+
if args[ 1 ] == 'class'
|
57
64
|
@deep = 1
|
58
65
|
@inithead = RdobaSimClsHead
|
59
66
|
else
|
60
67
|
@deep = 0
|
61
68
|
@inithead = RdobaSimSimpleHead ; end
|
69
|
+
@echo = ''
|
70
|
+
@init = ''
|
71
|
+
puts @inithead
|
62
72
|
|
73
|
+
when :apply
|
74
|
+
opts = match_keywords args[ 1 ]
|
75
|
+
# opts = opts.size > 2 && opts || opts.size > 0 && opts[ 1 ] || nil
|
63
76
|
param = case args[ 0 ]
|
64
77
|
when 'io'
|
65
|
-
{ :io => "File.new(
|
78
|
+
{ :io => "File.new( File.join( '#{@tmpfile}' ), 'w+' )", :functions => :basic }
|
66
79
|
when 'as'
|
67
|
-
{ :as => ":
|
80
|
+
{ :as => ":self", :functions => :basic }
|
68
81
|
when 'in'
|
69
|
-
@inithead = RdobaSimInHead
|
70
82
|
{ :in => "Cls", :functions => :basic }
|
83
|
+
# when /in.*as/
|
84
|
+
# { :in => "Cls", :as => args[ 2 ].to_sym, :functions => :basic }
|
71
85
|
when 'prefix'
|
72
86
|
# basic|extended|enter|leave|compat
|
73
87
|
{ args[ 0 ].to_sym => opts, :functions => :basic }
|
@@ -77,24 +91,26 @@ def rdoba_sim sub, cmd, *args
|
|
77
91
|
{ :functions => :basic }
|
78
92
|
end
|
79
93
|
|
94
|
+
if args[ 2 ]
|
95
|
+
param.merge!( :as => args[ 2 ].to_sym ) ; end
|
96
|
+
|
80
97
|
param = "{" + ( param ).to_a.map do |v|
|
81
98
|
"#{v[ 0 ].inspect} => #{v[ 1 ].is_a?( String ) &&
|
82
99
|
v[ 1 ] || v[ 1 ].inspect}" end.join(',') + "}"
|
83
|
-
|
84
|
-
|
85
|
-
@echo = ''
|
100
|
+
|
101
|
+
@echo << " " * @deep + "rdoba :#{sub} => #{param}\n"
|
86
102
|
|
87
103
|
when :func
|
88
104
|
call = case args[ 0 ]
|
89
105
|
when 'keyword'
|
90
|
-
'
|
106
|
+
'self'
|
91
107
|
when 'invalid keyword'
|
92
108
|
'errlog'
|
93
109
|
when /^db/
|
94
110
|
@echo << "self.dbgl = 0xff\n"
|
95
111
|
args[ 0 ]
|
96
112
|
else
|
97
|
-
|
113
|
+
( args[ 0 ] || :log ).to_sym
|
98
114
|
end
|
99
115
|
|
100
116
|
sep = ( args[ 1 ] == :e ) && '.' || ' '
|
@@ -109,10 +125,15 @@ def rdoba_sim sub, cmd, *args
|
|
109
125
|
str = "#{call}#{sep}#{args[ 1 ]}#{param.join(',')}"
|
110
126
|
echo = format str
|
111
127
|
@echo << echo
|
128
|
+
|
129
|
+
when :close
|
112
130
|
while @deep > 0
|
113
131
|
@deep -= 1
|
114
132
|
@echo << ( format "end" ) ; end
|
115
133
|
|
134
|
+
when :declare
|
135
|
+
@echo << ( format RdobaCodeClassDeclaration )
|
136
|
+
|
116
137
|
when :create
|
117
138
|
@echo << ( format "Cls.new" )
|
118
139
|
|
@@ -126,11 +147,13 @@ def rdoba_sim sub, cmd, *args
|
|
126
147
|
@deep = 0 ; end
|
127
148
|
echo = case args[ 0 ]
|
128
149
|
when :init
|
150
|
+
@deep += 1
|
129
151
|
format 'def initialize'
|
130
152
|
when :single
|
153
|
+
@deep += 1
|
131
154
|
format 'def self.singleton'
|
132
|
-
|
133
|
-
|
155
|
+
else;
|
156
|
+
'' ; end
|
134
157
|
@echo << echo
|
135
158
|
|
136
159
|
when :exec
|
@@ -138,8 +161,8 @@ def rdoba_sim sub, cmd, *args
|
|
138
161
|
store
|
139
162
|
puts '-' * 15
|
140
163
|
|
141
|
-
File.chmod 0755,
|
142
|
-
Open3.popen3(
|
164
|
+
File.chmod 0755, @tmpfile
|
165
|
+
Open3.popen3( @tmpfile ) do |stdin, stdout, stderr, wait_thr|
|
143
166
|
@out = stdout.read
|
144
167
|
@err = stderr.read
|
145
168
|
end
|
@@ -147,7 +170,7 @@ def rdoba_sim sub, cmd, *args
|
|
147
170
|
end
|
148
171
|
res = case args[ 0 ]
|
149
172
|
when :file
|
150
|
-
File.new(
|
173
|
+
File.new( @tmpfile, 'r' ).read
|
151
174
|
when :stdout
|
152
175
|
@out
|
153
176
|
when :stderr
|
@@ -159,3 +182,4 @@ def rdoba_sim sub, cmd, *args
|
|
159
182
|
end
|
160
183
|
end
|
161
184
|
|
185
|
+
at_exit { $tmpdir && ( FileUtils.remove_entry_secure $tmpdir ) }
|