From 9b49221c74e6e9587537f484b38cea8e87b266cd Mon Sep 17 00:00:00 2001 From: Zalim Bashorov Date: Thu, 23 Apr 2015 21:23:38 +0300 Subject: [PATCH] Fix test case generator: escape modifiers when they used for declaration enum entry --- .../tests/generateTestDataForReservedWords.kt | 40 +++++++++++++------ 1 file changed, 28 insertions(+), 12 deletions(-) diff --git a/generators/src/org/jetbrains/kotlin/generators/tests/generateTestDataForReservedWords.kt b/generators/src/org/jetbrains/kotlin/generators/tests/generateTestDataForReservedWords.kt index 0ecf0d04b22..81388f6c63f 100644 --- a/generators/src/org/jetbrains/kotlin/generators/tests/generateTestDataForReservedWords.kt +++ b/generators/src/org/jetbrains/kotlin/generators/tests/generateTestDataForReservedWords.kt @@ -16,10 +16,13 @@ package org.jetbrains.kotlin.generators.tests.reservedWords -import java.io.File -import org.jetbrains.kotlin.renderer.KeywordStringsGenerated import com.google.dart.compiler.backend.js.ast.JsFunctionScope import org.jetbrains.kotlin.generators.di.GeneratorsFileUtil.writeFileIfContentChanged +import org.jetbrains.kotlin.lexer.JetTokens +import org.jetbrains.kotlin.renderer.KeywordStringsGenerated +import java.io.File + +val MODIFIER_KEYWORDS = JetTokens.MODIFIER_KEYWORDS_ARRAY.map { it.getValue() }.toSet() val commonCases: CaseBuilder.(String, String) -> Unit = { testByName, testByRef -> case("val", "val $KEYWORD_MARKER: Int", " = 0", testByName) @@ -213,7 +216,7 @@ fun box(): String { return "OK" }""" ) { - case("entry", "", "", "") + case("entry", "", "", "", additionalShouldBeEscaped = MODIFIER_KEYWORDS) } // ------------------------- } @@ -221,14 +224,25 @@ fun box(): String { // DSL -class Case(val name: String, val testDeclaration: String, val testDeclarationInit: String, val testBlock: String) -class Suite(val name: String, val code: String, val cases: List) +class Case( + val name: String, + val testDeclaration: String, + val testDeclarationInit: String, + val testBlock: String, + val additionalShouldBeEscaped: Set +) + +class Suite( + val name: String, + val code: String, + val cases: List +) class CaseBuilder { val cases = arrayListOf() - fun case(name: String, testDeclaration: String, testDeclarationInit: String, testBlock: String) { - cases.add(Case(name, testDeclaration, testDeclarationInit, testBlock)) + fun case(name: String, testDeclaration: String, testDeclarationInit: String, testBlock: String, additionalShouldBeEscaped: Set = setOf()) { + cases.add(Case(name, testDeclaration, testDeclarationInit, testBlock, additionalShouldBeEscaped)) } } @@ -274,7 +288,9 @@ class TestDataBuilder() { // Uses small portions of keywords instead of ALL_KEYWORDS to avoid a combinatorial explosion // Each portion contains at least one keyword which should be escaped and at least one which should not. for (keyword in nextKeywordPortion()) { - val keywordWithEscapeIfNeed = if (keyword in SHOULD_BE_ESCAPED) "`$keyword`" else keyword + val shouldBeEscaped = keyword in SHOULD_BE_ESCAPED || keyword in case.additionalShouldBeEscaped + + val keywordWithEscapeIfNeed = if (shouldBeEscaped) "`$keyword`" else keyword val out = suite.code .replace(DEFINITION_MARKER, case.testDeclaration + case.testDeclarationInit) @@ -344,8 +360,8 @@ val SHOULD_NOT_BE_ESCAPED = JsFunctionScope.RESERVED_WORDS.filter { it !in SHOUL // all keywords by portions // cyclic keyword streams -val s1 = SHOULD_BE_ESCAPED.cyclicStream() -val s2 = SHOULD_NOT_BE_ESCAPED.cyclicStream() +val s1 = SHOULD_BE_ESCAPED.cyclicSequence() +val s2 = SHOULD_NOT_BE_ESCAPED.cyclicSequence() val PORTION_PART_SIZE = 2; @@ -353,9 +369,9 @@ fun nextKeywordPortion() = s1.take(PORTION_PART_SIZE).toList() + s2.take(PORTION // CyclicStream -fun List.cyclicStream() = CyclicStream(this) +fun List.cyclicSequence() = CyclicSequence(this) -class CyclicStream(val c: List) : Stream { +class CyclicSequence(val c: List) : Sequence { var i = 0 val iterator = object : Iterator {