rdoba 0.9.1 → 0.9.2
Sign up to get free protection for your applications and to get access to all the features.
- 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 ) }
|