mesa_test 0.0.6 → 0.0.7

Sign up to get free protection for your applications and to get access to all the features.
Files changed (4) hide show
  1. checksums.yaml +4 -4
  2. data/bin/mesa_test +82 -5
  3. data/lib/mesa_test.rb +106 -87
  4. metadata +11 -11
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 8533c5c3c8af772964a99845cd8abd2817751ab3
4
- data.tar.gz: 2f8feb258166635e7a81bca31416dd6cfb39cace
3
+ metadata.gz: c6bc6d6b90192e1bfd95d973de84b1ad786cbbe6
4
+ data.tar.gz: e5a9666a5fe7fd43f075e0b997f8d8896c202061
5
5
  SHA512:
6
- metadata.gz: 0fa938f95c4f08ee751ecefa4676c218886a8d696174735efab051549eb3c85e8d63d668927d2b2666cec36ce361c263ea72c877f0585e033ebcc1efd5cffbde
7
- data.tar.gz: 8eb82567379f5b4f038c4fed068601be5a5b6bed19ad23d8461dbb8a7cf921f5011ac51691096d70a5da99a650ec6c8a68b4018a83b3a2321ebd78daee5df01a
6
+ metadata.gz: 6aa98742c529c1ac14b2565083da3598f7a91173300a3b08b9e621ea0ef32f6dfc4918227dc5e25feeadfaaf8dc0b0b15180f99ccfa22592324731902a65869e
7
+ data.tar.gz: 7658a4c416bf42afb70ca55d70ed97b53d3379eec2557b6e9edd216ff99296e712ae21fe10014b8053debb9545e4d1a9c8f154aa063119b0e30e103e58ce7e7b
data/bin/mesa_test CHANGED
@@ -1,10 +1,10 @@
1
1
  #! /usr/bin/env ruby
2
2
 
3
- require_relative '../lib/mesa_test'
3
+ # require_relative '../lib/mesa_test'
4
+ require 'mesa_test'
4
5
  require 'thor'
5
6
 
6
7
  class MesaTest < Thor
7
-
8
8
  desc "setup [CONFIG_FILE]", "Setup MesaTestHub config file."
9
9
  long_desc <<-LONGDESC
10
10
  If optional CONFIG_FILE is provided, search for that file and load it
@@ -16,8 +16,6 @@ class MesaTest < Thor
16
16
  MesaTestSubmitter.new_from_config(config_file: config_file).setup
17
17
  end
18
18
 
19
-
20
-
21
19
  desc "test_one MESA_DIR TEST_CASE", "run, check, and submit one test case"
22
20
  long_desc <<-LONGDESC
23
21
  Run and check TEST_CASE, which resides in MESA_DIR/star/test_suite. Then
@@ -36,7 +34,6 @@ class MesaTest < Thor
36
34
  option :log, type: :boolean, default: true
37
35
  option :submit, type: :boolean, default: true
38
36
  def test_one(mesa_dir, test_case_name)
39
-
40
37
  if options[:submit]
41
38
  s = MesaTestSubmitter.new_from_config
42
39
  unless options[:force]
@@ -132,6 +129,86 @@ class MesaTest < Thor
132
129
  s.submit_all(m) if options[:submit]
133
130
  end
134
131
 
