mirror of
https://github.com/google/flatbuffers.git
synced 2026-06-29 22:32:02 +00:00
Correctly parse lists of enums in Dart generated code (#7157)
* Correctly parse lists of enums in Dart generated code * Add a test for #6869 * Commit generated code * Fixed missing newline-at-eof
This commit is contained in:
@@ -13,6 +13,7 @@ import 'package:test_reflective_loader/test_reflective_loader.dart';
|
|||||||
|
|
||||||
import './monster_test_my_game.example_generated.dart' as example;
|
import './monster_test_my_game.example_generated.dart' as example;
|
||||||
import './monster_test_my_game.example2_generated.dart' as example2;
|
import './monster_test_my_game.example2_generated.dart' as example2;
|
||||||
|
import './list_of_enums_generated.dart' as example3;
|
||||||
|
|
||||||
main() {
|
main() {
|
||||||
defineReflectiveSuite(() {
|
defineReflectiveSuite(() {
|
||||||
@@ -20,6 +21,7 @@ main() {
|
|||||||
defineReflectiveTests(ObjectAPITest);
|
defineReflectiveTests(ObjectAPITest);
|
||||||
defineReflectiveTests(CheckOtherLangaugesData);
|
defineReflectiveTests(CheckOtherLangaugesData);
|
||||||
defineReflectiveTests(GeneratorTest);
|
defineReflectiveTests(GeneratorTest);
|
||||||
|
defineReflectiveTests(ListOfEnumsTest);
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -902,3 +904,17 @@ class GeneratorTest {
|
|||||||
same(example.AnyAmbiguousAliasesTypeId.values));
|
same(example.AnyAmbiguousAliasesTypeId.values));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// See #6869
|
||||||
|
@reflectiveTest
|
||||||
|
class ListOfEnumsTest {
|
||||||
|
void test_listOfEnums() async {
|
||||||
|
var mytable = example3.MyTableObjectBuilder(
|
||||||
|
options: [example3.OptionsEnum.A, example3.OptionsEnum.B, example3.OptionsEnum.C]);
|
||||||
|
var bytes = mytable.toBytes();
|
||||||
|
var mytable_read = example3.MyTable(bytes);
|
||||||
|
expect(mytable_read.options![0].value, example3.OptionsEnum.A.value);
|
||||||
|
expect(mytable_read.options![1].value, example3.OptionsEnum.B.value);
|
||||||
|
expect(mytable_read.options![2].value, example3.OptionsEnum.C.value);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|||||||
10
dart/test/list_of_enums.fbs
Normal file
10
dart/test/list_of_enums.fbs
Normal file
@@ -0,0 +1,10 @@
|
|||||||
|
enum OptionsEnum : uint32
|
||||||
|
{
|
||||||
|
A = 1,
|
||||||
|
B = 2,
|
||||||
|
C = 3
|
||||||
|
}
|
||||||
|
|
||||||
|
table MyTable {
|
||||||
|
options : [OptionsEnum];
|
||||||
|
}
|
||||||
@@ -308,7 +308,7 @@ class DartGenerator : public BaseGenerator {
|
|||||||
"> {\n";
|
"> {\n";
|
||||||
code += " const _" + name + "Reader();\n\n";
|
code += " const _" + name + "Reader();\n\n";
|
||||||
code += " @override\n";
|
code += " @override\n";
|
||||||
code += " int get size => 1;\n\n";
|
code += " int get size => " + EnumSize(enum_def.underlying_type) + ";\n\n";
|
||||||
code += " @override\n";
|
code += " @override\n";
|
||||||
code +=
|
code +=
|
||||||
" " + name + " read(" + _kFb + ".BufferContext bc, int offset) =>\n";
|
" " + name + " read(" + _kFb + ".BufferContext bc, int offset) =>\n";
|
||||||
@@ -339,6 +339,24 @@ class DartGenerator : public BaseGenerator {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static std::string EnumSize(const Type &type) {
|
||||||
|
switch (type.base_type) {
|
||||||
|
case BASE_TYPE_BOOL:
|
||||||
|
case BASE_TYPE_CHAR:
|
||||||
|
case BASE_TYPE_UTYPE:
|
||||||
|
case BASE_TYPE_UCHAR: return "1";
|
||||||
|
case BASE_TYPE_SHORT:
|
||||||
|
case BASE_TYPE_USHORT: return "2";
|
||||||
|
case BASE_TYPE_INT:
|
||||||
|
case BASE_TYPE_UINT:
|
||||||
|
case BASE_TYPE_FLOAT: return "4";
|
||||||
|
case BASE_TYPE_LONG:
|
||||||
|
case BASE_TYPE_ULONG:
|
||||||
|
case BASE_TYPE_DOUBLE: return "8";
|
||||||
|
default: return "1";
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
std::string GenReaderTypeName(const Type &type, Namespace *current_namespace,
|
std::string GenReaderTypeName(const Type &type, Namespace *current_namespace,
|
||||||
const FieldDef &def,
|
const FieldDef &def,
|
||||||
bool parent_is_vector = false, bool lazy = true,
|
bool parent_is_vector = false, bool lazy = true,
|
||||||
|
|||||||
@@ -25,6 +25,8 @@ cp monster_test.fbs ../dart/test
|
|||||||
|
|
||||||
cd ../dart
|
cd ../dart
|
||||||
|
|
||||||
|
../flatc --dart --gen-object-api -o ./test ./test/list_of_enums.fbs
|
||||||
|
|
||||||
# update packages
|
# update packages
|
||||||
dart pub get
|
dart pub get
|
||||||
# Execute the sample.
|
# Execute the sample.
|
||||||
|
|||||||
@@ -152,7 +152,7 @@ class _LongEnumReader extends fb.Reader<LongEnum> {
|
|||||||
const _LongEnumReader();
|
const _LongEnumReader();
|
||||||
|
|
||||||
@override
|
@override
|
||||||
int get size => 1;
|
int get size => 8;
|
||||||
|
|
||||||
@override
|
@override
|
||||||
LongEnum read(fb.BufferContext bc, int offset) =>
|
LongEnum read(fb.BufferContext bc, int offset) =>
|
||||||
|
|||||||
Reference in New Issue
Block a user