mumukit 2.33.0 → 2.36.0
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.
- checksums.yaml +4 -4
- data/lib/locales/es-CL.yml +17 -0
- data/lib/locales/es.yml +2 -2
- data/lib/mumukit.rb +5 -0
- data/lib/mumukit/metatest.rb +2 -1
- data/lib/mumukit/metatest/checker.rb +49 -11
- data/lib/mumukit/metatest/errors.rb +11 -4
- data/lib/mumukit/metatest/test_result_builder.rb +20 -0
- data/lib/mumukit/runtime/info.rb +1 -0
- data/lib/mumukit/server/response_builder.rb +10 -4
- data/lib/mumukit/templates/expectations_hook.rb +4 -6
- data/lib/mumukit/templates/mulang_expectations_hook.rb +1 -0
- data/lib/mumukit/version.rb +1 -1
- metadata +19 -17
checksums.yaml
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
---
|
|
2
2
|
SHA256:
|
|
3
|
-
metadata.gz:
|
|
4
|
-
data.tar.gz:
|
|
3
|
+
metadata.gz: fe34db4bf2fe3ea13c66a83ad0783b868bf12ff315073ee44d3802b74888722f
|
|
4
|
+
data.tar.gz: 1943fa82dc1cfb03c956a9222e5dc7244278d0064bbdd627153273f41129fd3b
|
|
5
5
|
SHA512:
|
|
6
|
-
metadata.gz:
|
|
7
|
-
data.tar.gz:
|
|
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"
|
data/lib/locales/es.yml
CHANGED
|
@@ -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:
|
|
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"
|
data/lib/mumukit.rb
CHANGED
|
@@ -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'
|
data/lib/mumukit/metatest.rb
CHANGED
|
@@ -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
|
-
|
|
30
|
+
build_passed_test_result builder, example, input
|
|
29
31
|
rescue => e
|
|
30
|
-
|
|
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
|
-
|
|
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
|
-
|
|
44
|
-
|
|
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,
|
|
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
|
|
62
|
-
|
|
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
|
|
66
|
-
|
|
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
|
|
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 <
|
|
12
|
+
class Errored < BaseError
|
|
6
13
|
end
|
|
7
14
|
|
|
8
|
-
class Failed <
|
|
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
|
data/lib/mumukit/runtime/info.rb
CHANGED
|
@@ -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
|
-
{
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
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
|
-
|
|
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 =
|
|
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)
|
data/lib/mumukit/version.rb
CHANGED
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.
|
|
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:
|
|
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: '
|
|
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: '
|
|
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: '
|
|
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: '
|
|
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: '
|
|
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: '
|
|
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: '
|
|
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: '
|
|
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.
|
|
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.
|
|
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: '
|
|
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: '
|
|
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: '
|
|
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: '
|
|
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.
|
|
378
|
+
rubygems_version: 3.0.8
|
|
377
379
|
signing_key:
|
|
378
380
|
specification_version: 4
|
|
379
381
|
summary: Mumuki Test Server Development Kit
|