132
+ desc 'submit_one MESA_DIR TEST_CASE', 'submit one completed test case'
133
+ long_desc <<-LONGDESC
134
+ Load complete test case data from existing YAML file and submit to MESA
135
+
136
+ With --force option, skip confirmation of computer details, assuming values
137
+ in ~/.mesa_test.yml are correct.
138
+ LONGDESC
139
+ option :force, type: :boolean
140
+ def submit_one(mesa_dir, test_case_name)
141
+ s = MesaTestSubmitter.new_from_config
142
+ unless options[:force]
143
+ s.setup unless s.confirm_computer_data
144
+ end
145
+
146
+ check_user_and_computer s
147
+
148
+ # set up and check mesa directory (doesn't really check to see if it's
149
+ # installed, just to see if it has a version number and a test suite
150
+ # directory)
151
+ m = Mesa.new mesa_dir: mesa_dir
152
+ unless m.installed?
153
+ raise MesaDirError, "Invalid MESA_DIR: #{mesa_dir}. Please download " \
154
+ 'and install a valid MESA version or provide the path to one.'
155
+ end
156
+ m.load_test_source_data
157
+
158
+ # make sure the test case is valid
159
+ t = m.find_test_case test_case_name: test_case_name
160
+ if t.nil?
161
+ msg = "No such test case, #{test_case_name} found in any of "
162
+ msg << MesaTestCase.modules.map do |mod|
163
+ File.join(m.test_suite_dir(mod: mod), 'do1_test_source')
164
+ end.join(' or ')
165
+ msg << '.'
166
+ raise TestCaseDirError, msg
167
+ end
168
+
169
+ # load test results
170
+ t.load_results
171
+
172
+ # submit results
173
+ print 'Submitting results to ' + s.base_uri + '... '
174
+ s.submit(t)
175
+ puts "Done.\n"
176
+ end
177
+
178
+ desc 'submit_all MESA_DIR', 'submit all [previously run] test cases'
179
+ long_desc <<-LONGDESC
180
+ Load results for all test cases residing in MESA_DIR/star/test_suite. Then
181
+ submit results to MesaTestHub. Specifically, loads and submits all tests
182
+ detailed in MESA_DIR/star/test_suite/do1_test_source.
183
+
184
+ With --force option, skip confirmation of computer details, assuming values
185
+ in ~/.mesa_test.yml are correct.
186
+ LONGDESC
187
+ option :force, type: :boolean
188
+ def submit_all(mesa_dir)
189
+ s = MesaTestSubmitter.new_from_config
190
+ unless options[:force]
191
+ s.setup unless s.confirm_computer_data
192
+ end
193
+ check_user_and_computer s
194
+
195
+ # set up and check mesa directory (doesn't really check to see if it's
196
+ # installed, just to see if it has a version number and a test suite
197
+ # directory)
198
+ m = Mesa.new mesa_dir: mesa_dir
199
+ unless m.installed?
200
+ raise MesaDirError, "Invalid MESA_DIR: #{mesa_dir}. Please download " \
201
+ 'and install a valid MESA version or provide the path to one.'
202
+ end
203
+ m.load_test_source_data
204
+
205
+ # run all tests
206
+ m.each_test_load_results
207
+
208
+ # submit all tests
209
+ s.submit_all(m)
210
+ end
211
+
135
212
 
136
213
  desc "install VERSION_NUMBER MESA_DIR", 'download and install mesa release '+
137
214
  'VERSION_NUMBER to directory MESA_DIR'
data/lib/mesa_test.rb CHANGED
@@ -13,12 +13,11 @@ class TestCaseDirError < StandardError; end
13
13
  class InvalidDataType < StandardError; end
14
14
 
15
15
  class MesaTestSubmitter
16
-
17
16
  # set up config file for computer
18
17
  def setup
19
18
  update do |s|
20
- puts "This wizard will guide you through setting up a computer profile
21
- and default data for test case submissions to MESATestHub. You
19
+ shell.say 'This wizard will guide you through setting up a computer
20
+ profile and default data for test case submissions to MESATestHub. You
22
21
  will be able to confirm entries at the end. Default/current values are always
23
22
  shown in parentheses at the end of a prompt. Pressing enter will accept the
24
23
  default values.
@@ -26,8 +25,7 @@ default values.
26
25
  To submit to MESATestHub, a valid computer name, email address, and password
27
26
  are all required. All other data are useful, but optional. Any data
28
27
  transferred to MESATestHub will be encrypted via HTTPS, but be warned that your
29
- e-mail and password will be stored in plain text.
30
- "
28
+ e-mail and password will be stored in plain text.'
31
29
  # Get computer name
32
30
  response = shell.ask("What is the name of this computer (required)? "+
33
31
  "(#{s.computer_name}):", color = :blue)
@@ -122,13 +120,14 @@ e-mail and password will be stored in plain text.
122
120
  @password = password || ''
123
121
  @platform = platform
124
122
  if @platform.nil?
125
- @platform = if OS.osx?
126
- 'macOS'
127
- elsif OS.linux?
128
- 'Linux'
129
- else
130
- ''
131
- end
123
+ @platform =
124
+ if OS.osx?
125
+ 'macOS'
126
+ elsif OS.linux?
127
+ 'Linux'
128
+ else
129
+ ''
130
+ end
132
131
  end
