Making from(dynamic.items()) work
authorTom Jackson <tjackson@fb.com>
Tue, 30 Apr 2013 01:46:29 +0000 (18:46 -0700)
committerSara Golemon <sgolemon@fb.com>
Mon, 20 May 2013 18:01:26 +0000 (11:01 -0700)
Summary: It was broken because the `dynamic`'s iterator wasn't complete.

Test Plan: Unit test

Reviewed By: jbrewer@fb.com

FB internal diff: D793618

folly/dynamic-inl.h
folly/experimental/Gen.h
folly/experimental/test/GenTest.cpp

index 92cd67ef794dc011e6c2fd55c9ec4d8b0ee67494..95d672af6ab1ec7c8819883f732f561912d0bd74 100644 (file)
@@ -325,6 +325,7 @@ inline dynamic::const_iterator dynamic::end() const {
 template <class It>
 struct dynamic::IterableProxy {
   typedef It const_iterator;
+  typedef typename It::value_type value_type;
 
   /* implicit */ IterableProxy(const dynamic::ObjectImpl* o) : o_(o) { }
 
index 9baae83335d878eb8e89f248e1b3c3570372b047..0946c0f311381822a4fba80989bcf8b42332046f 100644 (file)
@@ -299,7 +299,7 @@ From from(std::initializer_list<Value> source) {
 
 template<class Container,
          class From = detail::CopiedSource<typename Container::value_type,
-                                         Container>>
+                                           Container>>
 From from(Container&& source) {
   return From(std::move(source));
 }
index 7b6d22b386bda277b687502152e2ec78319e0434..d5a05ea5cebe0d2c309ac86b86b0862ee9e2ba19 100644 (file)
@@ -664,6 +664,14 @@ TEST(Gen, Dynamic) {
   EXPECT_EQ(dynamic(5), from(array3) | rconcat | rconcat | sum);
 }
 
+TEST(Gen, DynamicObject) {
+  const dynamic obj = dynamic::object(1, 2)(3, 4);
+  EXPECT_EQ(dynamic(4), from(obj.keys()) | sum);
+  EXPECT_EQ(dynamic(6), from(obj.values()) | sum);
+  EXPECT_EQ(dynamic(4), from(obj.items()) | get<0>() | sum);
+  EXPECT_EQ(dynamic(6), from(obj.items()) | get<1>() | sum);
+}
+
 TEST(StringGen, EmptySplit) {
   auto collect = eachTo<std::string>() | as<vector>();
   {