Skip to content

Commit

Permalink
refactor: moved the expression parsing classes to the support module
Browse files Browse the repository at this point in the history
  • Loading branch information
Ronald Holshausen committed Jul 15, 2018
1 parent 6ff1d71 commit 9ab62c6
Show file tree
Hide file tree
Showing 21 changed files with 137 additions and 160 deletions.
2 changes: 1 addition & 1 deletion pact-jvm-model/build.gradle
Original file line number Diff line number Diff line change
Expand Up @@ -16,7 +16,7 @@ artifacts {
}

dependencies {
compile project(":pact-jvm-pact-broker")
compile project(":pact-jvm-support"), project(":pact-jvm-pact-broker")
compile 'com.github.zafarkhaja:java-semver:0.9.0'
compile 'com.amazonaws:aws-java-sdk-s3:1.11.30'
compile 'org.apache.commons:commons-collections4:4.1'
Expand Down
1 change: 1 addition & 0 deletions pact-jvm-pact-broker/build.gradle
Original file line number Diff line number Diff line change
@@ -1,4 +1,5 @@
dependencies {
compile project(":pact-jvm-support")
compile "org.apache.commons:commons-lang3:$commonsLang3Version"
compile 'com.github.salomonbrys.kotson:kotson:2.5.0'
compile "org.apache.httpcomponents:httpclient:${project.httpClientVersion}"
Expand Down
2 changes: 1 addition & 1 deletion pact-jvm-provider-junit/build.gradle
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
dependencies {
compile project(":pact-jvm-provider_${project.scalaVersion}"),
compile project(":pact-jvm-support"), project(":pact-jvm-provider_${project.scalaVersion}"),
"org.apache.httpcomponents:fluent-hc:${project.httpClientVersion}",
"org.apache.httpcomponents:httpclient:${project.httpClientVersion}",
"junit:junit:${project.junitVersion}",
Expand Down
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
package au.com.dius.pact.provider.junit.loader;

import au.com.dius.pact.provider.junit.sysprops.SystemPropertyResolver;
import au.com.dius.pact.provider.junit.sysprops.ValueResolver;
import au.com.dius.pact.support.expressions.SystemPropertyResolver;
import au.com.dius.pact.support.expressions.ValueResolver;

import java.lang.annotation.ElementType;
import java.lang.annotation.Inherited;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -7,8 +7,8 @@
import au.com.dius.pact.model.PactSource;
import au.com.dius.pact.provider.ConsumerInfo;
import au.com.dius.pact.provider.broker.PactBrokerClient;
import au.com.dius.pact.provider.junit.sysprops.SystemPropertyResolver;
import au.com.dius.pact.provider.junit.sysprops.ValueResolver;
import au.com.dius.pact.support.expressions.SystemPropertyResolver;
import au.com.dius.pact.support.expressions.ValueResolver;
import org.apache.commons.lang3.StringUtils;
import org.apache.http.client.utils.URIBuilder;
import org.slf4j.Logger;
Expand All @@ -24,8 +24,8 @@
import java.util.List;
import java.util.Map;

import static au.com.dius.pact.provider.junit.sysprops.PactRunnerExpressionParser.parseExpression;
import static au.com.dius.pact.provider.junit.sysprops.PactRunnerExpressionParser.parseListExpression;
import static au.com.dius.pact.support.expressions.PactRunnerExpressionParser.parseExpression;
import static au.com.dius.pact.support.expressions.PactRunnerExpressionParser.parseListExpression;
import static java.util.stream.Collectors.toList;

/**
Expand Down
Original file line number Diff line number Diff line change
@@ -1,8 +1,8 @@
package au.com.dius.pact.provider.junit.loader;

import au.com.dius.pact.model.*;
import au.com.dius.pact.model.Pact;
import au.com.dius.pact.model.PactSource;
import au.com.dius.pact.provider.junit.sysprops.ValueResolver;
import au.com.dius.pact.support.expressions.ValueResolver;

import java.io.IOException;
import java.util.List;
Expand Down

This file was deleted.

This file was deleted.

This file was deleted.

Original file line number Diff line number Diff line change
Expand Up @@ -7,23 +7,18 @@
import au.com.dius.pact.provider.ProviderVerifier;
import au.com.dius.pact.provider.junit.JUnitProviderTestSupport;
import au.com.dius.pact.provider.junit.VerificationReports;
import au.com.dius.pact.provider.junit.sysprops.SystemPropertyResolver;
import au.com.dius.pact.provider.junit.sysprops.ValueResolver;
import au.com.dius.pact.provider.reporters.ReporterManager;
import au.com.dius.pact.provider.reporters.VerifierReporter;
import org.apache.commons.lang3.StringUtils;
import org.apache.commons.lang3.exception.ExceptionUtils;
import au.com.dius.pact.support.expressions.SystemPropertyResolver;
import au.com.dius.pact.support.expressions.ValueResolver;
import org.jooq.lambda.Seq;
import org.jooq.lambda.tuple.Tuple2;
import org.junit.runners.model.TestClass;

import java.io.File;
import java.util.ArrayList;
import java.util.List;
import java.util.Map;
import java.util.Optional;
import java.util.function.BiConsumer;
import java.util.stream.Collectors;

/**
* Out-of-the-box implementation of {@link Target},
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -5,11 +5,11 @@ import au.com.dius.pact.pactbroker.InvalidHalResponse
import au.com.dius.pact.pactbroker.PactBrokerConsumer
import au.com.dius.pact.provider.ConsumerInfo
import au.com.dius.pact.provider.broker.PactBrokerClient
import au.com.dius.pact.provider.junit.sysprops.ValueResolver
import au.com.dius.pact.support.expressions.ValueResolver
import spock.lang.Specification
import spock.util.environment.RestoreSystemProperties

import static au.com.dius.pact.provider.junit.sysprops.PactRunnerExpressionParser.VALUES_SEPARATOR
import static au.com.dius.pact.support.expressions.PactRunnerExpressionParser.VALUES_SEPARATOR

class PactBrokerLoaderSpec extends Specification {

Expand Down
Original file line number Diff line number Diff line change
@@ -1,8 +1,8 @@
package au.com.dius.pact.provider.junit

import au.com.dius.pact.provider.junit.loader.PactBroker
import au.com.dius.pact.provider.junit.sysprops.PactRunnerExpressionParser.parseExpression
import au.com.dius.pact.provider.junit.sysprops.PactRunnerExpressionParser.parseListExpression
import au.com.dius.pact.support.expressions.PactRunnerExpressionParser.parseExpression
import au.com.dius.pact.support.expressions.PactRunnerExpressionParser.parseListExpression
import org.hamcrest.CoreMatchers.`is`
import org.hamcrest.MatcherAssert.assertThat
import org.hamcrest.Matchers.contains
Expand Down
2 changes: 1 addition & 1 deletion pact-jvm-provider-junit5/build.gradle
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
dependencies {
compile project(":pact-jvm-provider-junit_${project.scalaVersion}")
compile project(":pact-jvm-support"), project(":pact-jvm-provider-junit_${project.scalaVersion}")
compile "org.junit.jupiter:junit-jupiter-api:${project.junit5Version}"

testRuntime "ch.qos.logback:logback-classic:${project.logbackVersion}"
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -18,8 +18,8 @@ import au.com.dius.pact.provider.junit.State
import au.com.dius.pact.provider.junit.VerificationReports
import au.com.dius.pact.provider.junit.loader.PactLoader
import au.com.dius.pact.provider.junit.loader.PactSource
import au.com.dius.pact.provider.junit.sysprops.SystemPropertyResolver
import au.com.dius.pact.provider.junit.sysprops.ValueResolver
import au.com.dius.pact.support.expressions.ValueResolver
import au.com.dius.pact.support.expressions.SystemPropertyResolver
import au.com.dius.pact.provider.reporters.ReporterManager
import mu.KLogging
import org.apache.http.HttpRequest
Expand Down
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
package au.com.dius.pact.provider.spring

import au.com.dius.pact.provider.junit.sysprops.SystemPropertyResolver
import au.com.dius.pact.provider.junit.sysprops.ValueResolver
import au.com.dius.pact.support.expressions.SystemPropertyResolver
import au.com.dius.pact.support.expressions.ValueResolver
import org.springframework.core.env.Environment

class SpringEnvironmentResolver(private val environment: Environment) : ValueResolver {
Expand Down
3 changes: 3 additions & 0 deletions pact-jvm-support/build.gradle
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
dependencies {
compile "org.apache.commons:commons-lang3:${project.commonsLang3Version}"
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,50 @@
package au.com.dius.pact.support.expressions

import java.util.StringJoiner

object PactRunnerExpressionParser {

const val VALUES_SEPARATOR = ","
const val START_EXPRESSION = "\${"
const val END_EXPRESSION = '}'

@JvmOverloads
@JvmStatic
fun parseListExpression(value: String, valueResolver: ValueResolver = SystemPropertyResolver()): List<String> {
return replaceExpressions(value, valueResolver).split(VALUES_SEPARATOR).filter { it.isNotEmpty() }
}

@JvmOverloads
@JvmStatic
fun parseExpression(value: String, valueResolver: ValueResolver = SystemPropertyResolver()): String {
return if (value.contains(START_EXPRESSION)) {
replaceExpressions(value, valueResolver)
} else value
}

private fun replaceExpressions(value: String, valueResolver: ValueResolver): String {
val joiner = StringJoiner("")

var buffer = value
var position = buffer.indexOf(START_EXPRESSION)
while (position >= 0) {
if (position > 0) {
joiner.add(buffer.substring(0, position))
}
val endPosition = buffer.indexOf(END_EXPRESSION, position)
if (endPosition < 0) {
throw RuntimeException("Missing closing brace in expression string \"$value]\"")
}
var expression = ""
if (endPosition - position > 2) {
expression = valueResolver.resolveValue(buffer.substring(position + 2, endPosition))
}
joiner.add(expression)
buffer = buffer.substring(endPosition + 1)
position = buffer.indexOf(START_EXPRESSION)
}
joiner.add(buffer)

return joiner.toString()
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,53 @@
package au.com.dius.pact.support.expressions

import org.apache.commons.lang3.StringUtils

class SystemPropertyResolver : ValueResolver {

override fun resolveValue(property: String): String {
val tuple = PropertyValueTuple(property).invoke()
var propertyValue: String? = System.getProperty(tuple.propertyName!!)
if (propertyValue == null) {
propertyValue = System.getenv(tuple.propertyName)
}
if (propertyValue == null) {
propertyValue = tuple.defaultValue
}
if (propertyValue == null) {
throw RuntimeException("Could not resolve property \"${tuple.propertyName}\" in the system properties or " +
"environment variables and no default value is supplied")
}
return propertyValue
}

override fun propertyDefined(property: String): Boolean {
var propertyValue: String? = System.getProperty(property)
if (propertyValue == null) {
propertyValue = System.getenv(property)
}
return propertyValue != null
}

class PropertyValueTuple(property: String) {
var propertyName: String? = null
private set
var defaultValue: String? = null
private set

init {
this.propertyName = property
this.defaultValue = null
}

operator fun invoke(): PropertyValueTuple {
if (propertyName!!.contains(":")) {
val kv = StringUtils.splitPreserveAllTokens(propertyName, ':')
propertyName = kv[0]
if (kv.size > 1) {
defaultValue = kv[1]
}
}
return this
}
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,6 @@
package au.com.dius.pact.support.expressions

interface ValueResolver {
fun resolveValue(expression: String): String
fun propertyDefined(property: String): Boolean
}
Loading

0 comments on commit 9ab62c6

Please sign in to comment.