# frozen_string_literal: true require "test_helper" class WidthParserTest < Minitest::Test def test_parse_auto_symbol result = Notare::WidthParser.parse(:auto) assert_equal 0, result.value assert_equal "auto", result.type end def test_parse_nil result = Notare::WidthParser.parse(nil) assert_equal 0, result.value assert_equal "auto", result.type end def test_parse_integer_as_twips result = Notare::WidthParser.parse(1440) assert_equal 1440, result.value assert_equal "dxa", result.type end def test_parse_inches result = Notare::WidthParser.parse("2in") assert_equal 2880, result.value assert_equal "dxa", result.type end def test_parse_inches_with_decimal result = Notare::WidthParser.parse("1.5in") assert_equal 2160, result.value assert_equal "dxa", result.type end def test_parse_inches_case_insensitive result = Notare::WidthParser.parse("2IN") assert_equal 2880, result.value assert_equal "dxa", result.type end def test_parse_centimeters result = Notare::WidthParser.parse("5cm") assert_equal 2835, result.value assert_equal "dxa", result.type end def test_parse_centimeters_with_decimal result = Notare::WidthParser.parse("2.54cm") assert_equal 1440, result.value assert_equal "dxa", result.type end def test_parse_percentage result = Notare::WidthParser.parse("50%") assert_equal 2500, result.value assert_equal "pct", result.type end def test_parse_percentage_with_decimal result = Notare::WidthParser.parse("33.3%") assert_equal 1664, result.value # 33.3 * 50 = 1664.999... truncates to 1664 assert_equal "pct", result.type end def test_parse_100_percent result = Notare::WidthParser.parse("100%") assert_equal 5000, result.value assert_equal "pct", result.type end def test_parse_with_spaces result = Notare::WidthParser.parse("2 in") assert_equal 2880, result.value assert_equal "dxa", result.type end def test_invalid_width_raises_error error = assert_raises(ArgumentError) do Notare::WidthParser.parse("invalid") end assert_match(/Invalid width/, error.message) end def test_invalid_unit_raises_error error = assert_raises(ArgumentError) do Notare::WidthParser.parse("10px") end assert_match(/Invalid width/, error.message) end end