From 609f661fb74d4674c6bcebd0ba4d15a87203bfe9 Mon Sep 17 00:00:00 2001 From: Artur Bosch Date: Mon, 29 Jul 2019 20:09:33 +0200 Subject: [PATCH] Setup quality baseline --- .travis.yml | 17 ++++++++++++ README.md | 3 +++ baseline.xml | 22 +++++++++++++++ build.gradle | 14 +++++++--- gradle.properties | 9 ++++--- gradle/wrapper/gradle-wrapper.properties | 2 +- .../aliases/AliasesResolverProviderTest.kt | 4 +-- .../gitlab/arturbosch/ksh/commands/Script.kt | 6 ++--- .../arturbosch/ksh/commands/ScriptTest.kt | 3 ++- .../ksh/converters/ConverterTest.kt | 16 ++++++----- .../ksh/defaults/DefaultCompleterTest.kt | 17 ++++++------ .../ksh/defaults/DefaultResolverTest.kt | 27 ++++++++++--------- .../ksh/defaults/FixedResolverBugsTest.kt | 3 ++- .../ksh/template/SettingsProvider.kt | 1 - 14 files changed, 99 insertions(+), 45 deletions(-) create mode 100644 .travis.yml create mode 100644 baseline.xml diff --git a/.travis.yml b/.travis.yml new file mode 100644 index 0000000..4781229 --- /dev/null +++ b/.travis.yml @@ -0,0 +1,17 @@ +language: java +matrix: + include: + - os: linux + jdk: openjdk8 + - os: linux + jdk: openjdk11 +install: true +script: + - ./gradlew build detekt publishToMavenLocal +before_cache: + - rm -f $HOME/.gradle/caches/modules-2/modules-2.lock + - rm -fr $HOME/.gradle/caches/*/plugin-resolution/ +cache: + directories: + - $HOME/.gradle/caches/ + - $HOME/.gradle/wrapper/ diff --git a/README.md b/README.md index d4efad3..61cde5f 100644 --- a/README.md +++ b/README.md @@ -1,4 +1,7 @@ # ksh + +[![build status](https://travis-ci.org/arturbosch/ksh.svg?branch=master)](https://travis-ci.org/arturbosch/ksh) +[![CodeFactor](https://www.codefactor.io/repository/github/arturbosch/ksh/badge)](https://www.codefactor.io/repository/github/arturbosch/ksh) [ ![Download](https://api.bintray.com/packages/arturbosch/generic/ksh/images/download.svg) ](https://bintray.com/arturbosch/generic/ksh/_latestVersion) A framework to build shell-like applications diff --git a/baseline.xml b/baseline.xml new file mode 100644 index 0000000..0603a5b --- /dev/null +++ b/baseline.xml @@ -0,0 +1,22 @@ + + + + + ComplexMethod:DefaultParameterResolver.kt$DefaultParameterResolver$override fun evaluate(methodTarget: MethodTarget, input: InputLine): List<Any?> + ComplexMethod:Help.kt$Help$@ShellMethod(help = "Prints this help message.") fun main( @ShellOption(["", "--command"], defaultValue = "") command: String ): String + ComplexMethod:Help.kt$Help$private fun forSpecificCommand(command: ShellClass, methodTarget: MethodTarget): String + EmptyFunctionBlock:ShellClass.kt$ShellClass${} + LongMethod:DefaultParameterResolver.kt$DefaultParameterResolver$override fun evaluate(methodTarget: MethodTarget, input: InputLine): List<Any?> + LongParameterList:TestCommands.kt$Conversions$( @ShellOption(["-i"]) aInt: Int, @ShellOption(["-f"]) aFloat: Float, @ShellOption(["-b"]) aBool: Boolean, @ShellOption(["-d"]) aDouble: Double, @ShellOption(["-s"]) aString: String, @ShellOption(["-file"]) aFile: File ) + MagicNumber:AliasesResolver.kt$AliasesResolver$100 + MatchingDeclarationName:Main.kt$io.gitlab.arturbosch.ksh.Main.kt + MatchingDeclarationName:TestContext.kt$io.gitlab.arturbosch.ksh.test.TestContext.kt + MaxLineLength:ContextExtensions.kt$container.get<Debugging>() .log { "Invoking '${target.methodTarget.name}' on '${target.shellClass.javaClass.simpleName}' with args='${target.arguments}'" } + MaximumLineLength: + NoUnusedImports: + SpreadOperator:DefaultMethodTarget.kt$DefaultMethodTarget$(command, *arguments.toTypedArray()) + SpreadOperator:MethodTarget.kt$MethodTarget$(command, *arguments.toTypedArray()) + TooGenericExceptionCaught:Bootstrap.kt$Bootstrap$e: RuntimeException + TooManyFunctions:Reflection.kt$io.gitlab.arturbosch.ksh.defaults.Reflection.kt + + diff --git a/build.gradle b/build.gradle index 82daf4f..806cbd8 100755 --- a/build.gradle +++ b/build.gradle @@ -8,20 +8,26 @@ buildscript { } plugins { - id "com.github.johnrengelman.shadow" version "5.0.0" + id "com.github.johnrengelman.shadow" version "5.1.0" id 'com.github.ben-manes.versions' version '0.21.0' - id "com.jfrog.bintray" version "1.8.1" - id "org.sonarqube" version "2.7" - id "io.gitlab.arturbosch.detekt" version "1.0.0-RC14" + id "com.jfrog.bintray" version "1.8.4" + id "org.sonarqube" version "2.7.1" + id "io.gitlab.arturbosch.detekt" version "1.0.0-RC16" } repositories { jcenter() } +dependencies { + detektPlugins "io.gitlab.arturbosch.detekt:detekt-formatting:$detektVersion" +} + detekt { input = files(rootProject.rootDir) buildUponDefaultConfig = true + failFast = true + baseline = file("$rootDir/baseline.xml") } allprojects { diff --git a/gradle.properties b/gradle.properties index 058bda1..c6d836f 100755 --- a/gradle.properties +++ b/gradle.properties @@ -1,9 +1,10 @@ kshVersion=0.4.0 -kutilsVersion=0.6.0 -kotlinVersion=1.3.31 -jlineVersion=3.11.0 +kutilsVersion=0.6.4 +kotlinVersion=1.3.41 +jlineVersion=3.12.1 jcommanderVersion=1.72 metainfVersion=1.7 junitVersion=4.12 -assertkVersion=0.10 +assertkVersion=0.19 +detektVersion=1.0.0-RC16 systemProp.sonar.host.url=http://localhost:9000 diff --git a/gradle/wrapper/gradle-wrapper.properties b/gradle/wrapper/gradle-wrapper.properties index ee67112..ee69dd6 100755 --- a/gradle/wrapper/gradle-wrapper.properties +++ b/gradle/wrapper/gradle-wrapper.properties @@ -1,5 +1,5 @@ distributionBase=GRADLE_USER_HOME distributionPath=wrapper/dists -distributionUrl=https\://services.gradle.org/distributions/gradle-5.0-all.zip +distributionUrl=https\://services.gradle.org/distributions/gradle-5.4.1-all.zip zipStoreBase=GRADLE_USER_HOME zipStorePath=wrapper/dists diff --git a/ksh-aliases/src/test/kotlin/io/gitlab/arturbosch/ksh/aliases/AliasesResolverProviderTest.kt b/ksh-aliases/src/test/kotlin/io/gitlab/arturbosch/ksh/aliases/AliasesResolverProviderTest.kt index 0d50e6c..61b6452 100644 --- a/ksh-aliases/src/test/kotlin/io/gitlab/arturbosch/ksh/aliases/AliasesResolverProviderTest.kt +++ b/ksh-aliases/src/test/kotlin/io/gitlab/arturbosch/ksh/aliases/AliasesResolverProviderTest.kt @@ -1,6 +1,6 @@ package io.gitlab.arturbosch.ksh.aliases -import assertk.assert +import assertk.assertThat import assertk.assertions.isEqualTo import io.gitlab.arturbosch.ksh.NoopContainer import io.gitlab.arturbosch.ksh.api.SimpleInputLine @@ -13,7 +13,7 @@ class AliasesResolverProviderTest { fun `resolves aliases`() { val resolver = AliasesResolverProvider().provide(NoopContainer()) val transformed = resolver.transform(SimpleInputLine("hello")) - assert(transformed.words()).isEqualTo(listOf("help", "hello")) + assertThat(transformed.words()).isEqualTo(listOf("help", "hello")) } } diff --git a/ksh-framework/src/main/kotlin/io/gitlab/arturbosch/ksh/commands/Script.kt b/ksh-framework/src/main/kotlin/io/gitlab/arturbosch/ksh/commands/Script.kt index a74a8e5..4342353 100755 --- a/ksh-framework/src/main/kotlin/io/gitlab/arturbosch/ksh/commands/Script.kt +++ b/ksh-framework/src/main/kotlin/io/gitlab/arturbosch/ksh/commands/Script.kt @@ -6,8 +6,8 @@ import io.gitlab.arturbosch.ksh.api.ShellClass import io.gitlab.arturbosch.ksh.api.ShellMethod import io.gitlab.arturbosch.ksh.api.ShellOption import io.gitlab.arturbosch.ksh.interpret +import io.gitlab.arturbosch.kutils.Path import io.gitlab.arturbosch.kutils.consume -import io.gitlab.arturbosch.kutils.path import io.gitlab.arturbosch.kutils.process import java.io.IOException import kotlin.properties.Delegates @@ -34,7 +34,7 @@ class Script : ShellClass { ): String = try { val (out, err, status) = process( - command.split(" "), path(workDir ?: ".").toFile() + command.split(" "), Path(workDir ?: ".").toFile() ).consume() (if (status == 0) out else err).joinToString(sep) } catch (ioe: IOException) { @@ -45,7 +45,7 @@ class Script : ShellClass { fun file( @ShellOption(["", "--script"], help = "Path to a ksh script") scriptName: String ) = try { - context.interpret(path(scriptName)) + context.interpret(Path(scriptName)) } catch (ioe: IOException) { throw IllegalArgumentException("Error executing script 'command'.", ioe) } diff --git a/ksh-framework/src/test/kotlin/io/gitlab/arturbosch/ksh/commands/ScriptTest.kt b/ksh-framework/src/test/kotlin/io/gitlab/arturbosch/ksh/commands/ScriptTest.kt index 928582f..d3d8937 100755 --- a/ksh-framework/src/test/kotlin/io/gitlab/arturbosch/ksh/commands/ScriptTest.kt +++ b/ksh-framework/src/test/kotlin/io/gitlab/arturbosch/ksh/commands/ScriptTest.kt @@ -1,5 +1,6 @@ package io.gitlab.arturbosch.ksh.commands +import assertk.assertThat import assertk.assertions.isEqualTo import io.gitlab.arturbosch.ksh.test.TestShellBuilder import io.gitlab.arturbosch.ksh.test.get @@ -30,6 +31,6 @@ internal class ScriptTest { """.trimIndent() - assertk.assert(actual).isEqualTo(expected) + assertThat(actual).isEqualTo(expected) } } diff --git a/ksh-framework/src/test/kotlin/io/gitlab/arturbosch/ksh/converters/ConverterTest.kt b/ksh-framework/src/test/kotlin/io/gitlab/arturbosch/ksh/converters/ConverterTest.kt index 2b0871d..0335c01 100755 --- a/ksh-framework/src/test/kotlin/io/gitlab/arturbosch/ksh/converters/ConverterTest.kt +++ b/ksh-framework/src/test/kotlin/io/gitlab/arturbosch/ksh/converters/ConverterTest.kt @@ -1,6 +1,7 @@ package io.gitlab.arturbosch.ksh.converters -import assertk.assertions.each +import assertk.assertThat +import assertk.assertions.isInstanceOf import io.gitlab.arturbosch.ksh.NoopContainer import io.gitlab.arturbosch.ksh.defaults.DefaultConversions import io.gitlab.arturbosch.ksh.defaults.providers.DefaultConvertersProvider @@ -21,12 +22,13 @@ class ConverterTest { fun defaultConvertersWork() { val conversions = DefaultConversions(DefaultConvertersProvider().provide(NoopContainer())) - assertk.assert { - ConverterTest::class.java.getDeclaredMethod("parameters", Path::class.java, File::class.java) - .parameters - .map { it to associateBy(it) } - .map { conversions.convert(it.first, it.second) } - }.returnedValue { each { checkNotNull(it.actual)::class in setOf(Path::class, File::class) } } + val (first, second) = ConverterTest::class.java.getDeclaredMethod("parameters", Path::class.java, File::class.java) + .parameters + .map { it to associateBy(it) } + .map { conversions.convert(it.first, it.second) } + + assertThat(first!!).isInstanceOf(Path::class) + assertThat(second!!).isInstanceOf(File::class) } private fun associateBy(it: Parameter): String { diff --git a/ksh-framework/src/test/kotlin/io/gitlab/arturbosch/ksh/defaults/DefaultCompleterTest.kt b/ksh-framework/src/test/kotlin/io/gitlab/arturbosch/ksh/defaults/DefaultCompleterTest.kt index dcc6d3b..cf72ba4 100755 --- a/ksh-framework/src/test/kotlin/io/gitlab/arturbosch/ksh/defaults/DefaultCompleterTest.kt +++ b/ksh-framework/src/test/kotlin/io/gitlab/arturbosch/ksh/defaults/DefaultCompleterTest.kt @@ -1,5 +1,6 @@ package io.gitlab.arturbosch.ksh.defaults +import assertk.assertThat import assertk.assertions.containsAll import io.gitlab.arturbosch.ksh.Conversions import io.gitlab.arturbosch.ksh.Hello @@ -34,48 +35,48 @@ class DefaultCompleterTest { @Test fun `completion of all shell classes if nothing is entered`() { val candidates = completer.complete("") - assertk.assert(candidates).containsAll("hello", "conversions") + assertThat(candidates).containsAll("hello", "conversions") } @Test fun `completion of hello command when only word is hel`() { val candidates = completer.complete("hel") - assertk.assert(candidates).containsAll("hello") + assertThat(candidates).containsAll("hello") } @Test fun `completion of sub commands of hello are shown`() { val candidates = completer.complete("hello ") - assertk.assert(candidates).containsAll("say", "count", "invalid") + assertThat(candidates).containsAll("say", "count", "invalid") } @Test fun `completion of main command's (hello) only option is shown as second word indicates an option`() { val candidates = completer.complete("hello --") - assertk.assert(candidates).containsAll("--name", "-n") + assertThat(candidates).containsAll("--name", "-n") } @Test fun `completion of sub commands options when third word is empty`() { val candidates = completer.complete("hello count ") - assertk.assert(candidates).containsAll("--name", "-n", "--times") + assertThat(candidates).containsAll("--name", "-n", "--times") } @Test fun `completion of sub commands options when third word indicates an option`() { val candidates = completer.complete("hello count -") - assertk.assert(candidates).containsAll("--name", "-n", "--times") + assertThat(candidates).containsAll("--name", "-n", "--times") } @Test fun `completion of sub commands options when third word indicates a long option`() { val candidates = completer.complete("hello count --") - assertk.assert(candidates).containsAll("--name", "--times") + assertThat(candidates).containsAll("--name", "--times") } @Test fun `completion of sub commands option 'times'`() { val candidates = completer.complete("hello count --tim") - assertk.assert(candidates).containsAll("--times") + assertThat(candidates).containsAll("--times") } } diff --git a/ksh-framework/src/test/kotlin/io/gitlab/arturbosch/ksh/defaults/DefaultResolverTest.kt b/ksh-framework/src/test/kotlin/io/gitlab/arturbosch/ksh/defaults/DefaultResolverTest.kt index a65135f..621166c 100755 --- a/ksh-framework/src/test/kotlin/io/gitlab/arturbosch/ksh/defaults/DefaultResolverTest.kt +++ b/ksh-framework/src/test/kotlin/io/gitlab/arturbosch/ksh/defaults/DefaultResolverTest.kt @@ -1,5 +1,6 @@ package io.gitlab.arturbosch.ksh.defaults +import assertk.assertThat import assertk.assertions.isEqualTo import assertk.assertions.isIn import assertk.assertions.isInstanceOf @@ -20,77 +21,77 @@ class DefaultResolverTest { @Test fun resolveMainWithOneOptionIdLessParameter() { val target = resolver.evaluate("hello Artur") - assertk.assert(target).isEqualTo("Hello Artur!") + assertThat(target).isEqualTo("Hello Artur!") } @Test fun resolveMainWithOneParameter() { val target = resolver.evaluate("hello --name Artur") - assertk.assert(target).isEqualTo("Hello Artur!") + assertThat(target).isEqualTo("Hello Artur!") } @Test fun resolveMainWithOneDefaultParameter() { val target = resolver.evaluate("hello") - assertk.assert(target).isEqualTo("Hello World!") + assertThat(target).isEqualTo("Hello World!") } @Test fun resolveMethodWithOneParameter() { val target = resolver.evaluate("hello say --name Artur") - assertk.assert(target).isEqualTo("Hello Artur!") + assertThat(target).isEqualTo("Hello Artur!") } @Test fun resolveMethodWithOneDefaultParameter() { val target = resolver.evaluate("hello say") - assertk.assert(target).isEqualTo("Hello OMG!") + assertThat(target).isEqualTo("Hello OMG!") } @Test fun resolveMethodWithTwoParametersAndDefaults() { val target = resolver.evaluate("hello count") - assertk.assert(target).isEqualTo("Hello OMGOMGOMG") + assertThat(target).isEqualTo("Hello OMGOMGOMG") } @Test fun resolveMethodWithTwoParametersOneDefault() { val target = resolver.evaluate("hello count --name Artur") - assertk.assert(target).isEqualTo("Hello ArturArturArtur") + assertThat(target).isEqualTo("Hello ArturArturArtur") } @Test fun resolveMethodWithTwoParametersNoDefaults() { val target = resolver.evaluate("hello count --name Artur --times 1") - assertk.assert(target).isEqualTo("Hello Artur") + assertThat(target).isEqualTo("Hello Artur") } @Test fun resolveClassWithCustomIdAndMethodWithAllConversionsAndRandomParameters() { val command = "conversions -file /home/test -i 5 -b -f 2.0f -d 5.0 -s bla" val target = resolver.evaluate(command) - assertk.assert(target).isEqualTo("5 2.0 true 5.0 bla /home/test") + assertThat(target).isEqualTo("5 2.0 true 5.0 bla /home/test") } @Test fun resolveTwoUnnamedParameters() { val target = resolver.evaluate("hello invalid Artur 25") - assertk.assert(target).isEqualTo("Hello Artur - 25") + assertThat(target).isEqualTo("Hello Artur - 25") } @Test fun resolvesPathParameters() { val target = resolver.evaluate("conversions path this/is/a/path") - assertk.assert(target!!).isInstanceOf(Path::class) + assertThat(target!!).isInstanceOf(Path::class) } @Test fun resolvesToDefaultMainOnEmptyInput() { - assertk.assert(resolver.evaluate("double")).isEqualTo("first") + assertThat(resolver.evaluate("double")).isEqualTo("first") } @Test fun resolvedToAnyIfMainIsSpecifiedMoreThanOneTime() { - assertk.assert(resolver.evaluate("double main")).isIn("first", "second") + assertThat(resolver.evaluate("double main")).isIn("first", "second") } } diff --git a/ksh-framework/src/test/kotlin/io/gitlab/arturbosch/ksh/defaults/FixedResolverBugsTest.kt b/ksh-framework/src/test/kotlin/io/gitlab/arturbosch/ksh/defaults/FixedResolverBugsTest.kt index 065e421..dbd70b4 100755 --- a/ksh-framework/src/test/kotlin/io/gitlab/arturbosch/ksh/defaults/FixedResolverBugsTest.kt +++ b/ksh-framework/src/test/kotlin/io/gitlab/arturbosch/ksh/defaults/FixedResolverBugsTest.kt @@ -1,5 +1,6 @@ package io.gitlab.arturbosch.ksh.defaults +import assertk.assertThat import assertk.assertions.isEqualTo import io.gitlab.arturbosch.ksh.Gradle import io.gitlab.arturbosch.ksh.test.testResolver @@ -15,6 +16,6 @@ class FixedResolverBugsTest { @Test fun `should skip non flag words after arity is resolved`() { val target = resolver.evaluate("gradle module testy -wd /bla/bla -g a.b.c") - assertk.assert(target).isEqualTo("") + assertThat(target).isEqualTo("") } } diff --git a/ksh-template/src/main/kotlin/io/gitlab/arturbosch/ksh/template/SettingsProvider.kt b/ksh-template/src/main/kotlin/io/gitlab/arturbosch/ksh/template/SettingsProvider.kt index 155ff84..c0705f7 100644 --- a/ksh-template/src/main/kotlin/io/gitlab/arturbosch/ksh/template/SettingsProvider.kt +++ b/ksh-template/src/main/kotlin/io/gitlab/arturbosch/ksh/template/SettingsProvider.kt @@ -15,4 +15,3 @@ class SettingsProvider : ShellSettingsProvider { } } } -