most 0.7.3
Sign up to get free protection for your applications and to get access to all the features.
- data/Copying.txt +679 -0
- data/History.txt +15 -0
- data/Manifest.txt +95 -0
- data/PostInstall.txt +6 -0
- data/Rakefile +44 -0
- data/Readme.rdoc +146 -0
- data/bin/most +31 -0
- data/lib/most.rb +52 -0
- data/lib/most/context.rb +244 -0
- data/lib/most/core.rb +171 -0
- data/lib/most/di/container.rb +148 -0
- data/lib/most/di/proxy.rb +55 -0
- data/lib/most/di/service.rb +63 -0
- data/lib/most/di/service_factory.rb +40 -0
- data/lib/most/environment.rb +67 -0
- data/lib/most/executor.rb +80 -0
- data/lib/most/helpers/array.rb +31 -0
- data/lib/most/helpers/hash.rb +25 -0
- data/lib/most/helpers/kernel.rb +35 -0
- data/lib/most/helpers/memory_out.rb +93 -0
- data/lib/most/helpers/numeric.rb +59 -0
- data/lib/most/helpers/object.rb +65 -0
- data/lib/most/helpers/symbol.rb +31 -0
- data/lib/most/interfaces/meta_programmable.rb +59 -0
- data/lib/most/starter.rb +126 -0
- data/lib/most/structures/box.rb +199 -0
- data/lib/most/structures/submission.rb +117 -0
- data/lib/most/structures/test_case.rb +173 -0
- data/lib/most/structures/test_runner.rb +103 -0
- data/lib/most/structures/types/options.rb +67 -0
- data/lib/most/structures/types/path.rb +39 -0
- data/lib/most/structures/types/report.rb +84 -0
- data/lib/most/submissions/cpp_memory_out_sample.rb +34 -0
- data/lib/most/submissions/cpp_sample.rb +36 -0
- data/lib/most/submissions/cpp_timeout_sample.rb +34 -0
- data/lib/most/submissions/cs_sample.rb +36 -0
- data/lib/most/submissions/erlang_sample.rb +36 -0
- data/lib/most/submissions/haskell_sample.rb +36 -0
- data/lib/most/submissions/java_sample.rb +36 -0
- data/lib/most/submissions/lisp_sample.rb +32 -0
- data/lib/most/submissions/lua_sample.rb +36 -0
- data/lib/most/submissions/ocaml_sample.rb +36 -0
- data/lib/most/submissions/pascal_sample.rb +36 -0
- data/lib/most/submissions/perl_sample.rb +32 -0
- data/lib/most/submissions/php_sample.rb +32 -0
- data/lib/most/submissions/python_sample.rb +32 -0
- data/lib/most/submissions/ruby_sample.rb +32 -0
- data/lib/most/submissions/vb_sample.rb +36 -0
- data/lib/most/tasks/general/win/cs.rb +60 -0
- data/lib/most/tasks/general/win/erlang.rb +86 -0
- data/lib/most/tasks/general/win/gcc.rb +39 -0
- data/lib/most/tasks/general/win/haskell.rb +75 -0
- data/lib/most/tasks/general/win/java.rb +72 -0
- data/lib/most/tasks/general/win/lisp.rb +59 -0
- data/lib/most/tasks/general/win/lua.rb +75 -0
- data/lib/most/tasks/general/win/ocaml.rb +77 -0
- data/lib/most/tasks/general/win/pascal.rb +73 -0
- data/lib/most/tasks/general/win/perl.rb +61 -0
- data/lib/most/tasks/general/win/php.rb +59 -0
- data/lib/most/tasks/general/win/python.rb +59 -0
- data/lib/most/tasks/general/win/ruby.rb +61 -0
- data/lib/most/tasks/general/win/vb.rb +60 -0
- data/lib/most/tasks/general/win/vc.rb +79 -0
- data/lib/most/tasks/general/win/vs.rb +52 -0
- data/samples/problem/solutions/cpp/main.cpp +9 -0
- data/samples/problem/solutions/cpp/tests.yml +19 -0
- data/samples/problem/solutions/cs/main.cs +17 -0
- data/samples/problem/solutions/cs/tests.yml +19 -0
- data/samples/problem/solutions/erlang/main.erl +2 -0
- data/samples/problem/solutions/erlang/tests.yml +19 -0
- data/samples/problem/solutions/haskell/main.hs +5 -0
- data/samples/problem/solutions/haskell/tests.yml +19 -0
- data/samples/problem/solutions/java/Main.java +14 -0
- data/samples/problem/solutions/java/tests.yml +19 -0
- data/samples/problem/solutions/lisp/main.lisp +1 -0
- data/samples/problem/solutions/lisp/tests.yml +19 -0
- data/samples/problem/solutions/lua/main.lua +4 -0
- data/samples/problem/solutions/lua/tests.yml +19 -0
- data/samples/problem/solutions/ocaml/main.ml +3 -0
- data/samples/problem/solutions/ocaml/tests.yml +19 -0
- data/samples/problem/solutions/pascal/main.pas +5 -0
- data/samples/problem/solutions/pascal/tests.yml +19 -0
- data/samples/problem/solutions/perl/main.pl +2 -0
- data/samples/problem/solutions/perl/tests.yml +19 -0
- data/samples/problem/solutions/php/main.php +1 -0
- data/samples/problem/solutions/php/tests.yml +19 -0
- data/samples/problem/solutions/python/main.py +1 -0
- data/samples/problem/solutions/python/tests.yml +19 -0
- data/samples/problem/solutions/ruby/main.rb +1 -0
- data/samples/problem/solutions/ruby/tests.yml +19 -0
- data/samples/problem/solutions/vb/main.vb +14 -0
- data/samples/problem/solutions/vb/tests.yml +19 -0
- data/samples/time_memory/solutions/cpp/main.cpp +21 -0
- data/samples/time_memory/solutions/cpp/tests.yml +19 -0
- data/tasks/samples.rb +31 -0
- metadata +242 -0
@@ -0,0 +1,32 @@
|
|
1
|
+
submission do
|
2
|
+
name 'Simple Python Submission'
|
3
|
+
|
4
|
+
entities :executable => path('main.py')
|
5
|
+
|
6
|
+
options :tests => {:report => {:differences => true, :time => true, :specs => true},
|
7
|
+
:steps => {:break => {:unsuccessful => true}}}
|
8
|
+
|
9
|
+
YAML.load_file('tests.yml').each_with_index do |specs, i|
|
10
|
+
|
11
|
+
add_test TestCase do
|
12
|
+
name "Test #{i + 1}"
|
13
|
+
|
14
|
+
input specs[:input]
|
15
|
+
output specs[:output]
|
16
|
+
|
17
|
+
runner TestRunner do
|
18
|
+
name 'Python Runner'
|
19
|
+
|
20
|
+
add_step Proc do
|
21
|
+
timeout specs[:time] do
|
22
|
+
total_memory_out specs[:memory] do
|
23
|
+
rake_clean 'win:python:run', entities[:executable], input
|
24
|
+
end
|
25
|
+
end
|
26
|
+
end
|
27
|
+
|
28
|
+
end
|
29
|
+
end
|
30
|
+
|
31
|
+
end
|
32
|
+
end
|
@@ -0,0 +1,32 @@
|
|
1
|
+
submission do
|
2
|
+
name 'Simple Ruby Submission'
|
3
|
+
|
4
|
+
entities :executable => path('main.rb')
|
5
|
+
|
6
|
+
options :tests => {:report => {:differences => true, :time => true, :specs => true},
|
7
|
+
:steps => {:break => {:unsuccessful => true}}}
|
8
|
+
|
9
|
+
YAML.load_file('tests.yml').each_with_index do |specs, i|
|
10
|
+
|
11
|
+
add_test TestCase do
|
12
|
+
name "Test #{i + 1}"
|
13
|
+
|
14
|
+
input specs[:input]
|
15
|
+
output specs[:output]
|
16
|
+
|
17
|
+
runner TestRunner do
|
18
|
+
name 'Ruby Runner'
|
19
|
+
|
20
|
+
add_step Proc do
|
21
|
+
timeout specs[:time] do
|
22
|
+
total_memory_out specs[:memory] do
|
23
|
+
rake_clean 'win:ruby:run', entities[:executable], input
|
24
|
+
end
|
25
|
+
end
|
26
|
+
end
|
27
|
+
|
28
|
+
end
|
29
|
+
end
|
30
|
+
|
31
|
+
end
|
32
|
+
end
|
@@ -0,0 +1,36 @@
|
|
1
|
+
submission do
|
2
|
+
name 'Simple Visual Basic Submission'
|
3
|
+
|
4
|
+
entities :source_file => path('main.vb'), :executable => path('main.exe')
|
5
|
+
|
6
|
+
options :tests => {:report => {:differences => true, :time => true, :specs => true},
|
7
|
+
:steps => {:break => {:unsuccessful => true}}}
|
8
|
+
|
9
|
+
YAML.load_file('tests.yml').each_with_index do |specs, i|
|
10
|
+
|
11
|
+
add_test TestCase do
|
12
|
+
name "Test #{i + 1}"
|
13
|
+
|
14
|
+
input specs[:input]
|
15
|
+
output specs[:output]
|
16
|
+
|
17
|
+
runner TestRunner do
|
18
|
+
name 'Visual Basic Runner'
|
19
|
+
|
20
|
+
add_step Proc do
|
21
|
+
rake_clean 'win:vb:compile', entities[:source_file]
|
22
|
+
end
|
23
|
+
|
24
|
+
add_step Proc do
|
25
|
+
timeout specs[:time] do
|
26
|
+
total_memory_out specs[:memory] do
|
27
|
+
rake_clean 'win:vb:run', entities[:executable], input
|
28
|
+
end
|
29
|
+
end
|
30
|
+
end
|
31
|
+
|
32
|
+
end
|
33
|
+
end
|
34
|
+
|
35
|
+
end
|
36
|
+
end
|
@@ -0,0 +1,60 @@
|
|
1
|
+
# Most - Modular Open Software Tester.
|
2
|
+
# Copyright (C) 2009 Dmitrii Toksaitov
|
3
|
+
#
|
4
|
+
# This file is part of Most.
|
5
|
+
#
|
6
|
+
# Most is free software: you can redistribute it and/or modify
|
7
|
+
# it under the terms of the GNU General Public License as published by
|
8
|
+
# the Free Software Foundation, either version 3 of the License, or
|
9
|
+
# (at your option) any later version.
|
10
|
+
#
|
11
|
+
# Most is distributed in the hope that it will be useful,
|
12
|
+
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
13
|
+
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
14
|
+
# GNU General Public License for more details.
|
15
|
+
#
|
16
|
+
# You should have received a copy of the GNU General Public License
|
17
|
+
# along with Most. If not, see <http://www.gnu.org/licenses/>.
|
18
|
+
|
19
|
+
require 'rake/clean'
|
20
|
+
|
21
|
+
namespace :win do
|
22
|
+
namespace :cs do
|
23
|
+
|
24
|
+
task :compile, :source, :needs => ['win:vs:find_vsvars'] do |task, args|
|
25
|
+
path = ENV['VSVARS']
|
26
|
+
|
27
|
+
preparation_command = path.nil? ? '' : "call \"#{path}\" &&"
|
28
|
+
compilation_command = %{#{preparation_command} csc /optimize+ #{args.source}}
|
29
|
+
|
30
|
+
service = Most::SERVICES[:open4]
|
31
|
+
service.popen4(compilation_command) do |stdin, stdout, stderr, pid|
|
32
|
+
$stdout.puts(stdout.read())
|
33
|
+
$stderr.puts(stderr.read())
|
34
|
+
end
|
35
|
+
end
|
36
|
+
|
37
|
+
task :run, :executable, :input do |task, args|
|
38
|
+
args.with_defaults(:input => '')
|
39
|
+
|
40
|
+
service = Most::SERVICES[:open4]
|
41
|
+
service.popen4(args.executable) do |stdin, stdout, stderr, pid|
|
42
|
+
Most::GLOBALS[:pid] = pid
|
43
|
+
|
44
|
+
unless args.input.is_a?(Most::Path)
|
45
|
+
stdin.write(args.input)
|
46
|
+
stdin.close()
|
47
|
+
end
|
48
|
+
|
49
|
+
process_stdout = stdout.read()
|
50
|
+
process_stderr = stderr.read()
|
51
|
+
|
52
|
+
Most::GLOBALS[:output] = process_stdout
|
53
|
+
|
54
|
+
$stdout.puts(process_stdout)
|
55
|
+
$stderr.puts(process_stderr)
|
56
|
+
end
|
57
|
+
end
|
58
|
+
|
59
|
+
end
|
60
|
+
end
|
@@ -0,0 +1,86 @@
|
|
1
|
+
# Most - Modular Open Software Tester.
|
2
|
+
# Copyright (C) 2009 Dmitrii Toksaitov
|
3
|
+
#
|
4
|
+
# This file is part of Most.
|
5
|
+
#
|
6
|
+
# Most is free software: you can redistribute it and/or modify
|
7
|
+
# it under the terms of the GNU General Public License as published by
|
8
|
+
# the Free Software Foundation, either version 3 of the License, or
|
9
|
+
# (at your option) any later version.
|
10
|
+
#
|
11
|
+
# Most is distributed in the hope that it will be useful,
|
12
|
+
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
13
|
+
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
14
|
+
# GNU General Public License for more details.
|
15
|
+
#
|
16
|
+
# You should have received a copy of the GNU General Public License
|
17
|
+
# along with Most. If not, see <http://www.gnu.org/licenses/>.
|
18
|
+
|
19
|
+
require 'rake/clean'
|
20
|
+
|
21
|
+
CLEAN.include('*.dump')
|
22
|
+
|
23
|
+
namespace :win do
|
24
|
+
namespace :erlang do
|
25
|
+
|
26
|
+
task :prepare do
|
27
|
+
erlang_home = nil
|
28
|
+
Most::DIRECTORIES[:vendors].each do |directory|
|
29
|
+
possible_path = File.join(directory, 'erlang')
|
30
|
+
erlang_home = possible_path if File.directory?(possible_path)
|
31
|
+
end
|
32
|
+
|
33
|
+
unless erlang_home.nil?
|
34
|
+
bin_path = File.join(erlang_home, 'bin')
|
35
|
+
erts_bin_path = File.join(erlang_home, 'erts', 'bin')
|
36
|
+
|
37
|
+
ini_files = [File.join(bin_path, 'erl.ini').gsub(/[\/|\\]/, '\\\\\\\\'),
|
38
|
+
File.join(erts_bin_path, 'erl.ini').gsub(/[\/|\\]/, '\\\\\\\\')]
|
39
|
+
|
40
|
+
ENV['PATH'] ||= ''; ENV['PATH'] = "#{bin_path};#{ENV['PATH']}"
|
41
|
+
|
42
|
+
ini_files.each do |path|
|
43
|
+
File.open(path, 'w+') do |io|
|
44
|
+
io.write "[erlang]\n" +
|
45
|
+
"Bindir=#{erts_bin_path}\n" +
|
46
|
+
"Progname=erl\n" +
|
47
|
+
"Rootdir=#{erlang_home}\n"
|
48
|
+
end rescue nil
|
49
|
+
end
|
50
|
+
end
|
51
|
+
end
|
52
|
+
|
53
|
+
task :compile, :source, :needs => [:prepare] do |task, args|
|
54
|
+
compilation_command = %{erlc #{args.source}}
|
55
|
+
|
56
|
+
service = Most::SERVICES[:open4]
|
57
|
+
service.popen4(compilation_command) do |stdin, stdout, stderr, pid|
|
58
|
+
$stdout.puts(stdout.read())
|
59
|
+
$stderr.puts(stderr.read())
|
60
|
+
end
|
61
|
+
end
|
62
|
+
|
63
|
+
task :run, :entry_function, :input do |task, args|
|
64
|
+
args.with_defaults(:entry_function => '', :input => '')
|
65
|
+
|
66
|
+
service = Most::SERVICES[:open4]
|
67
|
+
service.popen4(%{erl -noshell -run #{args.entry_function} -s init stop}) do |stdin, stdout, stderr, pid|
|
68
|
+
Most::GLOBALS[:pid] = pid
|
69
|
+
|
70
|
+
unless args.input.is_a?(Most::Path)
|
71
|
+
stdin.write(args.input)
|
72
|
+
stdin.close()
|
73
|
+
end
|
74
|
+
|
75
|
+
process_stdout = stdout.read()
|
76
|
+
process_stderr = stderr.read()
|
77
|
+
|
78
|
+
Most::GLOBALS[:output] = process_stdout
|
79
|
+
|
80
|
+
$stdout.puts(process_stdout)
|
81
|
+
$stderr.puts(process_stderr)
|
82
|
+
end
|
83
|
+
end
|
84
|
+
|
85
|
+
end
|
86
|
+
end
|
@@ -0,0 +1,39 @@
|
|
1
|
+
# Most - Modular Open Software Tester.
|
2
|
+
# Copyright (C) 2009 Dmitrii Toksaitov
|
3
|
+
#
|
4
|
+
# This file is part of Most.
|
5
|
+
#
|
6
|
+
# Most is free software: you can redistribute it and/or modify
|
7
|
+
# it under the terms of the GNU General Public License as published by
|
8
|
+
# the Free Software Foundation, either version 3 of the License, or
|
9
|
+
# (at your option) any later version.
|
10
|
+
#
|
11
|
+
# Most is distributed in the hope that it will be useful,
|
12
|
+
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
13
|
+
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
14
|
+
# GNU General Public License for more details.
|
15
|
+
#
|
16
|
+
# You should have received a copy of the GNU General Public License
|
17
|
+
# along with Most. If not, see <http://www.gnu.org/licenses/>.
|
18
|
+
|
19
|
+
require 'rake/clean'
|
20
|
+
|
21
|
+
namespace :win do
|
22
|
+
namespace :gcc do
|
23
|
+
|
24
|
+
task :prepare do
|
25
|
+
gcc_home = nil
|
26
|
+
Most::DIRECTORIES[:vendors].each do |directory|
|
27
|
+
possible_path = File.join(directory, 'gcc')
|
28
|
+
gcc_home = possible_path if File.directory?(possible_path)
|
29
|
+
end
|
30
|
+
|
31
|
+
unless gcc_home.nil?
|
32
|
+
bin_path = File.join(gcc_home, 'bin')
|
33
|
+
|
34
|
+
ENV['PATH'] ||= ''; ENV['PATH'] = "#{bin_path};#{ENV['PATH']}"
|
35
|
+
end
|
36
|
+
end
|
37
|
+
|
38
|
+
end
|
39
|
+
end
|
@@ -0,0 +1,75 @@
|
|
1
|
+
# Most - Modular Open Software Tester.
|
2
|
+
# Copyright (C) 2009 Dmitrii Toksaitov
|
3
|
+
#
|
4
|
+
# This file is part of Most.
|
5
|
+
#
|
6
|
+
# Most is free software: you can redistribute it and/or modify
|
7
|
+
# it under the terms of the GNU General Public License as published by
|
8
|
+
# the Free Software Foundation, either version 3 of the License, or
|
9
|
+
# (at your option) any later version.
|
10
|
+
#
|
11
|
+
# Most is distributed in the hope that it will be useful,
|
12
|
+
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
13
|
+
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
14
|
+
# GNU General Public License for more details.
|
15
|
+
#
|
16
|
+
# You should have received a copy of the GNU General Public License
|
17
|
+
# along with Most. If not, see <http://www.gnu.org/licenses/>.
|
18
|
+
|
19
|
+
require 'rake/clean'
|
20
|
+
|
21
|
+
CLEAN.include('*.hi')
|
22
|
+
CLEAN.include('*.o')
|
23
|
+
|
24
|
+
namespace :win do
|
25
|
+
namespace :haskell do
|
26
|
+
|
27
|
+
task :prepare do
|
28
|
+
haskell_home = nil
|
29
|
+
Most::DIRECTORIES[:vendors].each do |directory|
|
30
|
+
possible_path = File.join(directory, 'haskell')
|
31
|
+
haskell_home = possible_path if File.directory?(possible_path)
|
32
|
+
end
|
33
|
+
|
34
|
+
unless haskell_home.nil?
|
35
|
+
bin_path = File.join(haskell_home, 'bin')
|
36
|
+
extralibs_bin_path = File.join(haskell_home, 'extralibs', 'bin')
|
37
|
+
|
38
|
+
ENV['PATH'] ||= ''; ENV['PATH'] = "#{bin_path};#{extralibs_bin_path};#{ENV['PATH']}"
|
39
|
+
end
|
40
|
+
end
|
41
|
+
|
42
|
+
task :compile, :source, :needs => [:prepare] do |task, args|
|
43
|
+
compilation_command = %{ghc -O #{args.source}}
|
44
|
+
|
45
|
+
service = Most::SERVICES[:open4]
|
46
|
+
service.popen4(compilation_command) do |stdin, stdout, stderr, pid|
|
47
|
+
$stdout.puts(stdout.read())
|
48
|
+
$stderr.puts(stderr.read())
|
49
|
+
end
|
50
|
+
end
|
51
|
+
|
52
|
+
task :run, :executable, :input do |task, args|
|
53
|
+
args.with_defaults(:input => '')
|
54
|
+
|
55
|
+
service = Most::SERVICES[:open4]
|
56
|
+
service.popen4(args.executable) do |stdin, stdout, stderr, pid|
|
57
|
+
Most::GLOBALS[:pid] = pid
|
58
|
+
|
59
|
+
unless args.input.is_a?(Most::Path)
|
60
|
+
stdin.write(args.input)
|
61
|
+
stdin.close()
|
62
|
+
end
|
63
|
+
|
64
|
+
process_stdout = stdout.read()
|
65
|
+
process_stderr = stderr.read()
|
66
|
+
|
67
|
+
Most::GLOBALS[:output] = process_stdout
|
68
|
+
|
69
|
+
$stdout.puts(process_stdout)
|
70
|
+
$stderr.puts(process_stderr)
|
71
|
+
end
|
72
|
+
end
|
73
|
+
|
74
|
+
end
|
75
|
+
end
|
@@ -0,0 +1,72 @@
|
|
1
|
+
# Most - Modular Open Software Tester.
|
2
|
+
# Copyright (C) 2009 Dmitrii Toksaitov
|
3
|
+
#
|
4
|
+
# This file is part of Most.
|
5
|
+
#
|
6
|
+
# Most is free software: you can redistribute it and/or modify
|
7
|
+
# it under the terms of the GNU General Public License as published by
|
8
|
+
# the Free Software Foundation, either version 3 of the License, or
|
9
|
+
# (at your option) any later version.
|
10
|
+
#
|
11
|
+
# Most is distributed in the hope that it will be useful,
|
12
|
+
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
13
|
+
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
14
|
+
# GNU General Public License for more details.
|
15
|
+
#
|
16
|
+
# You should have received a copy of the GNU General Public License
|
17
|
+
# along with Most. If not, see <http://www.gnu.org/licenses/>.
|
18
|
+
|
19
|
+
require 'rake/clean'
|
20
|
+
|
21
|
+
namespace :win do
|
22
|
+
namespace :java do
|
23
|
+
|
24
|
+
task :prepare do
|
25
|
+
java_home = nil
|
26
|
+
Most::DIRECTORIES[:vendors].each do |directory|
|
27
|
+
possible_path = File.join(directory, 'java')
|
28
|
+
java_home = possible_path if File.directory?(possible_path)
|
29
|
+
end
|
30
|
+
|
31
|
+
unless java_home.nil?
|
32
|
+
bin_path = File.join(java_home, 'bin')
|
33
|
+
|
34
|
+
ENV['PATH'] ||= ''; ENV['PATH'] = "#{bin_path};#{ENV['PATH']}"
|
35
|
+
ENV['JAVA_HOME'] ||= ''; ENV['JAVA_HOME'] = java_home
|
36
|
+
end
|
37
|
+
end
|
38
|
+
|
39
|
+
task :compile, :source, :needs => [:prepare] do |task, args|
|
40
|
+
compilation_command = %{javac #{args.source}}
|
41
|
+
|
42
|
+
service = Most::SERVICES[:open4]
|
43
|
+
service.popen4(compilation_command) do |stdin, stdout, stderr, pid|
|
44
|
+
$stdout.puts(stdout.read())
|
45
|
+
$stderr.puts(stderr.read())
|
46
|
+
end
|
47
|
+
end
|
48
|
+
|
49
|
+
task :run, :executable, :input do |task, args|
|
50
|
+
args.with_defaults(:input => '')
|
51
|
+
|
52
|
+
service = Most::SERVICES[:open4]
|
53
|
+
service.popen4(%{java #{args.executable}}) do |stdin, stdout, stderr, pid|
|
54
|
+
Most::GLOBALS[:pid] = pid
|
55
|
+
|
56
|
+
unless args.input.is_a?(Most::Path)
|
57
|
+
stdin.write(args.input)
|
58
|
+
stdin.close()
|
59
|
+
end
|
60
|
+
|
61
|
+
process_stdout = stdout.read()
|
62
|
+
process_stderr = stderr.read()
|
63
|
+
|
64
|
+
Most::GLOBALS[:output] = process_stdout
|
65
|
+
|
66
|
+
$stdout.puts(process_stdout)
|
67
|
+
$stderr.puts(process_stderr)
|
68
|
+
end
|
69
|
+
end
|
70
|
+
|
71
|
+
end
|
72
|
+
end
|
@@ -0,0 +1,59 @@
|
|
1
|
+
# Most - Modular Open Software Tester.
|
2
|
+
# Copyright (C) 2009 Dmitrii Toksaitov
|
3
|
+
#
|
4
|
+
# This file is part of Most.
|
5
|
+
#
|
6
|
+
# Most is free software: you can redistribute it and/or modify
|
7
|
+
# it under the terms of the GNU General Public License as published by
|
8
|
+
# the Free Software Foundation, either version 3 of the License, or
|
9
|
+
# (at your option) any later version.
|
10
|
+
#
|
11
|
+
# Most is distributed in the hope that it will be useful,
|
12
|
+
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
13
|
+
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
14
|
+
# GNU General Public License for more details.
|
15
|
+
#
|
16
|
+
# You should have received a copy of the GNU General Public License
|
17
|
+
# along with Most. If not, see <http://www.gnu.org/licenses/>.
|
18
|
+
|
19
|
+
require 'rake/clean'
|
20
|
+
|
21
|
+
namespace :win do
|
22
|
+
namespace :lisp do
|
23
|
+
|
24
|
+
task :prepare do
|
25
|
+
lisp_home = nil
|
26
|
+
Most::DIRECTORIES[:vendors].each do |directory|
|
27
|
+
possible_path = File.join(directory, 'lisp')
|
28
|
+
lisp_home = possible_path if File.directory?(possible_path)
|
29
|
+
end
|
30
|
+
|
31
|
+
unless lisp_home.nil?
|
32
|
+
ENV['PATH'] ||= ''; ENV['PATH'] = "#{lisp_home};#{ENV['PATH']}"
|
33
|
+
end
|
34
|
+
end
|
35
|
+
|
36
|
+
task :run, :executable, :input, :needs => [:prepare] do |task, args|
|
37
|
+
args.with_defaults(:input => '')
|
38
|
+
|
39
|
+
service = Most::SERVICES[:open4]
|
40
|
+
service.popen4(%{clisp #{args.executable}}) do |stdin, stdout, stderr, pid|
|
41
|
+
Most::GLOBALS[:pid] = pid
|
42
|
+
|
43
|
+
unless args.input.is_a?(Most::Path)
|
44
|
+
stdin.write(args.input)
|
45
|
+
stdin.close()
|
46
|
+
end
|
47
|
+
|
48
|
+
process_stdout = stdout.read()
|
49
|
+
process_stderr = stderr.read()
|
50
|
+
|
51
|
+
Most::GLOBALS[:output] = process_stdout
|
52
|
+
|
53
|
+
$stdout.puts(process_stdout)
|
54
|
+
$stderr.puts(process_stderr)
|
55
|
+
end
|
56
|
+
end
|
57
|
+
|
58
|
+
end
|
59
|
+
end
|