rdoba 0.9.1 → 0.9.2

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