diff --git a/generators/src/org/jetbrains/jet/generators/tests/generateTestDataForReservedWords.kt b/generators/src/org/jetbrains/jet/generators/tests/generateTestDataForReservedWords.kt index 596806c32fa..042911b2b74 100644 --- a/generators/src/org/jetbrains/jet/generators/tests/generateTestDataForReservedWords.kt +++ b/generators/src/org/jetbrains/jet/generators/tests/generateTestDataForReservedWords.kt @@ -39,8 +39,10 @@ fun main(args: Array) { 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 List.cyclicStream() = CyclicStream(this) class CyclicStream(val c: List) : Stream { var i = 0 - override fun iterator(): Iterator = object : Iterator{ + + val iterator = object : Iterator { 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 = iterator } \ No newline at end of file