From: Ashoat Tevosyan Date: Mon, 24 Sep 2012 13:07:29 +0000 (-0700) Subject: Add DynamicConverters for const strings. X-Git-Tag: v0.22.0~1176 X-Git-Url: http://demsky.eecs.uci.edu/git/?a=commitdiff_plain;h=981ed98473314f0e3df5e0c4d47c8574d9523289;p=folly.git Add DynamicConverters for const strings. Summary: These are necessary for string-keyed maps, since maps const their keys. Test Plan: I wrote a test. Reviewed By: njormrod@fb.com FB internal diff: D582283 --- diff --git a/folly/DynamicConverter.h b/folly/DynamicConverter.h index 275d6d93..2f0a1205 100644 --- a/folly/DynamicConverter.h +++ b/folly/DynamicConverter.h @@ -268,7 +268,7 @@ struct DynamicConverter T convertTo(const dynamic& d) { - return DynamicConverter::convert(d); + return DynamicConverter::type>::convert(d); } } // namespace folly diff --git a/folly/test/DynamicConverterTest.cpp b/folly/test/DynamicConverterTest.cpp index 5d414d44..0dd06671 100644 --- a/folly/test/DynamicConverterTest.cpp +++ b/folly/test/DynamicConverterTest.cpp @@ -141,6 +141,18 @@ TEST(DynamicConverter, simple_map) { EXPECT_EQ(i2, i2b); } +TEST(DynamicConverter, map_keyed_by_string) { + dynamic d1 = dynamic::object("1", "one")("2", "two"); + auto i1 = convertTo>(d1); + decltype(i1) i1b = { { "1", "one" }, { "2", "two" } }; + EXPECT_EQ(i1, i1b); + + dynamic d2 = { { "3", "three" }, { "4", "four" } }; + auto i2 = convertTo>(d2); + decltype(i2) i2b = { { "3", "three" }, { "4", "four" } }; + EXPECT_EQ(i2, i2b); +} + TEST(DynamicConverter, nested_containers) { dynamic d1 = { { 1 }, { }, { 2, 3 } }; auto i1 = convertTo>>(d1); @@ -227,6 +239,30 @@ TEST(DynamicConverter, crazy) { EXPECT_EQ(f1, i); } +TEST(DynamicConverter, consts) { + dynamic d1 = 7.5; + auto i1 = convertTo(d1); + EXPECT_EQ(7.5, i1); + + dynamic d2 = "Hello"; + auto i2 = convertTo(d2); + decltype(i2) i2b = "Hello"; + EXPECT_EQ(i2b, i2); + + dynamic d3 = true; + auto i3 = convertTo(d3); + EXPECT_EQ(true, i3); + + dynamic d4 = "true"; + auto i4 = convertTo(d4); + EXPECT_EQ(true, i4); + + dynamic d5 = { 1, 2 }; + auto i5 = convertTo>(d5); + decltype(i5) i5b = { 1, 2 }; + EXPECT_EQ(i5b, i5); +} + struct Token { int kind_; fbstring lexeme_;