133
132
  @platform_version = platform_version || ''
134
133
  @processor = processor || ''
@@ -182,7 +181,7 @@ e-mail and password will be stored in plain text.
182
181
  # if you try different compilers
183
182
  #
184
183
  # Note this is NOT checked! The server really only uses the test-by-test
185
- # quantities (platform version, compiler, complier version) and the
184
+ # quantities (platform version, compiler, compiler version) and the
186
185
  # computer name. Once the computer is found (by the name) all the other
187
186
  # data is assumed to be fixed. The others... probably shouldn't be here,
188
187
  # but remain so you can confirm that the computer on the web server is the
@@ -257,32 +256,33 @@ e-mail and password will be stored in plain text.
257
256
  computer_name: computer_name
258
257
  }.to_json
259
258
 
260
- JSON.load(https.request(request).body).to_hash
259
+ JSON.parse(https.request(request).body).to_hash
261
260
  end
262
261
 
263
262
  # attempt to post to MesaTestHub with test_case parameters
264
263
  # returns true if the id is in the returned JSON (indicating success)
265
264
  # otherwise returns false (maybe failed in authorization or in finding
266
265
  # computer or test case) No error thrown for failure, though.
267
- def submit(test_case, verbose=true)
266
+ def submit(test_case, verbose = false)
268
267
  uri = URI.parse(base_uri + '/test_instances/submit.json')
269
268
  https = Net::HTTP.new(uri.hostname, uri.port)
270
269
  https.use_ssl = true if base_uri.include? 'https'
271
270
 
272
- request = Net::HTTP::Post.new(uri,
273
- initheader = {'Content-Type' => 'application/json'})
271
+ request = Net::HTTP::Post.new(
272
+ uri,
273
+ initheader = { 'Content-Type' => 'application/json' }
274
+ )
274
275
  request.body = submit_params(test_case).to_json
275
276
 
276
- puts "\n" if verbose
277
- puts JSON.load(request.body).to_hash if verbose
277
+ # puts "\n" if verbose
278
+ # puts JSON.parse(request.body).to_hash if verbose
278
279
 
279
280
  response = https.request request
280
- puts JSON.load(response.body).to_hash if verbose
281
- not response.kind_of? Net::HTTPUnprocessableEntity
281
+ # puts JSON.parse(response.body).to_hash if verbose
282
+ !response.is_a? Net::HTTPUnprocessableEntity
282
283
  end
283
284
 
284
285
  def submit_all(mesa)
285
- uri=URI.parse(base_uri + '/test_instances/submit.json')
286
286
  submitted_cases = []
287
287
  unsubmitted_cases = []
288
288
  mesa.test_names.each do |mod, test_names|
@@ -317,10 +317,8 @@ e-mail and password will be stored in plain text.
317
317
  # return true if all cases were submitted
318
318
  submitted_cases.length == mesa.test_names.length
319
319
  end
320
-
321
320
  end
322
321
 
323
-
324
322
  class Mesa
325
323
  attr_reader :mesa_dir, :test_data, :test_names, :test_cases, :shell
326
324
 
@@ -329,7 +327,7 @@ class Mesa
329
327
  success = system("svn co -r #{version_number} "+
330
328
  "svn://svn.code.sf.net/p/mesa/code/trunk #{new_mesa_dir}")
331
329
  unless success
332
- raise MesaDirError, "Encountered a problem in downlaod mesa " +
330
+ raise MesaDirError, "Encountered a problem in download mesa " +
333
331
  "revision #{version_number}."
334
332
  end
335
333
  Mesa.new(mesa_dir: new_mesa_dir)
@@ -378,7 +376,6 @@ class Mesa
378
376
  FileUtils.rm_rf mesa_dir
379
377
  end
380
378
 
381
-
382
379
  ## TEST SUITE METHODS
383
380
 
384
381
  def check_mod(mod)
@@ -452,9 +449,9 @@ class Mesa
452
449
  if mod == :all
453
450
  # look through all loaded modules for desired test case name, return
454
451
  # FIRST found (assuming no name duplication across modules)
