-
Notifications
You must be signed in to change notification settings - Fork 1
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Breaks out `BarCode` into abstract class and creates `BarCode39` and `BarCode128`. Further bar code definitions should use `BarCode` as the base class.
- Loading branch information
1 parent
2dbb616
commit ada2f97
Showing
7 changed files
with
261 additions
and
61 deletions.
There are no files selected for viewing
9 changes: 9 additions & 0 deletions
9
src/main/kotlin/com/sainsburys/k2zpl/command/barcode/BarCode.kt
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,9 @@ | ||
package com.sainsburys.k2zpl.command.barcode | ||
|
||
import com.sainsburys.k2zpl.command.ZplCommand | ||
import com.sainsburys.k2zpl.command.options.ZplFieldOrientation | ||
|
||
internal abstract class BarCode : ZplCommand { | ||
abstract val orientation: ZplFieldOrientation | ||
abstract val height: Int | ||
} |
75 changes: 75 additions & 0 deletions
75
src/main/kotlin/com/sainsburys/k2zpl/command/barcode/BarCode128.kt
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,75 @@ | ||
package com.sainsburys.k2zpl.command.barcode | ||
|
||
import com.sainsburys.k2zpl.builder.ZplBuilder | ||
import com.sainsburys.k2zpl.builder.toZplYesNo | ||
import com.sainsburys.k2zpl.command.ZplParameters | ||
import com.sainsburys.k2zpl.command.fieldData | ||
import com.sainsburys.k2zpl.command.fieldOrigin | ||
import com.sainsburys.k2zpl.command.fieldSeparator | ||
import com.sainsburys.k2zpl.command.options.ZplBarCode128Mode | ||
import com.sainsburys.k2zpl.command.options.ZplFieldOrientation | ||
import com.sainsburys.k2zpl.command.options.ZplYesNo | ||
import com.sainsburys.k2zpl.command.zplParameters | ||
|
||
internal data class BarCode128( | ||
override val orientation: ZplFieldOrientation, | ||
override val height: Int, | ||
val line: ZplYesNo, | ||
val lineAbove: ZplYesNo, | ||
val checkDigit: ZplYesNo, | ||
val mode: ZplBarCode128Mode | ||
) : BarCode() { | ||
|
||
init { | ||
require(height in 1..32000) { "Height must be between 1 and 32000" } | ||
} | ||
|
||
override val command = "^BC" | ||
|
||
override val parameters: ZplParameters = zplParameters( | ||
"o" to orientation.code, | ||
"h" to height, | ||
"l" to line, | ||
"la" to lineAbove.toString(), | ||
"c" to checkDigit.toString(), | ||
"m" to mode.toString() | ||
) | ||
} | ||
|
||
/** | ||
* Creates a Code 128 barcode marker | ||
* @param data data encoded in the barcode | ||
* @param x horizontal position | ||
* @param y vertical position | ||
* @param orientation The orientation of the barcode. | ||
* @param height The height of the barcode. | ||
* @param interpretationLine print interpretation line | ||
* @param lineAbove print interpretation line above code | ||
* @param checkDigit UCC check digit | ||
* @param mode barcode mode | ||
*/ | ||
fun ZplBuilder.barcode128( | ||
data: String, | ||
x: Int, | ||
y: Int, | ||
orientation: ZplFieldOrientation = ZplFieldOrientation.NORMAL, | ||
height: Int, | ||
interpretationLine: Boolean = false, | ||
lineAbove: Boolean = false, | ||
checkDigit: Boolean = false, | ||
mode: ZplBarCode128Mode = ZplBarCode128Mode.NONE | ||
) { | ||
fieldOrigin(x, y) | ||
command( | ||
BarCode128( | ||
orientation = orientation, | ||
height = height, | ||
line = interpretationLine.toZplYesNo(), | ||
lineAbove = lineAbove.toZplYesNo(), | ||
checkDigit = checkDigit.toZplYesNo(), | ||
mode = mode | ||
) | ||
) | ||
fieldData(data) | ||
fieldSeparator() | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
12 changes: 12 additions & 0 deletions
12
src/main/kotlin/com/sainsburys/k2zpl/command/options/ZplBarCode128Mode.kt
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,12 @@ | ||
package com.sainsburys.k2zpl.command.options | ||
|
||
enum class ZplBarCode128Mode(val value: String) { | ||
NONE("N"), | ||
UCC("U"), | ||
AUTOMATIC("A"), | ||
UCC_EAN("D"); | ||
|
||
override fun toString(): String { | ||
return value | ||
} | ||
} |
7 changes: 0 additions & 7 deletions
7
src/main/kotlin/com/sainsburys/k2zpl/command/options/ZplBarcodeType.kt
This file was deleted.
Oops, something went wrong.
111 changes: 111 additions & 0 deletions
111
src/test/kotlin/com/sainsburys/k2zpl/command/barcode/BarCode128Test.kt
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,111 @@ | ||
package com.sainsburys.k2zpl.command.barcode | ||
|
||
import com.sainsburys.k2zpl.command.options.ZplBarCode128Mode | ||
import com.sainsburys.k2zpl.command.options.ZplFieldOrientation | ||
import com.sainsburys.k2zpl.command.options.ZplYesNo | ||
import com.sainsburys.k2zpl.k2zpl | ||
import com.sainsburys.k2zpl.testBuildString | ||
import io.kotest.assertions.throwables.shouldThrow | ||
import io.kotest.core.spec.IsolationMode | ||
import io.kotest.core.spec.style.DescribeSpec | ||
import io.kotest.data.forAll | ||
import io.kotest.data.headers | ||
import io.kotest.data.row | ||
import io.kotest.data.table | ||
import io.kotest.matchers.shouldBe | ||
|
||
class BarCode128Test : DescribeSpec({ | ||
isolationMode = IsolationMode.InstancePerLeaf | ||
|
||
val subject = BarCode128( | ||
orientation = ZplFieldOrientation.NORMAL, | ||
height = 10, | ||
line = ZplYesNo.NO, | ||
lineAbove = ZplYesNo.NO, | ||
checkDigit = ZplYesNo.NO, | ||
mode = ZplBarCode128Mode.NONE | ||
) | ||
|
||
describe("BarCode128") { | ||
it("outputs correct command") { | ||
val result = subject.testBuildString() | ||
result shouldBe "^BCN,10,N,N,N,N" | ||
} | ||
it("uses orientation parameter properly") { | ||
ZplFieldOrientation.entries.forEach { | ||
subject.copy(orientation = it).testBuildString() shouldBe "^BC${it.code},10,N,N,N,N" | ||
} | ||
} | ||
it("uses height parameter properly") { | ||
subject.copy(height = 100).testBuildString() shouldBe "^BCN,100,N,N,N,N" | ||
} | ||
it("uses line parameter properly") { | ||
ZplYesNo.entries.forEach { | ||
subject.copy(line = it).testBuildString() shouldBe "^BCN,10,${it},N,N,N" | ||
} | ||
} | ||
it("uses lineAbove parameter properly") { | ||
ZplYesNo.entries.forEach { | ||
subject.copy(lineAbove = it).testBuildString() shouldBe "^BCN,10,N,${it},N,N" | ||
} | ||
} | ||
it("uses checkDigit parameter properly") { | ||
ZplYesNo.entries.forEach { | ||
subject.copy(checkDigit = it).testBuildString() shouldBe "^BCN,10,N,N,${it},N" | ||
} | ||
} | ||
it("uses mode parameter properly") { | ||
ZplBarCode128Mode.entries.forEach { | ||
subject.copy(mode = it).testBuildString() shouldBe "^BCN,10,N,N,N,${it}" | ||
} | ||
} | ||
it("requires valid parameters") { | ||
table( | ||
headers("height"), | ||
row(32001), | ||
row(0), | ||
).forAll { height -> | ||
shouldThrow<IllegalArgumentException> { | ||
subject.copy( | ||
height = height | ||
) | ||
} | ||
} | ||
} | ||
} | ||
describe("barcode128 extension") { | ||
it("outputs the correct command") { | ||
val result = k2zpl { | ||
barcode128( | ||
data = "1234567890", | ||
x = 10, | ||
y = 10, | ||
height = 10, | ||
checkDigit = true, | ||
lineAbove = true, | ||
interpretationLine = true, | ||
mode = ZplBarCode128Mode.UCC | ||
) | ||
} | ||
result shouldBe """ | ||
^FO10,10,0 | ||
^BCN,10,Y,Y,Y,U | ||
^FD1234567890 | ||
^FS | ||
""".trimIndent() | ||
} | ||
it("uses default values") { | ||
val result = k2zpl { | ||
barcode128(data = "1234567890", x = 10, y = 10, height = 10) | ||
} | ||
result shouldBe """ | ||
^FO10,10,0 | ||
^BCN,10,N,N,N,N | ||
^FD1234567890 | ||
^FS | ||
""".trimIndent() | ||
} | ||
} | ||
}) |
Oops, something went wrong.