mumuki-javascript-runner 1.5.0 → 1.8.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: cb2c3425cccd2c1dd04911c424109da786ab4cd9a6969904f168db188f625045
4
- data.tar.gz: e849e9592b35944b138969f9596004471574bfea4eae1612fbaf53bd3f0a8a2e
3
+ metadata.gz: 643e7004181714b9389b777b05343707d8c83af4b2aa5f409b433b7a290af5f7
4
+ data.tar.gz: 42fb43b4425a6ff90c7522ae1de68980c4f0683e80dfb083db70d89be6f8dd85
5
5
  SHA512:
6
- metadata.gz: 875f71c53f6566579d4efe71dfe4e2522e3286f538d80957d5bfadf4875a8d003a536db763a20e3fa283af80bea54a351d6a5a3f27693549e610e8fe9ff050f5
7
- data.tar.gz: 162afef619eaff6248339f5c8d9703816434174bb65de82b25e7fed7de6572b1663c7f6ec447b1f929cd407e5d32bc8d9756365d9ff2f60b3d8eb448b46fabac
6
+ metadata.gz: 40a7062a6a43c6caf6a4623c7977d3b4e052d06a830f2c8e3242c4d49706e9afb73cfb47d09a6e1674acbda7cc897c5730bd9c6351e5e4e1dad289b4a74d622a
7
+ data.tar.gz: 72ff4deb4365eef74e042ad1edfe9203e85cd379c8d7307d269348d8521e442153d9751c8ce985ae905d4b9b0627f54d1217f05dd83c7b1121b1539cad226522
@@ -0,0 +1,25 @@
1
+ class JavascriptFeedbackHook < Mumukit::Hook
2
+ def run!(request, results)
3
+ content = request.content
4
+ test_results = test_failure_messages results
5
+
6
+ JavascriptExplainer.new.explain(content, test_results)
7
+ end
8
+
9
+ def test_failure_messages(results)
10
+ structured_test_results = results.test_results[0]
11
+ if structured_test_results.is_a? Array
12
+ structured_test_results.select { |it| it[1].failed? }.map { |it| it[2] }.join("\n")
13
+ else
14
+ ''
15
+ end
16
+ end
17
+
18
+ class JavascriptExplainer < Mumukit::Explainer
19
+ def explain_is_not_defined(_, test_results)
20
+ (/([a-zA-Z0-9_]+) is not defined/.match test_results).try do |it|
21
+ {identifier: it[1]}
22
+ end
23
+ end
24
+ end
25
+ end
@@ -1,10 +1,13 @@
1
1
  require 'mumukit'
2
2
 
3
+ I18n.load_translations_path File.join(__dir__, 'locales', '*.yml')
4
+
3
5
  Mumukit.runner_name = 'javascript'
4
6
  Mumukit.configure do |config|
5
- config.docker_image = 'mumuki/mumuki-mocha-worker'
7
+ config.docker_image = 'mumuki/mumuki-mocha-worker:2.0'
6
8
  config.structured = true
7
9
  config.stateful = true
10
+ config.content_type = 'markdown'
8
11
  end
9
12
 
10
13
  require_relative './version'
@@ -12,5 +15,6 @@ require_relative './metadata_hook'
12
15
  require_relative './validation_hook'
13
16
  require_relative './test_hook'
14
17
  require_relative './expectations_hook'
18
+ require_relative './feedback_hook'
15
19
  require_relative './query_hook'
16
- require_relative './try_hook'
20
+ require_relative './try_hook'
@@ -0,0 +1,2 @@
1
+ en:
2
+ is_not_defined: "it looks like you are using `%{identifier}` but it is not defined. Perhaps you have misspelled it or you need to define it"
@@ -0,0 +1,2 @@
1
+ es:
2
+ is_not_defined: "parece que estás usando `%{identifier}` pero no está definido. ¿Puede que hayas escrito mal su nombre o tengas que definirlo?"
@@ -0,0 +1,2 @@
1
+ pt:
2
+ is_not_defined: "Parece que você usa %{identifier} mas não está indefinido. Você digitou o nome errado ou precisa defini-lo"
data/lib/query_hook.rb CHANGED
@@ -95,11 +95,15 @@ javascript
95
95
 
96
96
  def error_patterns
