summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorNaoto Ono <onoto1998@gmail.com>2024-03-25 13:20:04 +0900
committerNobuyoshi Nakada <nobu@ruby-lang.org>2024-04-02 21:55:32 +0900
commit3d1d1435c1556f8a86ed6d483b586b844e39f896 (patch)
tree0f892f6d898d4e03a88dd2e5853c4c78ca42f664
parent5903fdf43eb208f9087eea4873407cc93d3f92a3 (diff)
Launchable: Refactor the logic of JsonStreamWriter
-rw-r--r--tool/lib/test/unit.rb50
-rw-r--r--tool/test/testunit/test_launchable.rb57
2 files changed, 72 insertions, 35 deletions
diff --git a/tool/lib/test/unit.rb b/tool/lib/test/unit.rb
index 01c53e929c..a748090b26 100644
--- a/tool/lib/test/unit.rb
+++ b/tool/lib/test/unit.rb
@@ -1409,14 +1409,16 @@ module Test
if writer && test_path && status
# Occasionally, the file writing operation may be paused, especially when `--repeat-count` is specified.
# In such cases, we proceed to execute the operation here.
- writer.write_object do
- writer.write_key_value('testPath', test_path)
- writer.write_key_value('status', status)
- writer.write_key_value('duration', time)
- writer.write_key_value('createdAt', Time.now.to_s)
- writer.write_key_value('stderr', e)
- writer.write_key_value('stdout', nil)
- end
+ writer.write_object(
+ {
+ testPath: test_path,
+ status: status,
+ duration: time,
+ createdAt: Time.now.to_s,
+ stderr: e,
+ stdout: nil
+ }
+ )
end
end
@@ -1457,7 +1459,7 @@ module Test
write_new_line
end
- def write_object
+ def write_object obj
if @is_first_obj
@is_first_obj = false
else
@@ -1465,15 +1467,7 @@ module Test
write_new_line
end
@indent_level += 1
- write_indent
- @file.write("{")
- write_new_line
- @indent_level += 1
- yield
- @indent_level -= 1
- write_new_line
- write_indent
- @file.write("}")
+ @file.write(to_json_str(obj))
@indent_level -= 1
@is_first_key_val = true
# Occasionally, invalid JSON will be created as shown below, especially when `--repeat-count` is specified.
@@ -1492,40 +1486,26 @@ module Test
def write_array(key)
@indent_level += 1
- write_indent
@file.write(to_json_str(key))
write_colon
@file.write(" ", "[")
write_new_line
end
- def write_key_value(key, value)
- if @is_first_key_val
- @is_first_key_val = false
- else
- write_comma
- write_new_line
- end
- write_indent
- @file.write(to_json_str(key))
- write_colon
- @file.write(" ")
- @file.write(to_json_str(value))
- end
-
def close
return if @file.closed?
close_array
@indent_level -= 1
write_new_line
- @file.write("}")
+ @file.write("}", "\n")
@file.flush
@file.close
end
private
def to_json_str(obj)
- JSON.dump(obj)
+ json = JSON.pretty_generate(obj)
+ json.gsub(/^/, ' ' * (2 * @indent_level))
end
def write_indent
diff --git a/tool/test/testunit/test_launchable.rb b/tool/test/testunit/test_launchable.rb
new file mode 100644
index 0000000000..a91d44b1ce
--- /dev/null
+++ b/tool/test/testunit/test_launchable.rb
@@ -0,0 +1,57 @@
+# frozen_string_literal: false
+require 'test/unit'
+require 'tempfile'
+require 'json'
+
+class TestLaunchable < Test::Unit::TestCase
+ def test_json_stream_writer
+ Tempfile.create(['launchable-test-', '.json']) do |f|
+ json_stream_writer = Test::Unit::LaunchableOption::JsonStreamWriter.new(f.path)
+ json_stream_writer.write_array('testCases')
+ json_stream_writer.write_object(
+ {
+ testPath: "file=test/test_a.rb#class=class1#testcase=testcase899",
+ duration: 42,
+ status: "TEST_FAILED",
+ stdout: nil,
+ stderr: nil,
+ createdAt: "2021-10-05T12:34:00"
+ }
+ )
+ json_stream_writer.write_object(
+ {
+ testPath: "file=test/test_a.rb#class=class1#testcase=testcase899",
+ duration: 45,
+ status: "TEST_PASSED",
+ stdout: "This is stdout",
+ stderr: "This is stderr",
+ createdAt: "2021-10-05T12:36:00"
+ }
+ )
+ json_stream_writer.close()
+ expected = <<JSON
+{
+ "testCases": [
+ {
+ "testPath": "file=test/test_a.rb#class=class1#testcase=testcase899",
+ "duration": 42,
+ "status": "TEST_FAILED",
+ "stdout": null,
+ "stderr": null,
+ "createdAt": "2021-10-05T12:34:00"
+ },
+ {
+ "testPath": "file=test/test_a.rb#class=class1#testcase=testcase899",
+ "duration": 45,
+ "status": "TEST_PASSED",
+ "stdout": "This is stdout",
+ "stderr": "This is stderr",
+ "createdAt": "2021-10-05T12:36:00"
+ }
+ ]
+}
+JSON
+ assert_equal(expected, f.read)
+ end
+ end
+end