mumukit 2.33.0 → 2.36.0

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 778c86c907fdff758ac82dda4d3de3ca433f3ac64069361af654628f492f217b
4
- data.tar.gz: a371cabe9c539af371f83f8cd064273960fd04bcbc44d17d4b42e48e2d58603d
3
+ metadata.gz: fe34db4bf2fe3ea13c66a83ad0783b868bf12ff315073ee44d3802b74888722f
4
+ data.tar.gz: 1943fa82dc1cfb03c956a9222e5dc7244278d0064bbdd627153273f41129fd3b
5
5
  SHA512:
6
- metadata.gz: d369d8c576d65e2687784af6d8127e1201453e91e340df7a1704bbead73554e6953819bbee446e2e11fda7bf1819c3a692e8710913d760b41752cd73268a2e02
7
- data.tar.gz: 3c8f84c5488fe9f76cc03748d9b7adcb5ab1c47bf4088c6f6d2ebb818db966863560f4933e3ad1e4d6c9f73c266d87224aeff735057bdfdab427675d51078d28
6
+ metadata.gz: a3022b139dccd0a786edc7c02fad38e1c31978f397683e80c2c1f91ae6276084a7d82229022a1be2dc0c85421e1bd0b57853f24433ffa28aefd5f05300ba1f6e
7
+ data.tar.gz: 1790b05e1f0361b501e89bba0c3fdd9cdd07971d41905cb24f1e503bb60f0a18625e4a196bd240251703dca3454db524a6fa43cf19bdb6b0eeffbb38f0f57604
@@ -0,0 +1,17 @@
1
+ es-CL:
2
+ mumukit:
3
+ memory_exceeded: Limite de memoria excedido. ¿Tu programa está alocando demasiada memoria?
4
+ time_exceeded: Limite de tiempo de ejecución de %{limit}s excedido. ¿Tu programa tiene recursión o bucle infinito?
5
+ masked_tempfile_basename: solucion
6
+ interactive:
7
+ check_last_query_equals: "La consulta debería ser '%{expected}' pero fue '%{actual}'"
8
+ check_last_query_fails: "La consulta debería fallar pero pasó"
9
+ check_last_query_matches: "La consulta no cumple con la expresión regular %{regex}"
10
+ check_last_query_outputs: "La consulta debería devolver '%{expected}' pero devolvió '%{actual}'"
11
+ check_last_query_includes: "La consulta debería incluir '%{expected}' pero devolvió '%{actual}'"
12
+ check_last_query_like: "La consulta debería ser como '%{expected}' pero devolvió '%{actual}'"
13
+ check_last_query_passes: "La consulta debería pasar pero falló"
14
+ check_query_fails: "La consulta '%{query}' debería fallar pero pasó"
15
+ check_query_outputs: "La consulta '%{query}' debería devolver '%{expected}' pero devolvió '%{actual}'"
16
+ check_query_passes: "La consulta '%{query}' debería pasar pero falló"
17
+ goal_passed: "El objetivo se cumplió exitosamente"
@@ -1,7 +1,7 @@
1
1
  es:
2
2
  mumukit:
3
3
  memory_exceeded: Limite de memoria excedido. ¿Tu programa está alocando demasiada memoria?
4
- time_exceeded: Limite de tiempo de ejecución de %{limit}s excedido. ¿Tu programa tiene recursión o bucle infinito?
4
+ time_exceeded: Limite de tiempo de ejecución de %{limit}s excedido. ¿Tu programa tiene recursión o bucle infinito?
5
5
  masked_tempfile_basename: solucion
6
6
  interactive:
7
7
  check_last_query_equals: "La consulta debería ser '%{expected}' pero fue '%{actual}'"
@@ -14,4 +14,4 @@ es:
14
14
  check_query_fails: "La consulta '%{query}' debería fallar pero pasó"
15
15
  check_query_outputs: "La consulta '%{query}' debería devolver '%{expected}' pero devolvió '%{actual}'"
16
16
  check_query_passes: "La consulta '%{query}' debería pasar pero falló"
17
- goal_passed: "El objetivo se cumplió exitosamente"
17
+ goal_passed: "El objetivo se cumplió exitosamente"
@@ -1,9 +1,13 @@
1
1
  require 'mumukit/core'
2
2
  require 'mumukit/directives'
3
+ require 'mumukit/inspection'
3
4
  require 'ostruct'
5
+ require 'mulang'
4
6
 
5
7
  I18n.load_translations_path File.join(__dir__, 'locales', '*.yml')
6
8
 
9
+ Mulang::Inspection.register_extension! Mumukit::Inspection::Source
10
+
7
11
  module Mumukit
