From df31c23ea996026335b3ebf79db6d871dd5d3ead Mon Sep 17 00:00:00 2001 From: Victor Oliveira Nascimento Date: Wed, 30 Mar 2016 13:53:30 -0300 Subject: [PATCH] Fix time formatting --- lib/formatter.ex | 17 ++++++++++++++--- mix.exs | 2 +- test/formatter_test.exs | 12 +++++++++++- 3 files changed, 26 insertions(+), 5 deletions(-) diff --git a/lib/formatter.ex b/lib/formatter.ex index 7b48144..b5a9f56 100644 --- a/lib/formatter.ex +++ b/lib/formatter.ex @@ -118,6 +118,8 @@ defmodule JUnitFormatter do {:ok, config} end + def format_time(time), do: time |> us_to_ms |> format_ms + # PRIVATE ------------ defp adjust_case_stats(%ExUnit.Test{} = test, config) do @@ -138,19 +140,28 @@ defmodule JUnitFormatter do failures: stats.failures, name: name, tests: stats.tests, - time: normalize_us(stats.time)], + time: stats.time |> format_time], for test <- stats.test_cases do generate_testcases(test) end } end - defp normalize_us(us), do: div(us, 1000000) + defp us_to_ms(us), do: div(us, 10000) + defp format_ms(ms) do + if ms < 10 do + "0.0#{ms}" + else + ms = div ms, 10 + "#{div(ms, 10)}.#{rem(ms, 10)}" + end + end + defp generate_testcases(test) do {:testcase, [classname: Atom.to_char_list(test.case), name: Atom.to_char_list(test.name), - time: test.time], + time: test.time |> us_to_ms |> format_ms], generate_test_body(test) } end diff --git a/mix.exs b/mix.exs index 9717305..968bbb2 100644 --- a/mix.exs +++ b/mix.exs @@ -1,7 +1,7 @@ defmodule Formatter.Mixfile do use Mix.Project - @version "1.0.0" + @version "1.0.1" def project do [app: :junit_formatter, diff --git a/test/formatter_test.exs b/test/formatter_test.exs index 55ff198..852a9a3 100644 --- a/test/formatter_test.exs +++ b/test/formatter_test.exs @@ -3,6 +3,8 @@ defmodule FormatterTest do test "that a valid test generates a proper report" do + :timer.sleep 1223 + defmodule ValidTest do use ExUnit.Case @@ -82,6 +84,14 @@ defmodule FormatterTest do assert output =~ " test/formatter_test.exs FormatterTest.RaiseWithNoReason.\"test it raises without reason\"/1\n" end + test "it can format time" do + assert JUnitFormatter.format_time(1000000) == "1.0" + assert JUnitFormatter.format_time(10000) == "0.01" + assert JUnitFormatter.format_time(20000) == "0.02" + assert JUnitFormatter.format_time(110000) == "0.1" + assert JUnitFormatter.format_time(1100000) == "1.1" + end + # Utilities -------------------- defp read_fixture(extra) do @@ -97,7 +107,7 @@ defmodule FormatterTest do end defp strip_time_and_line_number(output) do - output = String.replace output, ~r/time=\"[0-9]+\"/, "" + output = String.replace output, ~r/time=\"[0-9]+\.[0-9]+\"/, "" file = List.last String.split __ENV__.file, ~r/\// String.replace output, ~r/#{file}:[0-9]+:/, file end