Skip to content

Commit 149d52c

Browse files
authored
py: implement str.lower and str.upper
Updates #232
1 parent 23c0aa2 commit 149d52c

File tree

3 files changed

+70
-0
lines changed

3 files changed

+70
-0
lines changed

py/string.go

+16
Original file line numberDiff line numberDiff line change
@@ -218,6 +218,14 @@ replaced.`)
218218
return self.(String).LStrip(args)
219219
}, 0, "lstrip(chars) -> replace chars from begining of string")
220220

221+
StringType.Dict["upper"] = MustNewMethod("upper", func(self Object, args Tuple, kwargs StringDict) (Object, error) {
222+
return self.(String).Upper()
223+
}, 0, "upper() -> a copy of the string converted to uppercase")
224+
225+
StringType.Dict["lower"] = MustNewMethod("lower", func(self Object, args Tuple, kwargs StringDict) (Object, error) {
226+
return self.(String).Lower()
227+
}, 0, "lower() -> a copy of the string converted to lowercase")
228+
221229
}
222230

223231
// Type of this object
@@ -739,6 +747,14 @@ func (s String) RStrip(args Tuple) (Object, error) {
739747
return String(strings.TrimRightFunc(string(s), f)), nil
740748
}
741749

750+
func (s String) Upper() (Object, error) {
751+
return String(strings.ToUpper(string(s))), nil
752+
}
753+
754+
func (s String) Lower() (Object, error) {
755+
return String(strings.ToLower(string(s))), nil
756+
}
757+
742758
// Check stringerface is satisfied
743759
var (
744760
_ richComparison = String("")

py/string_test.go

+46
Original file line numberDiff line numberDiff line change
@@ -98,3 +98,49 @@ func TestStringFind(t *testing.T) {
9898
})
9999
}
100100
}
101+
102+
func TestStringUpper(t *testing.T) {
103+
tests := []struct {
104+
name string
105+
s String
106+
want Object
107+
}{{
108+
name: "abc",
109+
s: String("abc"),
110+
want: String("ABC")},
111+
}
112+
for _, tt := range tests {
113+
t.Run(tt.name, func(t *testing.T) {
114+
got, err := tt.s.Upper()
115+
if err != nil {
116+
t.Fatalf("Upper() error = %v", err)
117+
}
118+
if got.(String) != tt.want.(String) {
119+
t.Fatalf("Upper() got = %v, want %v", got, tt.want)
120+
}
121+
})
122+
}
123+
}
124+
125+
func TestStringLower(t *testing.T) {
126+
tests := []struct {
127+
name string
128+
s String
129+
want Object
130+
}{{
131+
name: "ABC",
132+
s: String("ABC"),
133+
want: String("abc")},
134+
}
135+
for _, tt := range tests {
136+
t.Run(tt.name, func(t *testing.T) {
137+
got, err := tt.s.Lower()
138+
if err != nil {
139+
t.Fatalf("Lower() error = %v", err)
140+
}
141+
if got.(String) != tt.want.(String) {
142+
t.Fatalf("Lower() got = %v, want %v", got, tt.want)
143+
}
144+
})
145+
}
146+
}

py/tests/string.py

+8
Original file line numberDiff line numberDiff line change
@@ -897,6 +897,14 @@ def index(s, i):
897897
assert a.lstrip("a ") == "bada a"
898898
assert a.strip("a ") == "bad"
899899

900+
doc="upper"
901+
a = "abc"
902+
assert a.upper() == "ABC"
903+
904+
doc="lower"
905+
a = "ABC"
906+
assert a.lower() == "abc"
907+
900908
class Index:
901909
def __index__(self):
902910
return 1

0 commit comments

Comments
 (0)