diceware: add WordListParser and tests

This commit is contained in:
Harsh Shandilya 2021-12-10 00:32:25 +05:30
parent 16392b7581
commit 5395b4853b
No known key found for this signature in database
GPG key ID: 366D7BBAD1031E80
2 changed files with 41 additions and 0 deletions

View file

@ -0,0 +1,21 @@
/*
* Copyright © 2014-2021 The Android Password Store Authors. All Rights Reserved.
* SPDX-License-Identifier: GPL-3.0-only
*/
package dev.msfjarvis.aps.passgen.diceware
import java.io.InputStream
internal object WordListParser {
fun parse(wordlistStream: InputStream) =
wordlistStream
.bufferedReader()
.lineSequence()
.map { line -> line.split(DELIMITER) }
.filter { items -> items.size == 2 && items[0].toIntOrNull() != null }
.map { items -> items[0].toInt() to items[1] }
.toMap()
private const val DELIMITER = "\t"
}

View file

@ -0,0 +1,20 @@
/*
* Copyright © 2014-2021 The Android Password Store Authors. All Rights Reserved.
* SPDX-License-Identifier: GPL-3.0-only
*/
package dev.msfjarvis.aps.passgen.diceware
import kotlin.test.Test
import kotlin.test.assertEquals
class WordListParserTest {
@Test
fun parseWordList() {
val stream = "11111\tabcde\n22222\tfghij".byteInputStream()
val parsedMap = WordListParser.parse(stream)
assertEquals(2, parsedMap.size)
assertEquals("abcde", parsedMap[11111])
assertEquals("fghij", parsedMap[22222])
}
}