mumuki-text-runner 1.0.0 → 1.4.0

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,15 +1,7 @@
1
1
  ---
2
- !binary "U0hBMQ==":
3
- metadata.gz: !binary |-
4
- YjRkYTVjMzc2MmM5NTExNDE4ZjgwMTIxMTk4ZDM3M2E1MWYwYTJkMw==
5
- data.tar.gz: !binary |-
6
- ZGVhMjUxYWNjYmQwZTAyZGMwYzcxZjM4MGE0MzM1NzQ2ZGQ3M2Q4ZA==
2
+ SHA256:
3
+ metadata.gz: 43678016289325cc51c7f82a3c3696d8113641032b2c1b97f4a68ce4835bc3c6
4
+ data.tar.gz: b237d0b7ec9d0fe5e8dc110accf493fbd17ac35d55bb3f2e14856b1f277922f9
7
5
  SHA512:
8
- metadata.gz: !binary |-
9
- Y2RmMjgxNzEzMmQ4NzFkM2JjMGEzMTQ1NzI2NzA5ZDc2N2UyNmNjMTVhYzQ2
10
- ZWVjNTlmNWM0YjIzMzMwMzlkYmJhM2QwY2RkOTgwNGQ3OWU3ZTVkOTIxYzE1
11
- NDRmNDNjOTkzMDQ2MjNjY2RhNTZjMGQ2YWZhNGQ4OTFiMDZiY2Q=
12
- data.tar.gz: !binary |-
13
- MzBjNTIxMzEzZjBiZmVlODI4ZjlmYTg5ODdjMjlmYmY2Y2E0OWMzODI4Y2U3
14
- YmQzMTM2NWExYzFhOGIzY2FkODYyZjcyM2I2YThiMWFkNzk0NmJhYTY1NWRk
15
- YWE2YzY5MDk1MTk4ZDM0OTM1NzFkYTlkZWYxMzYzMjFkODViYzg=
6
+ metadata.gz: 134703fbbf89aa87c224e1efa93752e7f7681b82586ce56325b31cd342ac72fda98ba38136a747b54e9e635068e372f0236fe837caa569f6b1072048719e4371
7
+ data.tar.gz: a224bb63533f2f352c4a4be7cfa51ea9030a6fe7c3d0258bfb15a63f711678994fa60007207ee1823960c0dc1b60b9ccda5ac0d339c395400de98abc42e02f2e
@@ -1,7 +1,39 @@
1
1
  class TextChecker < Mumukit::Metatest::Checker
2
- def check_equal(test, config)
3
- actual = test[:source]
4
- comparer = EqualityComparer.new(config)
5
- fail comparer.locale_error_message unless comparer.satisfies?(actual)
2
+ require_relative './comparators/comparator'
3
+ require_relative './comparators/equality_comparator'
4
+ require_relative './comparators/contain_comparator'
5
+ require_relative './comparators/regexp_comparator'
6
+ require_relative './comparators/valid_ip_comparator'
7
+
8
+ require_relative './options/ignore_whitespace'
9
+ require_relative './options/ignore_case'
10
+
11
+ COMPARATORS = {
12
+ match: TextChecker::RegexpComparator,
13
+ equal: TextChecker::EqualityComparator,
14
+ contain: TextChecker::ContainComparator,
15
+ valid_ip: TextChecker::ValidIpComparator
16
+ }
17
+
18
+ def check_assertion(key, input, config, example)
19
+ if key == :keys
20
+ check_keys input, config, example
21
+ else
22
+ check_comparators key, input, config
23
+ end
24
+ end
25
+
26
+ def check_comparators(key, input, config)
27
+ COMPARATORS[key]
28
+ .new(config.is_a?(Hash) ? config : {expected: config})
29
+ .compare(input[:source])
30
+ .try { |error| fail error }
31
+ end
32
+
33
+ def check_keys(input, config, example)
34
+ source_hash = YAML.load(input[:source]).with_indifferent_access
35
+ config.each do |subkey, subconfig|
36
+ check_assertions({source: source_hash[subkey]}, subconfig, example)
37
+ end
6
38
  end
7
39
  end