8
12
  def self.current_runner=(runner)
9
13
  @current_runner = runner
@@ -49,6 +53,7 @@ Mumukit.configure_defaults do |config|
49
53
  config.process_expectations_on_empty_content = false
50
54
  config.run_test_hook_on_empty_test = false
51
55
  config.multifile = false
56
+ config.settings = false
52
57
  end
53
58
 
54
59
  require 'mumukit/content_type'
@@ -3,6 +3,7 @@ end
3
3
 
4
4
  require_relative './metatest/errors'
5
5
  require_relative './metatest/checker'
6
+ require_relative './metatest/test_result_builder'
6
7
  require_relative './metatest/interactive_checker'
7
8
  require_relative './metatest/framework'
8
- require_relative './metatest/identity_runner'
9
+ require_relative './metatest/identity_runner'
@@ -24,10 +24,12 @@ module Mumukit::Metatest
24
24
  ## }
25
25
  ##
26
26
  def check(input, example)
27
+ builder = Mumukit::Metatest::TestResultBuilder.new
28
+
27
29
  check_assertions input, postconditions_for(example), example
28
- [example[:name], :passed, render_success_output(input)]
30
+ build_passed_test_result builder, example, input
29
31
  rescue => e
30
- [example[:name], :failed, render_error_output(input, e.message)]
32
+ build_failed_test_result builder, example, input, e
31
33
  end
32
34
 
33
35
  ## If no postconditions are included in the example,
@@ -36,12 +38,34 @@ module Mumukit::Metatest
36
38
  example[:postconditions] || example.except(:name)
37
39
  end
38
40
 
39
- def render_success_output(value)
41
+ # Implementors may override this method instead of `build_success_output`
42
+ # if they don't want to handle error details.
43
+ #
44
+ # This method is only for backward compatibility. New code
45
+ # should use `build_success_output`.
46
+ def render_success_output(_input)
40
47
  nil
41
48
  end
42
49
 
43
- def render_error_output(value, error)
44
- error
50
+ # Implementors may override this method instead of `build_error_output`
51
+ # if they don't want to handle error details.
52
+ #
53
+ # This method is only for backward compatibility. New code
54
+ # should use `build_error_output`.
55
+ def render_error_output(_input, error_message)
56
+ error_message
57
+ end
58
+
59
+ # Implementors should override this method if they want access to
60
+ # the error details and produce more complex test results
61
+ def build_success_output(builder, _example, input)
62
+ builder.result = render_success_output input
63
+ end
64
+
65
+ # Implementors should override this method if they want access to
66
+ # the error details and produce more complex test results
67
+ def build_error_output(builder, input, _example, error)
68
+ builder.result = render_error_output input, error.message
45
69
  end
46
70
 
47
71
  def check_assertions(input, assertions_hash, example)
@@ -54,16 +78,30 @@ module Mumukit::Metatest
54
78
  send "check_#{assertion_name}", input, assertion_config
55
79
  end
56
80
 
57
- def fail(message)
58
- raise Mumukit::Metatest::Failed, message
81
+ def fail(message, details: nil)
82
+ raise Mumukit::Metatest::Failed.new(message, details)
83
+ end
84
+
85
+ def abort(message, details: nil)
86
+ raise Mumukit::Metatest::Aborted.new(message, details)
87
+ end
88
+
89
+ def error(message, details: nil)
90
+ raise Mumukit::Metatest::Errored.new(message, details)
59
91
  end
60
92
 
61
- def abort(message)
62
- raise Mumukit::Metatest::Aborted, message
93
+ def build_passed_test_result(builder, example, input)
94
+ builder.title = example[:name]
95
+ builder.status = :passed
96
+ build_success_output builder, example, input
97
+ builder.build
63
98
  end
64
99
 
65
- def error(message)
66
- raise Mumukit::Metatest::Errored, message
100
+ def build_failed_test_result(builder, example, input, e)
101
+ builder.title = example[:name]
102
+ builder.status = :failed
103
+ build_error_output builder, example, input, e
104
+ builder.build
67
105
  end
68
106
  end
69
107
  end
@@ -1,10 +1,17 @@
1
1
  module Mumukit::Metatest
2
- class Aborted < StandardError
2
+ class BaseError < StandardError
3
+ attr_reader :details
4
+ def initialize(message = "", details = nil)
5
+ super(message)
6
+ @details = details
7
+ end
8
+ end
9
+ class Aborted < BaseError
3
10
  end
4
11
 
5
- class Errored < StandardError
12
+ class Errored < BaseError
6
13
  end
7
14
 
8
- class Failed < StandardError
15
+ class Failed < BaseError
9
16
  end
