forked from loafle/openapi-generator-original
[dart] Handle enumVarNames for negative names (#8143)
This commit is contained in:
parent
9e5610488f
commit
a93a60b6eb
@ -352,10 +352,6 @@ public class DartClientCodegen extends DefaultCodegen {
|
|||||||
|
|
||||||
@Override
|
@Override
|
||||||
public String toVarName(String name) {
|
public String toVarName(String name) {
|
||||||
return toVarName(name, "n");
|
|
||||||
}
|
|
||||||
|
|
||||||
private String toVarName(String name, String numberPrefix) {
|
|
||||||
// replace - with _ e.g. created-at => created_at
|
// replace - with _ e.g. created-at => created_at
|
||||||
name = name.replace("-", "_");
|
name = name.replace("-", "_");
|
||||||
|
|
||||||
@ -380,7 +376,7 @@ public class DartClientCodegen extends DefaultCodegen {
|
|||||||
name = camelize(name, true);
|
name = camelize(name, true);
|
||||||
|
|
||||||
if (name.matches("^\\d.*")) {
|
if (name.matches("^\\d.*")) {
|
||||||
name = numberPrefix + name;
|
name = "n" + name;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (isReservedWord(name) || importMapping().containsKey(name)) {
|
if (isReservedWord(name) || importMapping().containsKey(name)) {
|
||||||
@ -535,7 +531,16 @@ public class DartClientCodegen extends DefaultCodegen {
|
|||||||
if (value.length() == 0) {
|
if (value.length() == 0) {
|
||||||
return "empty";
|
return "empty";
|
||||||
}
|
}
|
||||||
return toVarName(value, "number");
|
if (("number".equalsIgnoreCase(datatype) ||
|
||||||
|
"double".equalsIgnoreCase(datatype) ||
|
||||||
|
"int".equalsIgnoreCase(datatype)) &&
|
||||||
|
value.matches("^-?\\d.*")) {
|
||||||
|
// Only rename numeric values when the datatype is numeric
|
||||||
|
// AND the name is not changed by enum extensions (matches a numeric value).
|
||||||
|
boolean isNegative = value.startsWith("-");
|
||||||
|
return toVarName("number" + (isNegative ? "_negative" : "") + value);
|
||||||
|
}
|
||||||
|
return toVarName(value);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
@ -341,38 +341,57 @@ public class DartModelTest {
|
|||||||
Assert.assertEquals(codegen.toVarName(name), expectedName);
|
Assert.assertEquals(codegen.toVarName(name), expectedName);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private static class EnumVarName {
|
||||||
|
final String name;
|
||||||
|
final String expected;
|
||||||
|
final String dataType;
|
||||||
|
|
||||||
|
EnumVarName(String name, String expected, String dataType) {
|
||||||
|
this.name = name;
|
||||||
|
this.expected = expected;
|
||||||
|
this.dataType = dataType;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
@DataProvider(name = "enumVarNames")
|
@DataProvider(name = "enumVarNames")
|
||||||
public static Object[][] enumVarNames() {
|
public static Object[] enumVarNames() {
|
||||||
return new Object[][] {
|
return new Object[] {
|
||||||
{"", "empty"},
|
new EnumVarName("", "empty", "String"),
|
||||||
{"Double", "double_"},
|
new EnumVarName("Double", "double_", "String"),
|
||||||
{"double", "double_"},
|
new EnumVarName("double", "double_", "String"),
|
||||||
{"dynamic", "dynamic_"},
|
new EnumVarName("dynamic", "dynamic_", "String"),
|
||||||
{"String", "string"},
|
new EnumVarName("String", "string", "String"),
|
||||||
{"string", "string"},
|
new EnumVarName("string", "string", "String"),
|
||||||
{"hello", "hello"},
|
new EnumVarName("hello", "hello", "String"),
|
||||||
{"FOO", "FOO"},
|
new EnumVarName("FOO", "FOO", "String"),
|
||||||
{"FOO_BAR", "FOO_BAR"},
|
new EnumVarName("FOO_BAR", "FOO_BAR", "String"),
|
||||||
{"FOO_BAR_BAZ_", "FOO_BAR_BAZ_"},
|
new EnumVarName("FOO_BAR_BAZ_", "FOO_BAR_BAZ_", "String"),
|
||||||
{"123hello", "number123hello"},
|
new EnumVarName("123hello", "n123hello", "String"),
|
||||||
{"_hello", "hello"},
|
new EnumVarName("_hello", "hello", "String"),
|
||||||
{"_double", "double_"},
|
new EnumVarName("_double", "double_", "String"),
|
||||||
{"_123hello", "number123hello"},
|
new EnumVarName("_123hello", "n123hello", "String"),
|
||||||
{"_5FOO", "number5fOO"},
|
new EnumVarName("_5FOO", "n5fOO", "String"),
|
||||||
{"_FOO", "FOO"},
|
new EnumVarName("_FOO", "FOO", "String"),
|
||||||
{"_$foo", "dollarFoo"},
|
new EnumVarName("_$foo", "dollarFoo", "String"),
|
||||||
{"_$_foo_", "dollarFoo"},
|
new EnumVarName("_$_foo_", "dollarFoo", "String"),
|
||||||
{"$special[property.name]", "dollarSpecialLeftSquareBracketPropertyPeriodNameRightSquareBracket"},
|
new EnumVarName("$special[property.name]", "dollarSpecialLeftSquareBracketPropertyPeriodNameRightSquareBracket", "String"),
|
||||||
{"$", "dollar"},
|
new EnumVarName("$", "dollar", "String"),
|
||||||
{">=", "greaterThanEqual"},
|
new EnumVarName(">=", "greaterThanEqual", "String"),
|
||||||
{"foo bar", "fooBar"},
|
new EnumVarName("foo bar", "fooBar", "String"),
|
||||||
|
new EnumVarName("1", "number1", "int"),
|
||||||
|
new EnumVarName("2", "number2", "int"),
|
||||||
|
new EnumVarName("-1", "numberNegative1", "int"),
|
||||||
|
new EnumVarName("-99", "numberNegative99", "int"),
|
||||||
|
new EnumVarName("1", "number1", "double"),
|
||||||
|
new EnumVarName("1.1", "number1Period1", "double"),
|
||||||
|
new EnumVarName("-1.2", "numberNegative1Period2", "double"),
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
||||||
@Test(dataProvider = "enumVarNames", description = "test enum names are correctly escaped")
|
@Test(dataProvider = "enumVarNames", description = "test enum names are correctly escaped")
|
||||||
public void convertEnumVarNames(String name, String expectedName) {
|
public void convertEnumVarNames(EnumVarName enumVar) {
|
||||||
final DefaultCodegen codegen = new DartClientCodegen();
|
final DefaultCodegen codegen = new DartClientCodegen();
|
||||||
Assert.assertEquals(codegen.toEnumVarName(name, null), expectedName);
|
Assert.assertEquals(codegen.toEnumVarName(enumVar.name, enumVar.dataType), enumVar.expected);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Test(description = "model names support `--model-name-prefix` and `--model-name-suffix`")
|
@Test(description = "model names support `--model-name-prefix` and `--model-name-suffix`")
|
||||||
|
@ -99,7 +99,7 @@ class EnumTestEnumInteger extends EnumClass {
|
|||||||
@BuiltValueEnumConst(wireNumber: 1)
|
@BuiltValueEnumConst(wireNumber: 1)
|
||||||
static const EnumTestEnumInteger number1 = _$enumTestEnumInteger_number1;
|
static const EnumTestEnumInteger number1 = _$enumTestEnumInteger_number1;
|
||||||
@BuiltValueEnumConst(wireNumber: -1)
|
@BuiltValueEnumConst(wireNumber: -1)
|
||||||
static const EnumTestEnumInteger number1 = _$enumTestEnumInteger_number1;
|
static const EnumTestEnumInteger numberNegative1 = _$enumTestEnumInteger_numberNegative1;
|
||||||
|
|
||||||
static Serializer<EnumTestEnumInteger> get serializer => _$enumTestEnumIntegerSerializer;
|
static Serializer<EnumTestEnumInteger> get serializer => _$enumTestEnumIntegerSerializer;
|
||||||
|
|
||||||
@ -113,9 +113,9 @@ class EnumTestEnumInteger extends EnumClass {
|
|||||||
class EnumTestEnumNumber extends EnumClass {
|
class EnumTestEnumNumber extends EnumClass {
|
||||||
|
|
||||||
@BuiltValueEnumConst(wireName: '1.1')
|
@BuiltValueEnumConst(wireName: '1.1')
|
||||||
static const EnumTestEnumNumber number1period1 = _$enumTestEnumNumber_number1period1;
|
static const EnumTestEnumNumber number1Period1 = _$enumTestEnumNumber_number1Period1;
|
||||||
@BuiltValueEnumConst(wireName: '-1.2')
|
@BuiltValueEnumConst(wireName: '-1.2')
|
||||||
static const EnumTestEnumNumber number1period2 = _$enumTestEnumNumber_number1period2;
|
static const EnumTestEnumNumber numberNegative1Period2 = _$enumTestEnumNumber_numberNegative1Period2;
|
||||||
|
|
||||||
static Serializer<EnumTestEnumNumber> get serializer => _$enumTestEnumNumberSerializer;
|
static Serializer<EnumTestEnumNumber> get serializer => _$enumTestEnumNumberSerializer;
|
||||||
|
|
||||||
|
@ -316,12 +316,12 @@ class EnumTestEnumIntegerEnum {
|
|||||||
String toJson() => value;
|
String toJson() => value;
|
||||||
|
|
||||||
static const number1 = EnumTestEnumIntegerEnum._(1);
|
static const number1 = EnumTestEnumIntegerEnum._(1);
|
||||||
static const number1 = EnumTestEnumIntegerEnum._(-1);
|
static const numberNegative1 = EnumTestEnumIntegerEnum._(-1);
|
||||||
|
|
||||||
/// List of all possible values in this [enum][EnumTestEnumIntegerEnum].
|
/// List of all possible values in this [enum][EnumTestEnumIntegerEnum].
|
||||||
static const values = <EnumTestEnumIntegerEnum>[
|
static const values = <EnumTestEnumIntegerEnum>[
|
||||||
number1,
|
number1,
|
||||||
number1,
|
numberNegative1,
|
||||||
];
|
];
|
||||||
|
|
||||||
static EnumTestEnumIntegerEnum fromJson(dynamic value) =>
|
static EnumTestEnumIntegerEnum fromJson(dynamic value) =>
|
||||||
@ -355,7 +355,7 @@ class EnumTestEnumIntegerEnumTypeTransformer {
|
|||||||
EnumTestEnumIntegerEnum decode(dynamic data, {bool allowNull}) {
|
EnumTestEnumIntegerEnum decode(dynamic data, {bool allowNull}) {
|
||||||
switch (data) {
|
switch (data) {
|
||||||
case 1: return EnumTestEnumIntegerEnum.number1;
|
case 1: return EnumTestEnumIntegerEnum.number1;
|
||||||
case -1: return EnumTestEnumIntegerEnum.number1;
|
case -1: return EnumTestEnumIntegerEnum.numberNegative1;
|
||||||
default:
|
default:
|
||||||
if (allowNull == false) {
|
if (allowNull == false) {
|
||||||
throw ArgumentError('Unknown enum value to decode: $data');
|
throw ArgumentError('Unknown enum value to decode: $data');
|
||||||
@ -389,13 +389,13 @@ class EnumTestEnumNumberEnum {
|
|||||||
|
|
||||||
String toJson() => value;
|
String toJson() => value;
|
||||||
|
|
||||||
static const number1period1 = EnumTestEnumNumberEnum._('1.1');
|
static const number1Period1 = EnumTestEnumNumberEnum._('1.1');
|
||||||
static const number1period2 = EnumTestEnumNumberEnum._('-1.2');
|
static const numberNegative1Period2 = EnumTestEnumNumberEnum._('-1.2');
|
||||||
|
|
||||||
/// List of all possible values in this [enum][EnumTestEnumNumberEnum].
|
/// List of all possible values in this [enum][EnumTestEnumNumberEnum].
|
||||||
static const values = <EnumTestEnumNumberEnum>[
|
static const values = <EnumTestEnumNumberEnum>[
|
||||||
number1period1,
|
number1Period1,
|
||||||
number1period2,
|
numberNegative1Period2,
|
||||||
];
|
];
|
||||||
|
|
||||||
static EnumTestEnumNumberEnum fromJson(dynamic value) =>
|
static EnumTestEnumNumberEnum fromJson(dynamic value) =>
|
||||||
@ -428,8 +428,8 @@ class EnumTestEnumNumberEnumTypeTransformer {
|
|||||||
/// and users are still using an old app with the old code.
|
/// and users are still using an old app with the old code.
|
||||||
EnumTestEnumNumberEnum decode(dynamic data, {bool allowNull}) {
|
EnumTestEnumNumberEnum decode(dynamic data, {bool allowNull}) {
|
||||||
switch (data) {
|
switch (data) {
|
||||||
case '1.1': return EnumTestEnumNumberEnum.number1period1;
|
case '1.1': return EnumTestEnumNumberEnum.number1Period1;
|
||||||
case '-1.2': return EnumTestEnumNumberEnum.number1period2;
|
case '-1.2': return EnumTestEnumNumberEnum.numberNegative1Period2;
|
||||||
default:
|
default:
|
||||||
if (allowNull == false) {
|
if (allowNull == false) {
|
||||||
throw ArgumentError('Unknown enum value to decode: $data');
|
throw ArgumentError('Unknown enum value to decode: $data');
|
||||||
|
Loading…
x
Reference in New Issue
Block a user