Skip to content

Commit 497711e

Browse files
committed
add generate_setter() function
1 parent ee6bc85 commit 497711e

2 files changed

Lines changed: 80 additions & 12 deletions

File tree

src/method_generator.py

Lines changed: 30 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -22,6 +22,10 @@
2222
"null", "true", "false"
2323
}
2424

25+
indent_lvl1 = " "
26+
indent_lvl2 = indent_lvl1 * 2
27+
indent_lvl3 = indent_lvl1 * 3
28+
2529

2630
@dataclass
2731
class Field:
@@ -37,14 +41,35 @@ def generate_getter(attr: Field) -> str:
3741

3842
getter_name = "get" + attr_name[0].upper() + attr_name[1:]
3943

40-
getter = f"""
41-
public {attr_type} {getter_name}() {{
42-
return {attr_name};
43-
}}
44-
"""
44+
getter = [
45+
"",
46+
f"{indent_lvl1}public {attr_type} {getter_name}() {{",
47+
f"{indent_lvl2}return {attr_name};",
48+
f"{indent_lvl1}}}"
49+
]
50+
getter = "\n".join(getter)
51+
4552
return getter
4653

4754

55+
def generate_setter(attr: Field) -> str:
56+
attr_name = attr.name
57+
attr_type = attr.type
58+
59+
_validate_java_identifier(attr_name)
60+
61+
setter_name = "set" + attr_name[0].upper() + attr_name[1:]
62+
63+
setter = [
64+
"",
65+
f"{indent_lvl1}public void {setter_name}({attr_type} {attr_name}) {{",
66+
f"{indent_lvl2}this.{attr_name} = {attr_name};",
67+
f"{indent_lvl1}}}"
68+
]
69+
setter = "\n".join(setter)
70+
return setter
71+
72+
4873
def _validate_java_identifier(name: str) -> None:
4974
if not name:
5075
raise ValueError("Field name cannot be empty")

tests/test_method_generator.py

Lines changed: 50 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
import pytest
22

3-
from src.method_generator import generate_getter, Field
3+
from src.method_generator import generate_getter, Field, generate_setter
44

55
JAVA_KEYWORDS = {
66
"abstract", "assert", "boolean", "break", "byte", "case", "catch",
@@ -26,13 +26,12 @@
2626
def test_generate_getter_integer():
2727
attr = Field(
2828
name="exampleAttribute",
29-
type="Integer"
29+
type="int"
3030
)
3131
expected = """
32-
public Integer getExampleAttribute() {
32+
public int getExampleAttribute() {
3333
return exampleAttribute;
34-
}
35-
"""
34+
}"""
3635
assert (generate_getter(attr) == expected)
3736

3837

@@ -41,8 +40,16 @@ def test_generate_getter_string():
4140
expected = """
4241
public String getSomeName() {
4342
return someName;
44-
}
45-
"""
43+
}"""
44+
assert (generate_getter(attr) == expected)
45+
46+
47+
def test_generate_getter_custom_object():
48+
attr = Field(name="customData", type="CustomObject")
49+
expected = """
50+
public CustomObject getCustomData() {
51+
return customData;
52+
}"""
4653
assert (generate_getter(attr) == expected)
4754

4855

@@ -54,3 +61,39 @@ def test_generate_getter_invalid_name():
5461
with pytest.raises(ValueError):
5562
generate_getter(attr)
5663

64+
65+
def test_generate_setter_integer():
66+
attr = Field(name="exampleAttribute", type="int")
67+
expected = f"""
68+
public void setExampleAttribute(int exampleAttribute) {{
69+
this.exampleAttribute = exampleAttribute;
70+
}}"""
71+
assert (generate_setter(attr) == expected)
72+
73+
74+
def test_generate_setter_string():
75+
attr = Field(name="someName", type="String")
76+
expected = f"""
77+
public void setSomeName(String someName) {{
78+
this.someName = someName;
79+
}}"""
80+
assert (generate_setter(attr) == expected)
81+
82+
83+
def test_generate_setter_custom_object():
84+
attr = Field(name="customData", type="CustomObject")
85+
expected = f"""
86+
public void setCustomData(CustomObject customData) {{
87+
this.customData = customData;
88+
}}"""
89+
assert (generate_setter(attr) == expected)
90+
91+
92+
def test_generate_setter_invalid_name():
93+
EMPTY_NAMES = {None, ""}
94+
invalid_names = JAVA_KEYWORDS | JAVA_BUILTIN_TYPES | JAVA_LITERALS | EMPTY_NAMES
95+
for name in invalid_names:
96+
attr = Field(name=name, type="String")
97+
with pytest.raises(ValueError):
98+
generate_setter(attr)
99+

0 commit comments

Comments
 (0)