455
- @test_names.each do |mod, names|
456
- if names.include? test_case_name
457
- return @test_cases[mod][test_case_name]
452
+ @test_names.each do |this_mod, mod_names|
453
+ if mod_names.include? test_case_name
454
+ return @test_cases[this_mod][test_case_name]
458
455
  end
459
456
  end
460
457
  # didn't find any matches, return nil
@@ -484,9 +481,8 @@ class Mesa
484
481
  each_test_clean(mod: mod)
485
482
 
486
483
  if mod == :all
487
- MesaTestCase.modules.each do
488
- |this_mod| each_test_run_and_diff(mod: this_mod,
489
- log_results: log_results)
484
+ MesaTestCase.modules.each do |this_mod|
485
+ each_test_run_and_diff(mod: this_mod, log_results: log_results)
490
486
  end
491
487
  else
492
488
  test_names[mod].each do |test_name|
@@ -497,6 +493,18 @@ class Mesa
497
493
  end
498
494
  end
499
495
 
496
+ def each_test_load_results(mod: :all)
497
+ if mod == :all
498
+ MesaTestCase.modules.each do |this_mod|
499
+ each_test_load_results(mod: this_mod)
500
+ end
501
+ else
502
+ test_names[mod].each do |test_name|
503
+ test_cases[mod][test_name].load_results
504
+ end
505
+ end
506
+ end
507
+
500
508
  # note that this only changes MESA_DIR for subprocesses launched from ruby
501
509
  # the old value of MESA_DIR will persist after the ruby process ends
502
510
  def set_mesa_dir
@@ -547,7 +555,6 @@ class Mesa
547
555
  end
548
556
  end
549
557
 
550
-
551
558
  class MesaTestCase
552
559
  attr_reader :test_name, :mesa_dir, :mesa, :success_string, :final_model,
553
560
  :failure_msg, :success_msg, :photo, :runtime_seconds,
@@ -631,8 +638,10 @@ class MesaTestCase
631
638
  end
632
639
 
633
640
  def add_datum(datum_name, datum_type)
634
- raise InvalidDataType, "Invalid data type: #{datum_type}. Must be one of "+
635
- data_types.join(', ') + '.' unless data_types.include? datum_type.to_sym
641
+ unless data_types.include? datum_type.to_sym
642
+ raise InvalidDataType, "Invalid data type: #{datum_type}. Must be one "\
643
+ 'of ' + data_types.join(', ') + '.'
644
+ end
636
645
  @data[datum_name] = datum_type
637
646
  @data_names << datum_name
638
647
  end
@@ -667,8 +676,8 @@ class MesaTestCase
667
676
  FileUtils.rm_f 'binary_history.data'
668
677
  FileUtils.rm_f 'out.txt'
669
678
  if File.directory? File.join('star_history','history_out')
670
- shell.say "Removing all files of the form history_out* from star_history",
671
- color = :blue
679
+ shell.say 'Removing all files of the form history_out* from ' \
680
+ 'star_history', :blue
672
681
  FileUtils.rm_f Dir.glob(File.join('star_history', 'history_out', '*'))
673
682
  end
674
683
  if File.directory? File.join('star_profile', 'profiles_out')
@@ -686,7 +695,7 @@ class MesaTestCase
686
695
  @test_omp_num_threads = omp_num_threads
687
696
  in_dir do
688
697
  FileUtils.touch '.running'
689
- shell.say("building and running #{test_name}", color = :blue)
698
+ shell.say("building and running #{test_name}", :blue)
690
699
  puts ''
691
700
  build_and_run
692
701
  FileUtils.rm '.running'
@@ -772,13 +781,13 @@ class MesaTestCase
772
781
  def write_failure_message
773
782
  msg = "******************** #{failure_msg[@failure_type]} " +
774
783
  "********************"
775
- log_message(msg, color = :red)
784
+ log_message(msg, :red)
776
785
  end
777
786
 
778
787
  # write success message to log file
779
788
  def write_success_msg(success_type)
780
789
  msg = 'PASS ' + success_msg[success_type]
781
- log_message(msg, color = :green)
790
+ log_message(msg, :green)
782
791
  end
783
792
 
784
793
  # used as return value for run or photo test. Logs failure to text file, and
