blob: 84e252b8894fec1b833fb18906e30a4a01beaf79 [file] [log] [blame]
class GStringTest extends GroovyTestCase {
void check(template, teststr) {
assert template instanceof GString
def count = template.getValueCount()
assert count == 1
assert template.getValue(0) == "Bob"
def string = template.toString()
assert string == teststr
}
void testWithOneVariable() {
def name = "Bob"
def teststr = "hello Bob how are you?"
check("hello $name how are you?", teststr)
check("hello ${name} how are you?", teststr)
check("hello ${println "feep"; name} how are you?", teststr)
check(/hello $name how are you?/, teststr)
check(/hello ${name} how are you?/, teststr)
check(/hello ${println "feep"; name} how are you?/, teststr)
}
void testWithVariableAtEnd() {
def name = "Bob"
def teststr = "hello Bob"
check("hello $name", teststr)
check("hello ${name}", teststr)
check(/hello $name/, teststr)
check(/hello ${name}/, teststr)
}
void testWithVariableAtBeginning() {
def name = "Bob"
def teststr = "Bob hey"
check("$name hey", teststr)
check("${name} hey", teststr)
name = ""
check("${name += "Bob"; name} hey", teststr)
assert name == "Bob"
check(/$name hey/, teststr)
check(/${name} hey/, teststr)
name = ""
check(/${name += "Bob"; name} hey/, teststr)
}
void testWithJustVariable() {
def teststr
def name = teststr = "Bob"
check("$name", teststr)
check("${name}", teststr)
check("${assert name=="Bob"; name}", teststr)
// Put punctuation after the variable name:
check("$name.", "Bob.")
check("$name...", "Bob...")
check("$name?", "Bob?")
check(/$name/, teststr)
check(/${name}/, teststr)
check(/${assert name=="Bob"; name}/, teststr)
// Put punctuation after the variable name:
check(/$name./, "Bob.")
check(/$name.../, "Bob...")
check(/$name?/, "Bob?")
check(/$name\?/, "Bob\\?")
check(/$name$/, "Bob\$")
def guy = [name: name]
check("${guy.name}", "Bob")
check("$guy.name", "Bob")
check("$guy.name.", "Bob.")
check("$guy.name...", "Bob...")
check("$guy.name?", "Bob?")
check(/$guy.name/, "Bob")
check(/$guy.name./, "Bob.")
check(/$guy.name.../, "Bob...")
check(/$guy.name?/, "Bob?")
check(/$guy.name\?/, "Bob\\?")
check(/$guy.name$/, "Bob\$")
}
void testWithTwoVariables() {
def name = "Bob"
def template = "${name}${name}"
def string = template.toString()
assert string == "BobBob"
}
void testWithTwoVariablesWithSpace() {
def name = "Bob"
def template = "${name} ${name}"
def string = template.toString()
assert string == "Bob Bob"
}
void testAppendString() {
def a = "dog"
def b = "a ${a}"
def c = b + " cat"
println("Created ${c}")
assert c.toString() == "a dog cat" , c
b += " cat"
assert b.toString() == "a dog cat" , b
}
void testAppendGString() {
def a = "dog"
def b = "a ${a}"
b += " cat${a}"
assert b.toString() == "a dog catdog" , b
println("Created ${b}")
}
void testReturnString() {
def value = dummyMethod()
assert value == "Hello Gromit!"
}
String dummyMethod() {
def name = "Gromit"
return "Hello ${name}!"
}
void testCoerce() {
def enc = "US-ASCII"
def value = "test".getBytes("${enc}")
println "Created ${value}"
assert value != null
}
void testGroovy441() {
def arg = "test"
def content = "${arg} ="
if (arg != "something") {
content += "?"
}
content += "= ${arg}."
assert content == "test =?= test."
}
void testTwoStringsInMiddle() {
def a = "---"
def b = "${a} :"
b += "<<"
b += ">>"
b += ": ${a}"
assert b == "--- :<<>>: ---"
}
void testAlternatingGStrings() {
def a = "---"
def b = "${a} :"
b += "<<"
b += " [[${a}]] "
b += ">>"
b += ": ${a}"
assert b == "--- :<< [[---]] >>: ---"
}
// Test case for bug GROOVY-599
void testGStringInStaticMethod() {
int value = 2
String str = "1${value}3"
int result = Integer.parseInt(str)
assert result == 123
result = Integer.parseInt("1${value}3")
assert result == 123
}
}