From f508e0401a116ffb96cfe717b27a81fb75055c06 Mon Sep 17 00:00:00 2001 From: Peva Blanchard Date: Thu, 18 Jan 2024 23:02:43 +0100 Subject: [PATCH 1/2] cli: assess: explicit indicator unit --- .../ch/kleis/lcaac/cli/csv/CsvResultWriter.kt | 17 +++++++++++++++-- 1 file changed, 15 insertions(+), 2 deletions(-) diff --git a/cli/src/main/kotlin/ch/kleis/lcaac/cli/csv/CsvResultWriter.kt b/cli/src/main/kotlin/ch/kleis/lcaac/cli/csv/CsvResultWriter.kt index 55038a23..f2b668e7 100644 --- a/cli/src/main/kotlin/ch/kleis/lcaac/cli/csv/CsvResultWriter.kt +++ b/cli/src/main/kotlin/ch/kleis/lcaac/cli/csv/CsvResultWriter.kt @@ -1,5 +1,6 @@ package ch.kleis.lcaac.cli.csv +import ch.kleis.lcaac.core.prelude.Prelude import org.apache.commons.csv.CSVFormat import org.apache.commons.csv.CSVPrinter @@ -13,7 +14,13 @@ class CsvResultWriter { fun header(first: CsvResult): String { val header = first.request.columns() .plus(listOf("product", "amount", "reference unit")) - .plus(first.impacts.toList().map { "${it.first.getShortName()} [${it.first.referenceUnit().symbol}]" }) + .plus(first.impacts.toList() + .flatMap { + listOf( + it.first.getShortName(), + "${it.first.getShortName()}_unit", + ) + }) val s = StringBuilder() CSVPrinter(s, format).printRecord(header) return s.toString() @@ -22,7 +29,13 @@ class CsvResultWriter { fun row(result: CsvResult): String { val line = result.request.arguments() .plus(listOf(result.output.getShortName(), "1.0", result.output.referenceUnit().symbol)) - .plus(result.impacts.toList().map { it.second.amount.toString() }) + .plus(result.impacts.toList() + .flatMap { + listOf( + it.second.amount.toString(), + Prelude.sanitize(it.second.unit.toString(), toLowerCase = false), + ) + }) val s = StringBuilder() CSVPrinter(s, format).printRecord(line) return s.toString() From 3c6732728d190f71a2984f180e8f5097b824400a Mon Sep 17 00:00:00 2001 From: Peva Blanchard Date: Thu, 18 Jan 2024 23:41:59 +0100 Subject: [PATCH 2/2] cli: fix tests --- .../lcaac/cli/csv/CsvResultWriterTest.kt | 38 ++++++++++++++++++- 1 file changed, 37 insertions(+), 1 deletion(-) diff --git a/cli/src/test/kotlin/ch/kleis/lcaac/cli/csv/CsvResultWriterTest.kt b/cli/src/test/kotlin/ch/kleis/lcaac/cli/csv/CsvResultWriterTest.kt index 4920477e..ad87d2a9 100644 --- a/cli/src/test/kotlin/ch/kleis/lcaac/cli/csv/CsvResultWriterTest.kt +++ b/cli/src/test/kotlin/ch/kleis/lcaac/cli/csv/CsvResultWriterTest.kt @@ -42,6 +42,42 @@ class CsvResultWriterTest { val actual = writer.header(result) // then - assertEquals("id,x,product,amount,reference unit,co2 [kg]\n", actual) + assertEquals("id,x,product,amount,reference unit,co2,co2_unit\n", actual) + } + + @Test + fun row() { + // given + val request = CsvRequest( + "main", + emptyMap(), + header = mapOf("id" to 0, "x" to 1), + record = listOf("id-0", "0.5") + ) + val kWh = UnitValue(UnitSymbol.of("kWh"), 1000.0, Dimension.of("energy")) + val kg = UnitValue(UnitSymbol.of("kg"), 1.0, Dimension.of("mass")) + val u = UnitValue(UnitSymbol.of("u"), 1.0, Dimension.None) + val output = ProductValue( + name = "electricity", + referenceUnit = kWh, + fromProcessRef = FromProcessRefValue( + "main", + arguments = mapOf( + "x" to QuantityValue(BasicNumber(0.5), u) + ) + ) + ) + val impacts = mapOf( + IndicatorValue("co2", kg) as MatrixColumnIndex + to QuantityValue(BasicNumber(0.5), kg) + ) + val result = CsvResult(request, output, impacts) + val writer = CsvResultWriter() + + // when + val actual = writer.row(result) + + // then + assertEquals("id-0,0.5,electricity,1.0,kWh,0.5,kg\n", actual) } }