@@ -810,8 +819,8 @@ class MesaTestCase
810
819
  # report runtime and clean up
811
820
  run_finish = Time.now
812
821
  @runtime_seconds = (run_finish - run_start).to_i
813
- shell.say "Finished with ./rn; runtime = #{@runtime_seconds} seconds.",
814
- color = :blue
822
+ shell.say("Finished with ./rn; runtime = #{@runtime_seconds} seconds.",
823
+ :blue)
815
824
  append_and_rm_err
816
825
 
817
826
 
@@ -855,7 +864,6 @@ class MesaTestCase
855
864
  else
856
865
  return succeed(:run_test_string)
857
866
  end
858
-
859
867
  end
860
868
 
861
869
  # prepare for and do restart, check results, and return pass/fail status
@@ -893,88 +901,98 @@ class MesaTestCase
893
901
  # assumes we are in the test case directory. Should only be called
894
902
  # in the context of an `in_dir` block.
895
903
 
896
-
897
904
  # first clean and make... worried about shell compatibility since we
898
905
  # aren't forcing bash. Hopefully '>' for redirecting output is pretty
899
906
  # universal
907
+ simple_clean
908
+ mk
909
+
910
+ # remove old final model if it exists
911
+ remove_final_model
912
+
913
+ # only check restart/photo if we get through run successfully
914
+ check_restart if check_run
915
+ end
916
+
917
+ # append contents of err.txt to end of out.txt, then delete err.txt
918
+ def append_and_rm_err(outfile = 'out.txt', errfile = 'err.txt')
919
+ err_contents = File.read(errfile)
920
+ display_errors(err_contents)
921
+ log_errors(err_contents, outfile)
922
+ FileUtils.rm errfile
923
+ end
924
+
925
+ def display_errors(err_contents)
926
+ return unless err_contents.strip.empty?
927
+ shell.say("\nERRORS", :red)
928
+ puts err_contents
929
+ shell.say("END OF ERRORS", :red)
930
+ end
931
+
932
+ def log_errors(err_contents, outfile)
933
+ File.open(outfile, 'a') { |f_out| f_out.write(err_contents) }
934
+ shell.say("appended to #{outfile})\n", :red)
935
+ end
936
+
937
+ def simple_clean
900
938
  puts './clean'
901
939
  unless system('./clean')
902
- raise TestCaseDirError, "Encountered an error when running `clean` in " +
940
+ raise TestCaseDirError, 'Encountered an error when running `clean` in ' +
903
941
  "#{Dir.getwd} for test case #{test_name}."
904
942
  end
943
+ end
905
944
 
945
+ def mk
906
946
  puts './mk > mk.txt'
907
947
  unless system('./mk > mk.txt')
908
- raise TestCaseDirError, "Encountered an error when running `mk` in " +
948
+ raise TestCaseDirError, 'Encountered an error when running `mk` in ' +
909
949
  "#{Dir.getwd} for test case #{test_name}."
910
950
  end
911
951
  FileUtils.rm 'mk.txt'
912
-
913
- # remove final model if it already exists
914
- unless final_model.nil?
915
- FileUtils.rm final_model if File.exist? final_model
916
- end
917
-
918
- if check_run
919
- # only check restart/photo if we get through run successfully
920
- check_restart
921
- end
922
952
  end
923
953
 
924
- # append contents of err.txt to end of out.txt, then delete err.txt
925
- def append_and_rm_err(outfile='out.txt', errfile='err.txt')
926
- File.open(outfile, 'a') do |f_out|
927
- err_contents = File.read(errfile)
928
- unless err_contents.strip.empty?
929
- shell.say "\nERRORS", color = :red
930
- puts err_contents
931
- shell.say "END OF ERRORS (appended to #{outfile})", color = :red
932
- puts ''
933
- f_out.write(err_contents)
934
- end
935
- end
936
- FileUtils.rm errfile
954
+ def remove_final_model
955
+ # remove final model if it already exists
956
+ return unless final_model
957
+ return unless File.exist?(final_model)
958
+ FileUtils.rm(final_model)
937
959
  end
938
-
939
960
  end
940
961
 
941
-
942
962
  ################################
943
963
  # GENERAL METHODS #
944
964
  ################################
