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.
Files changed (80) hide show
  1. checksums.yaml +7 -7
  2. data/.gitignore +4 -0
  3. data/.travis.yml +28 -0
  4. data/CHANGES.md +6 -0
  5. data/Gemfile +5 -0
  6. data/README.md +75 -90
  7. data/Rakefile +61 -55
  8. data/TODO +6 -0
  9. data/features/log.feature +100 -29
  10. data/features/mixin.feature +85 -0
  11. data/features/step_definitions/log_steps.rb +58 -22
  12. data/features/step_definitions/mixin_steps.rb +266 -0
  13. data/features/support/env.rb +48 -24
  14. data/features/support/fulltest_as_log.rb.in +143 -0
  15. data/features/support/fulltest_as_self.rb.in +144 -0
  16. data/features/support/mixin_support.rb +13 -0
  17. data/html/.keep +0 -0
  18. data/html/created.rid +28 -0
  19. data/html/css/fonts.css +167 -0
  20. data/html/css/rdoc.css +590 -0
  21. data/html/fonts/Lato-Light.ttf +0 -0
  22. data/html/fonts/Lato-LightItalic.ttf +0 -0
  23. data/html/fonts/Lato-Regular.ttf +0 -0
  24. data/html/fonts/Lato-RegularItalic.ttf +0 -0
  25. data/html/fonts/SourceCodePro-Bold.ttf +0 -0
  26. data/html/fonts/SourceCodePro-Regular.ttf +0 -0
  27. data/html/images/add.png +0 -0
  28. data/html/images/arrow_up.png +0 -0
  29. data/html/images/brick.png +0 -0
  30. data/html/images/brick_link.png +0 -0
  31. data/html/images/bug.png +0 -0
  32. data/html/images/bullet_black.png +0 -0
  33. data/html/images/bullet_toggle_minus.png +0 -0
  34. data/html/images/bullet_toggle_plus.png +0 -0
  35. data/html/images/date.png +0 -0
  36. data/html/images/delete.png +0 -0
  37. data/html/images/find.png +0 -0
  38. data/html/images/loadingAnimation.gif +0 -0
  39. data/html/images/macFFBgHack.png +0 -0
  40. data/html/images/package.png +0 -0
  41. data/html/images/page_green.png +0 -0
  42. data/html/images/page_white_text.png +0 -0
  43. data/html/images/page_white_width.png +0 -0
  44. data/html/images/plugin.png +0 -0
  45. data/html/images/ruby.png +0 -0
  46. data/html/images/tag_blue.png +0 -0
  47. data/html/images/tag_green.png +0 -0
  48. data/html/images/transparent.png +0 -0
  49. data/html/images/wrench.png +0 -0
  50. data/html/images/wrench_orange.png +0 -0
  51. data/html/images/zoom.png +0 -0
  52. data/html/js/darkfish.js +161 -0
  53. data/html/js/jquery.js +4 -0
  54. data/html/js/navigation.js +142 -0
  55. data/html/js/navigation.js.gz +0 -0
  56. data/html/js/search.js +109 -0
  57. data/html/js/search_index.js +1 -0
  58. data/html/js/search_index.js.gz +0 -0
  59. data/html/js/searcher.js +228 -0
  60. data/html/js/searcher.js.gz +0 -0
  61. data/lib/rdoba/_version_.rb +1 -1
  62. data/lib/rdoba/common.rb +0 -15
  63. data/lib/rdoba/debug.rb +5 -1
  64. data/lib/rdoba/log.rb +360 -189
  65. data/lib/rdoba/merge.rb +21 -0
  66. data/lib/rdoba/mixin/time.rb +11 -0
  67. data/lib/rdoba/mixin/try.rb +6 -0
  68. data/lib/rdoba/mixin/try_1_9_0.rb +4 -0
  69. data/lib/rdoba/mixin/wait_if.rb +21 -0
  70. data/lib/rdoba/mixin.rb +270 -6
  71. data/lib/rdoba/strings.rb +4 -141
  72. data/lib/rdoba.rb +13 -19
  73. data/rdoba.gemspec +30 -24
  74. data/tddium.yml +11 -0
  75. metadata +260 -65
  76. data/features/bcd.feature +0 -29
  77. data/features/step_definitions/bcd_steps.rb +0 -69
  78. data/test/helper.rb +0 -18
  79. data/test/rdoba_test.rb.stub +0 -59
  80. 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(?:y|ied) Rdoba (Log|Debug) module(?: with set([\w\s,:]+ keywords?| a file name) for :(io|as|in|functions|prefix) option| with an (invalid) :io option value)?(?: inside a (class))?/ do |kind, subs, opt, invalid, cls|