97
97
  [
98
- Mumukit::ErrorPattern::Errored.new(syntax_error_regexp)
98
+ Mumukit::ErrorPattern::Errored.new(error_regexp)
99
99
  ]
100
100
  end
101
101
 
102
- def syntax_error_regexp
103
- /(?=\X*SyntaxError)(solution.*\n)|SyntaxError.*\n\K at \X*/
102
+ def error_types
103
+ '(Reference|Syntax|Type)Error'
104
+ end
105
+
106
+ def error_regexp
107
+ /(?=\X*#{error_types})(solution.*\n|var __mumuki_query_result__ = )|#{error_types}.*\n\K\X*/
104
108
  end
105
109
  end
data/lib/test_hook.rb CHANGED
@@ -1,13 +1,12 @@
1
1
  class JavascriptTestHook < Mumukit::Templates::FileHook
2
2
  isolated true
3
3
  structured true, separator: '!!!JAVASCRIPT-MUMUKI-OUTPUT!!!'
4
+ line_number_offset 3, include_extra: true
4
5
 
5
6
  def compile_file_content(request)
6
7
  <<javascript
7
8
  'use strict';
8
-
9
- var assert = require('assert');
10
-
9
+ let assert = require('assert');
11
10
  #{request.extra}
12
11
  #{request.content}
13
12
  describe('', function() {
@@ -32,11 +31,19 @@ javascript
32
31
  transform(super['tests'])
33
32
  end
34
33
 
34
+ def post_process_unstructured_result(file, result, status)
35
+ if status.errored?
36
+ [content_type.code(result.gsub(/(SyntaxError: .*\n)(.|\n)*/) { $1 }), status]
37
+ else
38
+ super
39
+ end
40
+ end
41
+
35
42
  def transform(examples)
36
43
  examples.map { |e| [e['fullTitle'], e['err'].present? ? :failed : :passed, parse_out(e['err'])] }
37
44
  end
38
45
 
39
46
  def parse_out(exception)
40
- exception.present? ? exception['message'] : ''
47
+ exception.present? ? content_type.code(exception['message']) : ''
41
48
  end
42
49
  end
@@ -1,7 +1,7 @@
1
1
  class JavascriptValidationHook < Mumukit::Hook
2
2
  def validate!(request)
3
3
  matches = request_matches?(request) do |it|
4
- it =~ /(^|\W+)(require|process|os|fs|eval|cluster|v8|vm|tty|tls|root|global|crypto|stream|events)(\W+|$)/
4
+ it =~ /(^|[^_[[:alnum:]]]+)(require|process|os|fs|eval|cluster|v8|vm|tty|tls|root|global|crypto|stream|events)([^_[[:alnum:]]]+|$)/
5
5
  end
6
6
  raise Mumukit::RequestValidationError, "You can not use #{$2} here" if matches
7
7
  end
data/lib/version.rb CHANGED
@@ -1,3 +1,3 @@
1
1
  module JavascriptVersionHook
2
- VERSION = '1.5.0'
2
+ VERSION = '1.8.0'
3
3
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: mumuki-javascript-runner
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.5.0
4
+ version: 1.8.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-02-26 00:00:00.000000000 Z
11
+ date: 2021-03-25 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: mumukit
@@ -16,28 +16,28 @@ dependencies:
16
16
  requirements:
17
17
  - - "~>"
18
18
  - !ruby/object:Gem::Version
19
- version: '2.30'
19
+ version: '2.40'
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.30'
26
+ version: '2.40'
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
@@ -102,7 +102,11 @@ extensions: []
102
102
  extra_rdoc_files: []
103
103
  files:
104
104
  - lib/expectations_hook.rb
105
+ - lib/feedback_hook.rb
105
106
  - lib/javascript_runner.rb
107
+ - lib/locales/en.yml
108
+ - lib/locales/es.yml
109
+ - lib/locales/pt.yml
106
110
  - lib/metadata_hook.rb
107
111
  - lib/query_hook.rb
108
112
  - lib/test_hook.rb
@@ -128,7 +132,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
128
132
  - !ruby/object:Gem::Version
129
133
  version: '0'
130
134
  requirements: []
131
- rubygems_version: 3.0.2
135
+ rubygems_version: 3.0.3
132
136
  signing_key:
133
137
  specification_version: 4
134
138
  summary: Javascript Runner for Mumuki