945
965
 
946
-
947
966
  # cd into a new directory, execute a block whose return value is either
948
967
  # true or false. Either way, cd back to original directory. Raise an
949
968
  # exception if the block failed (returned false or nil)
950
969
  def visit_and_check(new_dir, exception, message)
951
970
  cwd = Dir.getwd
952
- shell.say "Leaving #{cwd}", color = :blue
953
- puts ""
954
- shell.say "Entering #{new_dir}.", color = :blue
971
+ shell.say "Leaving #{cwd}", :blue
972
+ puts ''
973
+ shell.say "Entering #{new_dir}.", :blue
955
974
  Dir.chdir(new_dir)
956
975
  success = yield if block_given?
957
- shell.say "Leaving #{new_dir}", color = :blue
958
- puts ""
959
- shell.say "Entering #{cwd}.", color = :blue
976
+ shell.say "Leaving #{new_dir}", :blue
977
+ puts ''
978
+ shell.say "Entering #{cwd}.", :blue
960
979
  Dir.chdir(cwd)
961
- unless success
962
- raise exception, message
963
- end
980
+ return unless success
981
+ raise exception, message
964
982
  end
965
983
 
966
984
  # cd into a new directory, execute a block, then cd back into original
967
985
  # directory
968
986
  def visit_dir(new_dir)
969
987
  cwd = Dir.getwd
970
- shell.say "Leaving #{cwd}", color = :blue
988
+ shell.say "Leaving #{cwd}", :blue
971
989
  puts ""
972
- shell.say "Entering #{new_dir}.", color = :blue
990
+ shell.say "Entering #{new_dir}.", :blue
973
991
  Dir.chdir(new_dir)
974
992
  yield if block_given?
975
- shell.say "Leaving #{new_dir}", color = :blue
993
+ shell.say "Leaving #{new_dir}", :blue
976
994
  puts ""
977
- shell.say "Entering #{cwd}.", color = :blue
995
+ shell.say "Entering #{cwd}.", :blue
978
996
  Dir.chdir(cwd)
979
997
  end
980
998
 
@@ -991,12 +1009,13 @@ def generate_seeds_rb(mesa_dir, outfile)
991
1009
  f.puts " version_added: #{m.version_number},"
992
1010
  # no comma on last one
993
1011
  if test_case_name == m.test_names[-1]
994
- f.puts " }"
1012
+ f.puts(' }')
995
1013
  else
996
- f.puts " },"
1014
+ f.puts(' }')
997
1015
  end
998
1016
  end
999
1017
  f.puts ' ]'
1000
1018
  f.puts ')'
1001
1019
  end
1002
1020
  end
1021
+
metadata CHANGED
@@ -1,57 +1,57 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: mesa_test
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.6
4
+ version: 0.0.7
5
5
  platform: ruby
6
6
  authors:
7
7
  - William Wolf
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2017-11-13 00:00:00.000000000 Z
11
+ date: 2017-11-14 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
- name: os
14
+ name: json
15
15
  requirement: !ruby/object:Gem::Requirement
16
16
  requirements:
17
17
  - - "~>"
18
18
  - !ruby/object:Gem::Version
19
- version: '1.0'
19
+ version: '2.0'
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: '1.0'
26
+ version: '2.0'
27
27
  - !ruby/object:Gem::Dependency
28
- name: thor
28
+ name: os
29
29
  requirement: !ruby/object:Gem::Requirement
30
30
  requirements:
31
31
  - - "~>"
32
32
  - !ruby/object:Gem::Version
33
- version: '0.19'
33
+ version: '1.0'
34
34
  type: :runtime
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: '0.19'
40
+ version: '1.0'
41
41
  - !ruby/object:Gem::Dependency
42
- name: json
42
+ name: thor
43
43
  requirement: !ruby/object:Gem::Requirement
44
44
  requirements:
45
45
  - - "~>"
46
46
  - !ruby/object:Gem::Version
47
- version: '2.0'
47
+ version: '0.19'
48
48
  type: :runtime
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.0'
54
+ version: '0.19'
55
55
  description: mesa_test is a command-line interface for running the test suites in
56
56
  MESA and submitting them to the companion website MESATestHub.
57
57
  email: wmwolf@asu.edu