@@ -63,6 +63,48 @@ BOOST_AUTO_TEST_CASE(univalue_constructor)
6363 BOOST_CHECK_EQUAL (v9.getValStr (), " zappa" );
6464}
6565
66+ BOOST_AUTO_TEST_CASE (univalue_typecheck)
67+ {
68+ UniValue v1;
69+ BOOST_CHECK (v1.setNumStr (" 1" ));
70+ BOOST_CHECK (v1.isNum ());
71+ BOOST_CHECK_THROW (v1.get_bool (), runtime_error);
72+
73+ UniValue v2;
74+ BOOST_CHECK (v2.setBool (true ));
75+ BOOST_CHECK_EQUAL (v2.get_bool (), true );
76+ BOOST_CHECK_THROW (v2.get_int (), runtime_error);
77+
78+ UniValue v3;
79+ BOOST_CHECK (v3.setNumStr (" 32482348723847471234" ));
80+ BOOST_CHECK_THROW (v3.get_int64 (), runtime_error);
81+ BOOST_CHECK (v3.setNumStr (" 1000" ));
82+ BOOST_CHECK_EQUAL (v3.get_int64 (), 1000 );
83+
84+ UniValue v4;
85+ BOOST_CHECK (v4.setNumStr (" 2147483648" ));
86+ BOOST_CHECK_EQUAL (v4.get_int64 (), 2147483648 );
87+ BOOST_CHECK_THROW (v4.get_int (), runtime_error);
88+ BOOST_CHECK (v4.setNumStr (" 1000" ));
89+ BOOST_CHECK_EQUAL (v4.get_int (), 1000 );
90+ BOOST_CHECK_THROW (v4.get_str (), runtime_error);
91+ BOOST_CHECK_EQUAL (v4.get_real (), 1000 );
92+ BOOST_CHECK_THROW (v4.get_array (), runtime_error);
93+ BOOST_CHECK_THROW (v4.getKeys (), runtime_error);
94+ BOOST_CHECK_THROW (v4.getValues (), runtime_error);
95+ BOOST_CHECK_THROW (v4.get_obj (), runtime_error);
96+
97+ UniValue v5;
98+ BOOST_CHECK (v5.read (" [true, 10]" ));
99+ BOOST_CHECK_NO_THROW (v5.get_array ());
100+ std::vector<UniValue> vals = v5.getValues ();
101+ BOOST_CHECK_THROW (vals[0 ].get_int (), runtime_error);
102+ BOOST_CHECK_EQUAL (vals[0 ].get_bool (), true );
103+
104+ BOOST_CHECK_EQUAL (vals[1 ].get_int (), 10 );
105+ BOOST_CHECK_THROW (vals[1 ].get_bool (), runtime_error);
106+ }
107+
66108BOOST_AUTO_TEST_CASE (univalue_set)
67109{
68110 UniValue v (UniValue::VSTR, " foo" );
0 commit comments