Improve testData generator for reserved words.

Cashing iterator in CyclicStream.
Detect generating unexpected testdata file(e.g. may caused because of bug in stdlib).
This commit is contained in:
Zalim Bashorov
2014-09-27 00:03:48 +04:00
parent 098b4c170f
commit 2352085391
@@ -39,8 +39,10 @@ fun main(args: Array<String>) {
generateTestDataForReservedWords()
}
val TEST_DATA_DIR_FOR_RESERVED_WORDS = "js/js.translator/testData/reservedWords/cases"
fun generateTestDataForReservedWords() {
generate("js/js.translator/testData/reservedWords/cases") {
generate(TEST_DATA_DIR_FOR_RESERVED_WORDS) {
suite("toplevel",
"""
$DEFINITION_MARKER
@@ -239,10 +241,29 @@ class TestDataBuilder() {
}
fun generate(testDataDirPath: String) {
fun File.readLinesOrNull() = if (!exists()) null else readLines()
val testDataDir = File(testDataDirPath)
val shouldBeEscapedFile = File("$testDataDirPath/SHOULD_BE_ESCAPED.txt")
val shouldNotBeEscapedFile = File("$testDataDirPath/SHOULD_NOT_BE_ESCAPED.txt")
val shouldBeEscapedFromFile = shouldBeEscapedFile.readLinesOrNull()?.drop(1)
val shouldNotBeEscapedFromFile = shouldNotBeEscapedFile.readLinesOrNull()?.drop(1)
val isCreatingFromScratch = shouldBeEscapedFromFile != SHOULD_BE_ESCAPED || shouldNotBeEscapedFromFile != SHOULD_NOT_BE_ESCAPED
if (!testDataDir.exists() && !testDataDir.mkdirs()) {
println("Unable to find or create test data dir: '$testDataDirPath'.")
return
error("Unable to find or create test data directory: '$testDataDirPath'.")
}
else if (isCreatingFromScratch) {
if (testDataDir.listFiles()?.all { it.delete() } ?: true) {
println("Create testdata files from scratch.")
}
else {
error("Can not clean testdata directory.")
}
}
for (suite in suites) {
@@ -264,10 +285,19 @@ class TestDataBuilder() {
val fileName = "${suite.name.decapitalize()}${case.name.capitalize()}${keyword.capitalize()}.kt"
File(testDataDirPath + "/" + fileName).writeText(out)
val testDataFile = File(testDataDirPath + "/" + fileName)
assert(isCreatingFromScratch xor testDataFile.exists(), "Unexpected file name: $fileName")
testDataFile.writeText(out)
}
}
}
if (isCreatingFromScratch) {
shouldBeEscapedFile.writeText("$PREAMBLE_MESSAGE\n${SHOULD_BE_ESCAPED.join("\n")}")
shouldNotBeEscapedFile.writeText("$PREAMBLE_MESSAGE\n${SHOULD_NOT_BE_ESCAPED.join("\n")}")
}
}
}
@@ -283,9 +313,10 @@ val DECLARATION_INIT_MARKER = "DECLARATION_INIT"
val TEST_BLOCK_MARKER = "TEST_BLOCK"
val KEYWORD_MARKER = "KEYWORD"
val PREAMBLE_MESSAGE = "NOTE THIS FILE IS AUTO-GENERATED by the generateTestDataForReservedWords.kt. DO NOT EDIT!"
val PREAMBLE = """package foo
// NOTE THIS FILE IS AUTO-GENERATED by the generateTestDataForReservedWords.kt. DO NOT EDIT!
// $PREAMBLE_MESSAGE
"""
fun testRenamed(reference: String = "$KEYWORD_MARKER") = "testRenamed(\"$KEYWORD_MARKER\", { $reference })"
@@ -299,11 +330,8 @@ val testNotRenamedByRef = testNotRenamed("::$KEYWORD_MARKER")
// KEYWORDS
val ALL_KEYWORDS = JsFunctionScope.RESERVED_WORDS.toList()
val SHOULD_BE_ESCAPED = (ALL_KEYWORDS.filter { it in KeywordStringsGenerated.KEYWORDS } union setOf("catch", "finally")).toSortedList()
val SHOULD_NOT_BE_ESCAPED = ALL_KEYWORDS.filter { it !in SHOULD_BE_ESCAPED }.toSortedList()
val SHOULD_BE_ESCAPED = JsFunctionScope.RESERVED_WORDS.filter { it in KeywordStringsGenerated.KEYWORDS }.toSortedList()
val SHOULD_NOT_BE_ESCAPED = JsFunctionScope.RESERVED_WORDS.filter { it !in SHOULD_BE_ESCAPED }.toSortedList()
// all keywords by portions
@@ -321,11 +349,14 @@ fun <T> List<T>.cyclicStream() = CyclicStream(this)
class CyclicStream<T>(val c: List<T>) : Stream<T> {
var i = 0
override fun iterator(): Iterator<T> = object : Iterator<T>{
val iterator = object : Iterator<T> {
override fun next(): T {
i = if (i >= c.size) 0 else i
i = if (i >= c.size()) 0 else i
return c[i++]
}
override fun hasNext(): Boolean = true
}
override fun iterator(): Iterator<T> = iterator
}