@@ -0,0 +1,26 @@
1
+ class TextChecker::Comparator
2
+ def initialize(config = {})
3
+ @config = config
4
+ end
5
+
6
+ def compare(source)
7
+ @config[:error] || error_message(source) unless success?(transform(source))
8
+ end
9
+
10
+ def expected
11
+ transform @config[:expected]
12
+ end
13
+
14
+ private
15
+
16
+ def modifiers
17
+ modifiers = []
18
+ modifiers << TextChecker::IgnoreWhitespace if @config[:ignore_whitespace]
19
+ modifiers << TextChecker::IgnoreCase if @config[:ignore_case]
20
+ modifiers
21
+ end
22
+
23
+ def transform(source)
24
+ modifiers.inject(source) { |text, modifier| modifier.apply(text) }
25
+ end
26
+ end
@@ -0,0 +1,12 @@
1
+ class TextChecker::ContainComparator < TextChecker::Comparator
2
+
3
+ def success?(source)
4
+ source.include? expected.to_s
5
+ end
6
+
7
+ private
8
+
9
+ def error_message(source)
10
+ I18n.t 'contain.failure', actual: source
11
+ end
12
+ end
@@ -0,0 +1,12 @@
1
+ class TextChecker::EqualityComparator < TextChecker::Comparator
2
+
3
+ def success?(source)
4
+ source == expected.to_s
5
+ end
6
+
7
+ private
8
+
9
+ def error_message(source)
10
+ I18n.t 'equality.failure', actual: source
11
+ end
12
+ end
@@ -0,0 +1,13 @@
1
+ class TextChecker::RegexpComparator < TextChecker::Comparator
2
+
3
+ def success?(source)
4
+ !!Regexp.new(expected).match(source)
5
+ end
6
+
7
+ private
8
+
9
+
10
+ def error_message(source)
11
+ I18n.t 'expression.failure', actual: source
12
+ end
13
+ end
@@ -0,0 +1,14 @@
1
+ class TextChecker::ValidIpComparator < TextChecker::Comparator
2
+
3
+ def success?(source)
4
+ !!REGEXP.match(source)
5
+ end
6
+
7
+ private
8
+
9
+ REGEXP = /^((25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.){3}(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)$/i
10
+
11
+ def error_message(source)
12
+ I18n.t 'valid_ip.failure', actual: source
13
+ end
14
+ end
@@ -0,0 +1,9 @@
1
+ en:
2
+ equality:
3
+ failure: '**%{actual}** is not the right value.'
4
+ contain:
5
+ failure: '**%{actual}** does not contain the right value.'
6
+ expression:
7
+ failure: '**%{actual}** does not match the expected expression.'
8
+ valid_ip:
9
+ failure: '**%{actual}** is not a valid IP address.'
@@ -0,0 +1,9 @@
1
+ es:
2
+ equality:
3
+ failure: '**%{actual}** no es el valor correcto.'
4
+ contain:
5
+ failure: '**%{actual}** no contiene el valor correcto.'
6
+ expression:
7
+ failure: '**%{actual}** no coincide con la expresión correcta.'
8
+ valid_ip:
9
+ failure: '**%{actual}** no es una dirección IP válida.'
@@ -1,13 +1,15 @@
1
1
  class TextMetadataHook < Mumukit::Hook
2
2
  def metadata
3
- { language: {
4
- name: 'text',
5
- icon: { type: 'devicon', name: 'code' },
6
- extension: 'txt',
3
+ {
4
+ language: {
5
+ name: 'text',
6
+ icon: { type: 'devicon', name: 'code' },
7
+ extension: 'txt',
8
+ },
7
9
  test_framework: {
8
10
  name: 'text',
9
11
  test_extension: 'yml'
10
12
  }
11
- } }
13
+ }
12
14
  end
13
15
  end
@@ -1,7 +1,5 @@
1
- module IgnoreCase
2
- class << self
3
- def apply(text)
4
- text.downcase
5
- end
1
+ module TextChecker::IgnoreCase
2
+ def self.apply(text)
3
+ text.downcase
6
4
  end
7
5
  end
@@ -1,7 +1,5 @@
1
- module IgnoreWhitespace
2
- class << self
3
- def apply(text)
4
- text.delete(' ')
5
- end
1
+ module TextChecker::IgnoreWhitespace
2
+ def self.apply(text)
3
+ text.delete(' ')
6
4
  end
7
5
  end
@@ -17,6 +17,24 @@ class TextTestHook < Mumukit::Hook
17
17
  end
18
18
 
19
19
  def parse_test(tests)
20
- YAML.load(tests).map { |example| example.deep_symbolize_keys }
20
+ parsed_test = YAML.load(tests)
21
+ if parsed_test.is_a? Array
22
+ parse_multi_scenario_test(parsed_test)
23
+ else
24
+ parse_single_scenario_test(parsed_test)
25
+ end
26
+ end
27
+
28
+ def parse_single_scenario_test(parsed_test)
29
+ [{ name: 'test',
30
+ postconditions: { equal: {
31
+ expected: parsed_test['equal'],
32
+ ignore_case: parsed_test['ignore_case'].present?,
33
+ ignore_whitespace: parsed_test['ignore_whitespace'].present? } }
34
+ }]
35
+ end
36
+
37
+ def parse_multi_scenario_test(parsed_test)
38
+ parsed_test.map { |example| example.deep_symbolize_keys }
21
39
  end
22
40
  end
@@ -1,20 +1,15 @@
1
1
  require 'mumukit'
2
2
  require 'yaml'
3
- require 'i18n'
4
- require 'active_support/all'
3
+
4
+ I18n.load_translations_path File.join(__dir__, 'locales', '*.yml')
5
5
 
6
6
  Mumukit.runner_name = 'text'
7
7
  Mumukit.configure do |config|
8
8
  config.content_type = 'markdown'
9
9
  end
10
10
 
11
- I18n.load_path += Dir[File.join('.', 'locales', '*.yml')]
12
-
11
+ require_relative './version_hook'
13
12
  require_relative './metadata_hook'
14
13
  require_relative './test_hook'
15
14
 
16
15
  require_relative './checker'
17
-
18
- require_relative './comparers/equality_comparer'
19
- require_relative './options/ignore_whitespace'
20
- require_relative './options/ignore_case'
@@ -0,0 +1,3 @@
1
+ module TextVersionHook
2
+ VERSION = '1.4.0'
3
+ end
metadata CHANGED
@@ -1,99 +1,113 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: mumuki-text-runner
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.0.0
4
+ version: 1.4.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Franco Leonardo Bulgarelli
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2016-09-27 00:00:00.000000000 Z
11
+ date: 2020-07-14 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: mumukit
15
15
  requirement: !ruby/object:Gem::Requirement
16
16
  requirements:
17
- - - ~>
17
+ - - "~>"
18
18
  - !ruby/object:Gem::Version
19
- version: '2.5'
19
+ version: '2.27'
20
20
  type: :runtime
21
21
  prerelease: false
22
22
  version_requirements: !ruby/object:Gem::Requirement
23
23
  requirements:
24
- - - ~>
24
+ - - "~>"
25
25
  - !ruby/object:Gem::Version
26
- version: '2.5'
26
+ version: '2.27'
27
27
  - !ruby/object:Gem::Dependency
28
28
  name: bundler
29
29
  requirement: !ruby/object:Gem::Requirement
30
30
  requirements:
31
- - - ~>
31
+ - - "~>"
32
32
  - !ruby/object:Gem::Version
33
- version: '1.7'
33
+ version: '2.0'
34
34
  type: :development
35
35
  prerelease: false
36
36
  version_requirements: !ruby/object:Gem::Requirement
37
37
  requirements:
38
- - - ~>
38
+ - - "~>"
39
39
  - !ruby/object:Gem::Version
40
- version: '1.7'
40
+ version: '2.0'
41
41
  - !ruby/object:Gem::Dependency
42
42
  name: rake
43
43
  requirement: !ruby/object:Gem::Requirement
44
44
  requirements:
45
- - - ~>
45
+ - - "~>"
46
46
  - !ruby/object:Gem::Version
47
47
  version: '10.0'
48
48
  type: :development
49
49
  prerelease: false
50
50
  version_requirements: !ruby/object:Gem::Requirement
51
51
  requirements:
52
- - - ~>
52
+ - - "~>"
53
53
  - !ruby/object:Gem::Version
54
54
  version: '10.0'
55
55
  - !ruby/object:Gem::Dependency
56
56
  name: rspec
57
57
  requirement: !ruby/object:Gem::Requirement
58
58
  requirements:
59
- - - ~>
59
+ - - "~>"
60
60
  - !ruby/object:Gem::Version
61
61
  version: '3.4'
62
62
  type: :development
63
63
  prerelease: false
64
64
  version_requirements: !ruby/object:Gem::Requirement
65
65
  requirements:
66
- - - ~>
66
+ - - "~>"
67
67
  - !ruby/object:Gem::Version
68
68
  version: '3.4'
69
69
  - !ruby/object:Gem::Dependency
70
70
  name: codeclimate-test-reporter
71
71
  requirement: !ruby/object:Gem::Requirement
72
72
  requirements:
73
- - - ! '>='
73
+ - - ">="
74
74
  - !ruby/object:Gem::Version
75
75
  version: '0'
76
76
  type: :development
77
77
  prerelease: false
78
78
  version_requirements: !ruby/object:Gem::Requirement
79
79
  requirements:
80
- - - ! '>='
80
+ - - ">="
81
+ - !ruby/object:Gem::Version
82
+ version: '0'
83
+ - !ruby/object:Gem::Dependency
84
+ name: simplecov
85
+ requirement: !ruby/object:Gem::Requirement
86
+ requirements:
87
+ - - ">="
88
+ - !ruby/object:Gem::Version
89
+ version: '0'
90
+ type: :development
91
+ prerelease: false
92
+ version_requirements: !ruby/object:Gem::Requirement
93
+ requirements:
94
+ - - ">="
81
95
  - !ruby/object:Gem::Version
82
96
  version: '0'
83
97
  - !ruby/object:Gem::Dependency
84
98
  name: mumukit-bridge
85
99
  requirement: !ruby/object:Gem::Requirement
86
100
  requirements:
87
- - - ~>
101
+ - - "~>"
88
102
  - !ruby/object:Gem::Version
89
- version: '1.3'
103
+ version: '3.1'
90
104
  type: :development
91
105
  prerelease: false
92
106
  version_requirements: !ruby/object:Gem::Requirement
93
107
  requirements:
94
- - - ~>
108
+ - - "~>"
95
109
  - !ruby/object:Gem::Version
96
- version: '1.3'
110
+ version: '3.1'
97
111
  description:
98
112
  email:
99
113
  - franco@mumuki.org
@@ -102,12 +116,19 @@ extensions: []
102
116
  extra_rdoc_files: []
103
117
  files:
104
118
  - lib/checker.rb
105
- - lib/comparers/equality_comparer.rb
119
+ - lib/comparators/comparator.rb
120
+ - lib/comparators/contain_comparator.rb
121
+ - lib/comparators/equality_comparator.rb
122
+ - lib/comparators/regexp_comparator.rb
123
+ - lib/comparators/valid_ip_comparator.rb
124
+ - lib/locales/en.yml
125
+ - lib/locales/es.yml
106
126
  - lib/metadata_hook.rb
107
127
  - lib/options/ignore_case.rb
108
128
  - lib/options/ignore_whitespace.rb
109
129
  - lib/test_hook.rb
110
130
  - lib/text_runner.rb
131
+ - lib/version_hook.rb
111
132
  homepage: http://github.com/mumuki/mumuki-text-server
112
133
  licenses:
113
134
  - MIT
@@ -118,17 +139,17 @@ require_paths:
118
139
  - lib
119
140
  required_ruby_version: !ruby/object:Gem::Requirement
120
141
  requirements:
121
- - - ! '>='
142
+ - - ">="
122
143
  - !ruby/object:Gem::Version
123
144
  version: '0'
124
145
  required_rubygems_version: !ruby/object:Gem::Requirement
125
146
  requirements:
126
- - - ! '>='
147
+ - - ">="
127
148
  - !ruby/object:Gem::Version
128
149
  version: '0'
129
150
  requirements: []
130
151
  rubyforge_project:
131
- rubygems_version: 2.4.5
152
+ rubygems_version: 2.7.7
132
153
  signing_key:
133
154
  specification_version: 4
134
155
  summary: Text Runner for Mumuki
@@ -1,29 +0,0 @@
1
- class EqualityComparer
2
- def initialize(config)
3
- opts = config
4
- opts = { expected: config } unless config.is_a? Hash
5
- @expected = opts[:expected]
6
- parse_options(opts)
7
- end
8
-
9
- def satisfies?(source)
10
- @actual = transform(source)
11
- @actual == @expected
12
- end
13
-
14
- def locale_error_message
15
- I18n.t 'equality.failure', actual: @actual
16
- end
17
-
18
- private
19
-
20
- def transform(source)
21
- @modifiers.inject(source) { |text, modifier| modifier.apply(text) }
22
- end
23
-
24
- def parse_options(config)
25
- @modifiers = []
26
- @modifiers << IgnoreWhitespace if config[:ignore_whitespace]
27
- @modifiers << IgnoreCase if config[:ignore_case]
28
- end
29
- end