10
- end
17
+ end
@@ -0,0 +1,20 @@
1
+ module Mumukit::Metatest
2
+ class TestResultBuilder
3
+ attr_accessor :title, :status, :result, :summary_type, :summary_message
4
+
5
+ def summary
6
+ {type: summary_type.presence, message: summary_message.presence}.compact
7
+ end
8
+
9
+ def build
10
+ raise 'missing status' unless status
11
+ raise "invalid #{status}" unless status.passed? || status.failed?
12
+
13
+ if summary_message.present? || summary_type.present?
14
+ [title, status, result, summary]
15
+ else
16
+ [title, status, result]
17
+ end
18
+ end
19
+ end
20
+ end
@@ -19,6 +19,7 @@ module Mumukit::RuntimeInfo
19
19
  stateful: Mumukit.config.stateful,
20
20
  multifile: Mumukit.config.multifile,
21
21
  preprocessor: Mumukit.config.preprocessor_enabled,
22
+ settings: Mumukit.config.settings,
22
23
 
23
24
  sandboxed: any_hook_include?([:test, :query], Mumukit::Templates::WithIsolatedEnvironment),
24
25
  structured: any_hook_include?([:test], Mumukit::Templates::WithStructuredResults) || Mumukit.config.structured
@@ -58,10 +58,16 @@ class Mumukit::Server::ResponseBuilder
58
58
  end
59
59
 
60
60
  def structured_base_response(test_results)
61
- {testResults: test_results[0].map { |title, status, result|
62
- {title: title,
63
- status: status,
64
- result: result} }}
61
+ {
62
+ testResults: test_results[0].map do |title, status, result, summary|
63
+ { summary: summary&.compact.presence }
64
+ .compact
65
+ .merge(
66
+ title: title,
67
+ status: status,
68
+ result: result)
69
+ end
70
+ }
65
71
  end
66
72
 
67
73
  def unstructured_base_response(test_results)
@@ -1,5 +1,3 @@
1
- require 'mumukit/inspection'
2
-
3
1
  module Mumukit
4
2
  class Templates::ExpectationsHook < Mumukit::Hook
