Skip to content

Commit ba783b7

Browse files
committed
fix: rendering of substituted list with spacce
1 parent 93dbc6f commit ba783b7

2 files changed

Lines changed: 30 additions & 0 deletions

File tree

config/src/main/java/com/typesafe/config/impl/ConfigString.java

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -86,6 +86,8 @@ protected void render(StringBuilder sb, int indent, boolean atRoot, ConfigRender
8686
String rendered;
8787
if (options.getJson())
8888
rendered = ConfigImplUtil.renderJsonString(value);
89+
else if (!wasQuoted())
90+
rendered = value;
8991
else
9092
rendered = ConfigImplUtil.renderStringUnquotedIfPossible(value);
9193
sb.append(rendered);

config/src/test/scala/com/typesafe/config/impl/ConcatenationTest.scala

Lines changed: 28 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -8,8 +8,10 @@ import org.junit._
88
import com.typesafe.config.ConfigValue
99
import com.typesafe.config.ConfigException
1010
import com.typesafe.config.ConfigResolveOptions
11+
import com.typesafe.config.ConfigRenderOptions
1112
import com.typesafe.config.Config
1213
import com.typesafe.config.ConfigFactory
14+
import com.typesafe.config.ConfigParseOptions
1315
import scala.collection.JavaConverters._
1416

1517
class ConcatenationTest extends TestUtils {
@@ -488,6 +490,32 @@ class ConcatenationTest extends TestUtils {
488490
assertEquals(List(1, 2), conf.getIntList("x").asScala)
489491
}
490492

493+
// https://github.com/lightbend/config/issues/829
494+
@Test
495+
def renderArrayConcatenationRoundTrip() {
496+
val renderOptions = ConfigRenderOptions.defaults
497+
.setJson(false)
498+
.setOriginComments(false)
499+
.setComments(true)
500+
.setFormatted(true)
501+
val parseOptions = ConfigParseOptions.defaults.setAllowMissing(true)
502+
503+
val original = """ex1 = [1, 2]
504+
|except = ${ex1} ${ex1}
505+
|""".stripMargin
506+
val rendered = ConfigFactory
507+
.parseString(original, parseOptions)
508+
.root
509+
.render(renderOptions)
510+
511+
// the rendered config should be parseable and resolvable
512+
val resolved = ConfigFactory
513+
.parseString(rendered, parseOptions.setAllowMissing(false))
514+
.resolve()
515+
516+
assertEquals(List(1, 2, 1, 2), resolved.getIntList("except").asScala.toList)
517+
}
518+
491519
// but quoted whitespace should be an error
492520
@Test
493521
def concatSubstitutionsThatAreObjectsWithQuotedSpace() {

0 commit comments

Comments
 (0)