diff --git a/src/common/valnum.cpp b/src/common/valnum.cpp index b0735393b0..563701aadb 100644 --- a/src/common/valnum.cpp +++ b/src/common/valnum.cpp @@ -230,7 +230,15 @@ void wxNumValidatorBase::OnKillFocus(wxFocusEvent& event) wxString wxIntegerValidatorBase::ToString(LongestValueType value) const { - return wxNumberFormatter::ToString(value, GetFormatFlags()); + if ( CanBeNegative() ) + { + return wxNumberFormatter::ToString(value, GetFormatFlags()); + } + else + { + ULongestValueType uvalue = static_cast(value); + return wxNumberFormatter::ToString(uvalue, GetFormatFlags()); + } } bool diff --git a/tests/validators/valnum.cpp b/tests/validators/valnum.cpp index 8af177f3c9..b4fb2ae277 100644 --- a/tests/validators/valnum.cpp +++ b/tests/validators/valnum.cpp @@ -99,6 +99,8 @@ TEST_CASE_METHOD(NumValidatorTestCase, "ValNum::TransferUnsigned", "[valnum]") m_text->ChangeValue("4294967295"); // == ULONG_MAX in 32 bits CHECK( valUnsigned.TransferFromWindow() ); CHECK( value == wxUINT32_MAX ); + CHECK( valUnsigned.TransferToWindow() ); + CHECK( m_text->GetValue() == "4294967295" ); m_text->ChangeValue("4294967296"); // == ULONG_MAX + 1 CHECK( !valUnsigned.TransferFromWindow() ); @@ -116,20 +118,41 @@ TEST_CASE_METHOD(NumValidatorTestCase, "ValNum::TransferULL", "[valnum]") wxIntegerValidator valULL(&value); valULL.SetWindow(m_text); - m_text->ChangeValue("9223372036854775807"); // == LLONG_MAX - CHECK( valULL.TransferFromWindow() ); - CHECK( value == static_cast(wxINT64_MAX) ); + SECTION("LLONG_MAX") + { + m_text->ChangeValue("9223372036854775807"); // == LLONG_MAX + REQUIRE( valULL.TransferFromWindow() ); + CHECK( value == static_cast(wxINT64_MAX) ); - m_text->ChangeValue("9223372036854775808"); // == LLONG_MAX + 1 - CHECK( valULL.TransferFromWindow() ); - CHECK( value == static_cast(wxINT64_MAX) + 1 ); + REQUIRE( valULL.TransferToWindow() ); + CHECK( m_text->GetValue() == "9223372036854775807" ); + } - m_text->ChangeValue("18446744073709551615"); // == ULLONG_MAX - CHECK( valULL.TransferFromWindow() ); - CHECK( value == wxUINT64_MAX ); + SECTION("LLONG_MAX+1") + { + m_text->ChangeValue("9223372036854775808"); // == LLONG_MAX + 1 + REQUIRE( valULL.TransferFromWindow() ); + CHECK( value == static_cast(wxINT64_MAX) + 1 ); - m_text->ChangeValue("18446744073709551616"); // == ULLONG_MAX + 1 - CHECK( !valULL.TransferFromWindow() ); + REQUIRE( valULL.TransferToWindow() ); + CHECK( m_text->GetValue() == "9223372036854775808" ); + } + + SECTION("ULLONG_MAX") + { + m_text->ChangeValue("18446744073709551615"); // == ULLONG_MAX + REQUIRE( valULL.TransferFromWindow() ); + CHECK( value == wxUINT64_MAX ); + + REQUIRE( valULL.TransferToWindow() ); + CHECK( m_text->GetValue() == "18446744073709551615" ); + } + + SECTION("ULLONG_MAX+1") + { + m_text->ChangeValue("18446744073709551616"); // == ULLONG_MAX + 1 + CHECK( !valULL.TransferFromWindow() ); + } } TEST_CASE_METHOD(NumValidatorTestCase, "ValNum::TransferFloat", "[valnum]")