2
- rdoba_sim kind.downcase.to_sym, :init, opt, subs, cls
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 ; end
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 ; end
39
+ rdoba_sim :log, func, cond, :>, [ 'array value1', 'array value2' ] ; end
31
40
 
32
- When /issue an? :(extended|info|warn|enter|leave|compat) output of a variable/ do |key|
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, :self, :>>, { variable: 'value' }
47
+ rdoba_sim :log, :func, :log, :>>, { variable: 'value' }
36
48
  when 'info'
37
- rdoba_sim :log, :func, :self, :*, { variable: 'value' }
49
+ rdoba_sim :log, :func, :log, :*, { variable: 'value' }
38
50
  when 'warn'
39
- rdoba_sim :log, :func, :self, :%, { variable: 'value' }
51
+ rdoba_sim :log, :func, :log, :%, { variable: 'value' }
40
52
  when 'enter'
41
- rdoba_sim :log, :func, :self, :+, { variable: 'value' }
53
+ rdoba_sim :log, :func, :log, :+, { variable: 'value' }
42
54
  when 'leave'
43
- rdoba_sim :log, :func, :self, :-, true # TODO check return
55
+ rdoba_sim :log, :func, :log, :-, true # TODO check return
44
56
  when 'compat'
45
- rdoba_sim :log, :func, :dbp11, "'variable: \"value\"'" ; end ; 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, :self, :e, :'Exception.new', :$stdout
65
+ rdoba_sim :log, :func, :log, :e, :'Exception.new', :$stdout
52
66
  else
53
- rdoba_sim :log, :func, :self, :e, :'Exception.new' ; end
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, :self, :e, :'StandardError.new',
70
+ rdoba_sim :log, :func, :log, :e, :'StandardError.new',
57
71
  [ 'standard error extended info' ]
58
72
  else
59
- rdoba_sim :log, :func, :self, :e, :'StandardError.new' ; end ; end ; end
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/ do |act, key, opt|
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, :self, :>=, [ key.to_sym ]
88
+ rdoba_sim :log, :func, obj, :>=, [ key.to_sym ]
75
89
  else
76
- rdoba_sim :log, :func, :self, :<=, [ key.to_sym ] ; end ; end
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, :self, :>=, [ :* ]
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+\}\([^:]+:\d+\)#{symr} variable: "value"/
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:0)#{sym} variable: \"value\"" ; end
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 !~ /undefined local variable or method .* \(NameError\)/
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
@@ -1,8 +1,18 @@
1
1
  require 'rdoba'
2
- require 'tempfile'
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
- RdobaSimInHead=<<HEAD
14
- #!/usr/bin/env ruby
15
-
16
- require 'rdoba'
23
+ RdobaCodeClassDeclaration=<<HEAD
17
24
  class Cls
18
25
  def initialize
19
- self > {:variable=>"value"}
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( 'tmp.rb', 'w+' ) do |f|
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
- opts = match_keywords args[ 1 ]
54
- opts = opts.size > 1 && opts || opts.size > 0 && opts[ 0 ] || nil
60
+ $tmpdir ||= Dir.mktmpdir
61
+ @tmpfile ||= File.join( $tmpdir, 'tmp.log' )
55
62
 
56
- if args[ 2 ] == 'class'
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( 'tmp.log', 'w+' )", :functions => :basic }
78
+ { :io => "File.new( File.join( '#{@tmpfile}' ), 'w+' )", :functions => :basic }
66
79
  when 'as'
67
- { :as => ":log", :functions => :basic }
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
- @init = " " * @deep + "rdoba :#{sub} => #{param}\n"
84
- puts @init
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
- 'log'
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
- 'self'
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
- end
133
- @deep += 1
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, 'tmp.rb'
142
- Open3.popen3( "./tmp.rb" ) do |stdin, stdout, stderr, wait_thr|
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( 'tmp.log', 'r' ).read
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 ) }