5
3
  SOURCE_EXPECTATION_EVALUATORS = {
@@ -21,8 +19,8 @@ module Mumukit
21
19
  private
22
20
 
23
21
  def compile_expectations(request)
24
- expectations = {ast: [], source: [], exceptions: []}
25
- request[:expectations].each do |it|
22
+ expectations = {ast: [], source: [], exceptions: [], custom: request[:custom_expectations] }
23
+ request[:expectations].to_a.each do |it|
26
24
  fill_expectations it.deep_symbolize_keys, expectations
27
25
  end
28
26
  expectations
@@ -40,7 +38,7 @@ module Mumukit
40
38
  end
41
39
 
42
40
  def compile_expectation(expectation)
43
- Mumukit::Inspection::Expectation.parse(expectation).as_v2.to_h
41
+ Mulang::Expectation.parse(expectation).as_v2.to_h
44
42
  end
45
43
 
46
44
  def compile_source_expectation(expectation)
@@ -62,7 +60,7 @@ module Mumukit
62
60
  end
63
61
 
64
62
  def self.parse(expectation)
65
- parsed = Mumukit::Inspection::Expectation.parse(expectation)
63
+ parsed = Mulang::Expectation.parse(expectation)
66
64
  evaluator = parse_evaluator(parsed.inspection)
67
65
  new parsed, evaluator
68
66
  end
@@ -18,6 +18,7 @@ module Mumukit
18
18
  def compile_mulang_analysis(request, expectations)
19
19
  mulang_code(request).analysis(
20
20
  expectations: expectations[:ast],
21
+ customExpectations: expectations[:custom],
21
22
  smellsSet: {
22
23
  tag: 'AllSmells',
23
24
  exclude: (expectations[:exceptions] + default_smell_exceptions)
@@ -1,3 +1,3 @@
1
1
  module Mumukit
2
- VERSION = '2.33.0'
2
+ VERSION = '2.36.0'
3
3
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: mumukit
3
3
  version: !ruby/object:Gem::Version
4
- version: 2.33.0
4
+ version: 2.36.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: 2019-05-06 00:00:00.000000000 Z
11
+ date: 2020-08-29 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: bundler
@@ -16,42 +16,42 @@ dependencies:
16
16
  requirements:
17
17
  - - "~>"
18
18
  - !ruby/object:Gem::Version
19
- version: '1.7'
19
+ version: '2.0'
20
20
  type: :development
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: '1.7'
26
+ version: '2.0'
27
27
  - !ruby/object:Gem::Dependency
28
28
  name: rake
29
29
  requirement: !ruby/object:Gem::Requirement
30
30
  requirements:
31
31
  - - "~>"
32
32
  - !ruby/object:Gem::Version
33
- version: '10.0'
33
+ version: '12.3'
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: '10.0'
40
+ version: '12.3'
41
41
  - !ruby/object:Gem::Dependency
42
42
  name: rspec
43
43
  requirement: !ruby/object:Gem::Requirement
44
44
  requirements:
45
45
  - - "~>"
46
46
  - !ruby/object:Gem::Version
47
- version: '2'
47
+ version: '3.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
- version: '2'
54
+ version: '3.0'
55
55
  - !ruby/object:Gem::Dependency
56
56
  name: codeclimate-test-reporter
57
57
  requirement: !ruby/object:Gem::Requirement
@@ -100,14 +100,14 @@ dependencies:
100
100
  requirements:
101
101
  - - "~>"
102
102
  - !ruby/object:Gem::Version
103
- version: '1.4'
103
+ version: '2.0'
104
104
  type: :runtime
105
105
  prerelease: false
106
106
  version_requirements: !ruby/object:Gem::Requirement
107
107
  requirements:
108
108
  - - "~>"
109
109
  - !ruby/object:Gem::Version
110
- version: '1.4'
110
+ version: '2.0'
111
111
  - !ruby/object:Gem::Dependency
112
112
  name: activesupport
113
113
  requirement: !ruby/object:Gem::Requirement
@@ -170,14 +170,14 @@ dependencies:
170
170
  requirements:
171
171
  - - "~>"
172
172
  - !ruby/object:Gem::Version
173
- version: '0.46'
173
+ version: '0.71'
174
174
  type: :runtime
175
175
  prerelease: false
176
176
  version_requirements: !ruby/object:Gem::Requirement
177
177
  requirements:
178
178
  - - "~>"
179
179
  - !ruby/object:Gem::Version
180
- version: '0.46'
180
+ version: '0.71'
181
181
  - !ruby/object:Gem::Dependency
182
182
  name: sinatra-cross_origin
183
183
  requirement: !ruby/object:Gem::Requirement
@@ -212,28 +212,28 @@ dependencies:
212
212
  requirements:
213
213
  - - "~>"
214
214
  - !ruby/object:Gem::Version
215
- version: '4.0'
215
+ version: '5.1'
216
216
  type: :runtime
217
217
  prerelease: false
218
218
  version_requirements: !ruby/object:Gem::Requirement
219
219
  requirements:
220
220
  - - "~>"
221
221
  - !ruby/object:Gem::Version
222
- version: '4.0'
222
+ version: '5.1'
223
223
  - !ruby/object:Gem::Dependency
224
224
  name: mumukit-inspection
225
225
  requirement: !ruby/object:Gem::Requirement
226
226
  requirements:
227
227
  - - "~>"
228
228
  - !ruby/object:Gem::Version
229
- version: '3.1'
229
+ version: '5.0'
230
230
  type: :runtime
231
231
  prerelease: false
232
232
  version_requirements: !ruby/object:Gem::Requirement
233
233
  requirements:
234
234
  - - "~>"
235
235
  - !ruby/object:Gem::Version
236
- version: '3.1'
236
+ version: '5.0'
237
237
  - !ruby/object:Gem::Dependency
238
238
  name: mumukit-core
239
239
  requirement: !ruby/object:Gem::Requirement
@@ -291,6 +291,7 @@ extra_rdoc_files: []
291
291
  files:
292
292
  - bin/limit
293
293
  - lib/locales/en.yml
294
+ - lib/locales/es-CL.yml
294
295
  - lib/locales/es.yml
295
296
  - lib/locales/pt.yml
296
297
  - lib/mumukit.rb
@@ -317,6 +318,7 @@ files:
317
318
  - lib/mumukit/metatest/framework.rb
318
319
  - lib/mumukit/metatest/identity_runner.rb
319
320
  - lib/mumukit/metatest/interactive_checker.rb
321
+ - lib/mumukit/metatest/test_result_builder.rb
320
322
  - lib/mumukit/request_validation_error.rb
321
323
  - lib/mumukit/runner.rb
322
324
  - lib/mumukit/runtime.rb
@@ -373,7 +375,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
373
375
  - !ruby/object:Gem::Version
374
376
  version: '0'
375
377
  requirements: []
376
- rubygems_version: 3.0.3
378
+ rubygems_version: 3.0.8
377
379
  signing_key:
378
380
  specification_version: 4
379
381
  summary: Mumuki Test Server Development Kit