Fix and test JSON conversions on nonconsecutive enums
Change-Id: I057940c95bd6e371568be5ca1f426a40a6a73e95
diff --git a/aos/json_to_flatbuffer.cc b/aos/json_to_flatbuffer.cc
index f12014f..036ae01 100644
--- a/aos/json_to_flatbuffer.cc
+++ b/aos/json_to_flatbuffer.cc
@@ -1,8 +1,6 @@
#include "aos/json_to_flatbuffer.h"
#include <cstddef>
-#include "stdio.h"
-
#include <string_view>
#include "aos/flatbuffer_utils.h"
@@ -10,6 +8,7 @@
#include "flatbuffers/flatbuffers.h"
#include "flatbuffers/minireflect.h"
#include "glog/logging.h"
+#include "stdio.h"
// TODO(austin): Can we just do an Offset<void> ? It doesn't matter, so maybe
// just say that.
@@ -418,7 +417,11 @@
bool found = false;
for (size_t i = 0; i < enum_type_table->num_elems; ++i) {
if (data == enum_type_table->names[i]) {
- int_value = i;
+ if (enum_type_table->values) {
+ int_value = enum_type_table->values[i];
+ } else {
+ int_value = i;
+ }
found = true;
break;
}
diff --git a/aos/json_to_flatbuffer.fbs b/aos/json_to_flatbuffer.fbs
index 7ce9ae6..7180322 100644
--- a/aos/json_to_flatbuffer.fbs
+++ b/aos/json_to_flatbuffer.fbs
@@ -21,6 +21,11 @@
Array
}
+enum NonConsecutive : int {
+ Zero = 0,
+ Big = 10000000,
+}
+
table Location {
name:string (id: 0);
type:string (id: 1);
@@ -126,6 +131,9 @@
foo_struct:FooStruct (id: 34);
vector_foo_struct:[FooStruct] (id: 35);
foo_struct_enum:StructEnum (id: 36);
+
+ foo_enum_nonconsecutive:NonConsecutive (id: 37);
+ foo_enum_nonconsecutive_default:NonConsecutive = Big (id: 38);
}
root_type Configuration;
diff --git a/aos/json_to_flatbuffer_test.cc b/aos/json_to_flatbuffer_test.cc
index 4379ae9..dd70908 100644
--- a/aos/json_to_flatbuffer_test.cc
+++ b/aos/json_to_flatbuffer_test.cc
@@ -1,9 +1,8 @@
#include "aos/json_to_flatbuffer.h"
-#include "gtest/gtest.h"
-
#include "aos/json_to_flatbuffer_generated.h"
#include "flatbuffers/minireflect.h"
+#include "gtest/gtest.h"
namespace aos {
namespace testing {
@@ -64,6 +63,9 @@
EXPECT_TRUE(JsonAndBack("{ \"foo_enum_default\": \"UType\" }"));
EXPECT_TRUE(JsonAndBack("{ \"foo_string\": \"baz\" }"));
+
+ EXPECT_TRUE(JsonAndBack("{ \"foo_enum_nonconsecutive\": \"Zero\" }"));
+ EXPECT_TRUE(JsonAndBack("{ \"foo_enum_nonconsecutive\": \"Big\" }"));
}
// Tests that NaN is handled correctly
@@ -88,6 +90,11 @@
EXPECT_FALSE(JsonAndBack("{ \"foo_enum\": \"5ype\" }"));
EXPECT_FALSE(JsonAndBack("{ \"foo_enum_default\": \"7ype\" }"));
+
+ EXPECT_FALSE(JsonAndBack("{ \"foo_enum_nonconsecutive\": \"Nope\" }"));
+
+ EXPECT_FALSE(
+ JsonAndBack("{ \"foo_enum_nonconsecutive_default\": \"Nope\" }"));
}
// Test that adding a duplicate field results in an error.