diff --git a/.gitignore b/.gitignore index 159acd26cc95288f99665787def25aca09c8382a..48fc2033aca5d99bacea671248e169edaddfe05c 100644 --- a/.gitignore +++ b/.gitignore @@ -1,146 +1,200 @@ -###################### -# Project Specific -###################### -/src/main/webapp/content/css/main.css -/target/classes/static/** -/src/test/javascript/coverage/ - -###################### -# Node -###################### -/node/ -node_tmp/ -node_modules/ -npm-debug.log.* -/.awcache/* -/.cache-loader/* - -###################### -# SASS -###################### -.sass-cache/ - -###################### -# Eclipse -###################### -*.pydevproject -.project +# Created by https://www.toptal.com/developers/gitignore/api/eclipse,intellij,visualstudiocode,java,maven +# Edit at https://www.toptal.com/developers/gitignore?templates=eclipse,intellij,visualstudiocode,java,maven + +### Eclipse ### .metadata +bin/ tmp/ -tmp/**/* *.tmp *.bak *.swp *~.nib local.properties -.classpath .settings/ .loadpath -.factorypath -/src/main/resources/rebel.xml +.recommenders # External tool builders -.externalToolBuilders/** +.externalToolBuilders/ # Locally stored "Eclipse launch configurations" *.launch -# CDT-specific +# PyDev specific (Python IDE for Eclipse) +*.pydevproject + +# CDT-specific (C/C++ Development Tooling) .cproject -# PDT-specific +# CDT- autotools +.autotools + +# Java annotation processor (APT) +.factorypath + +# PDT-specific (PHP Development Tools) .buildpath -###################### -# Intellij -###################### -.idea/ -*.iml +# sbteclipse plugin +.target + +# Tern plugin +.tern-project + +# TeXlipse plugin +.texlipse + +# STS (Spring Tool Suite) +.springBeans + +# Code Recommenders +.recommenders/ + +# Annotation Processing +.apt_generated/ + +# Scala IDE specific (Scala & Java development for Eclipse) +.cache-main +.scala_dependencies +.worksheet + +### Eclipse Patch ### +# Eclipse Core +.project + +# JDT-specific (Eclipse Java Development Tools) +.classpath + +# Annotation Processing +.apt_generated + +.sts4-cache/ + +### Intellij ### +# Covers JetBrains IDEs: IntelliJ, RubyMine, PhpStorm, AppCode, PyCharm, CLion, Android Studio and WebStorm +# Reference: https://intellij-support.jetbrains.com/hc/en-us/articles/206544839 + +# User-specific stuff +.idea/**/workspace.xml +.idea/**/tasks.xml +.idea/**/usage.statistics.xml +.idea/**/dictionaries +.idea/**/shelf + +# Generated files +.idea/**/contentModel.xml + +# Sensitive or high-churn files +.idea/**/dataSources/ +.idea/**/dataSources.ids +.idea/**/dataSources.local.xml +.idea/**/sqlDataSources.xml +.idea/**/dynamic.xml +.idea/**/uiDesigner.xml +.idea/**/dbnavigator.xml + +# Gradle +.idea/**/gradle.xml +.idea/**/libraries + +# Gradle and Maven with auto-import +# When using Gradle or Maven with auto-import, you should exclude module files, +# since they will be recreated, and may cause churn. Uncomment if using +# auto-import. +# .idea/modules.xml +# .idea/*.iml +# .idea/modules + +# CMake +cmake-build-*/ + +# Mongo Explorer plugin +.idea/**/mongoSettings.xml + +# File-based project format *.iws -*.ipr -*.ids -*.orig -classes/ + +# IntelliJ out/ -###################### -# Visual Studio Code -###################### -.vscode/ +# mpeltonen/sbt-idea plugin +.idea_modules/ -###################### -# Maven -###################### -/log/ -/target/ +# JIRA plugin +atlassian-ide-plugin.xml -###################### -# Gradle -###################### -.gradle/ -/build/ +# Cursive Clojure plugin +.idea/replstate.xml + +# Crashlytics plugin (for Android Studio and IntelliJ) +com_crashlytics_export_strings.xml +crashlytics.properties +crashlytics-build.properties +fabric.properties -###################### -# Package Files -###################### +# Editor-based Rest Client +.idea/httpRequests + +# Android studio 3.1+ serialized cache file +.idea/caches/build_file_checksums.ser + +### Intellij Patch ### +# Comment Reason: https://github.com/joeblau/gitignore.io/issues/186#issuecomment-215987721 + +# *.iml +# modules.xml +# .idea/misc.xml +# *.ipr + +# Sonarlint plugin +.idea/sonarlint + +### Java ### +# Compiled class file +*.class + +# Log file +*.log + +# BlueJ files +*.ctxt + +# Mobile Tools for Java (J2ME) +.mtj.tmp/ + +# Package Files # *.jar *.war +*.nar *.ear -*.db - -###################### -# Windows -###################### -# Windows image file caches -Thumbs.db - -# Folder config file -Desktop.ini - -###################### -# Mac OSX -###################### -.DS_Store -.svn - -# Thumbnails -._* - -# Files that might appear on external disk -.Spotlight-V100 -.Trashes - -###################### -# Directories -###################### -/bin/ -/deploy/ - -###################### -# Logs -###################### -*.log* - -###################### -# Others -###################### -*.class -*.*~ -*~ -.merge_file* - -###################### -# Gradle Wrapper -###################### -!gradle/wrapper/gradle-wrapper.jar - -###################### -# Maven Wrapper -###################### -!.mvn/wrapper/maven-wrapper.jar - -###################### -# ESLint -###################### -.eslintcache -nohup.out +*.zip +*.tar.gz +*.rar + +# virtual machine crash logs, see http://www.java.com/en/download/help/error_hotspot.xml +hs_err_pid* + +### Maven ### +target/ +pom.xml.tag +pom.xml.releaseBackup +pom.xml.versionsBackup +pom.xml.next +release.properties +dependency-reduced-pom.xml +buildNumber.properties +.mvn/timing.properties +.mvn/wrapper/maven-wrapper.jar + +### VisualStudioCode ### +.vscode/* +!.vscode/settings.json +!.vscode/tasks.json +!.vscode/launch.json +!.vscode/extensions.json + +### VisualStudioCode Patch ### +# Ignore all local history of files +.history + +# End of https://www.toptal.com/developers/gitignore/api/eclipse,intellij,visualstudiocode,java,maven diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml index fe1258aa5153c2b2cfd9c25a47e1996243c901de..7c0aa1957a26126c417ff16bf5cb73ae70e66edc 100644 --- a/.gitlab-ci.yml +++ b/.gitlab-ci.yml @@ -1,35 +1,7 @@ -image: maven:latest +stages: + - build -variables: - MAVEN_CLI_OPTS: '-s .m2/settings.xml --batch-mode' - -cache: - paths: - - .maven/ - -before_script: - - export MAVEN_USER_HOME=`pwd`/.maven - -maven-compile: - stage: build - script: - - ./mvnw $MAVEN_CLI_OPTS compile -Dmaven.repo.local=$MAVEN_USER_HOME - artifacts: - paths: - - target/classes/ - - target/generated-sources/ - expire_in: 1 day - -maven-test: - stage: test - script: ./mvnw $MAVEN_CLI_OPTS verify -Dmaven.repo.local=$MAVEN_USER_HOME - artifacts: - reports: - junit: target/test-results/**/TEST-*.xml - dependency_scanning: target/dependency-check-report.xml - paths: - - target/test-results - - target/jacoco - - target/dependency-check-report.xml - - target/dependency-check-report.html - expire_in: 1 day +include: + - local: "/.gitlab-common-ci.yml" + - local: "/wordWrap/.gitlab-ci.yml" + - local: "/romanNumerals/.gitlab-ci.yml" diff --git a/.gitlab-common-ci.yml b/.gitlab-common-ci.yml new file mode 100644 index 0000000000000000000000000000000000000000..d2d594226e4188e913986ee39013f0d910074cbf --- /dev/null +++ b/.gitlab-common-ci.yml @@ -0,0 +1,12 @@ +variables: + MAVEN_OPTS: "-Dhttps.protocols=TLSv1.2 -Dmaven.repo.local=$CI_PROJECT_DIR/.m2/repository -Dorg.slf4j.simpleLogger.log.org.apache.maven.cli.transfer.Slf4jMavenTransferListener=WARN -Dorg.slf4j.simpleLogger.showDateTime=true -Djava.awt.headless=true" + MAVEN_CLI_OPTS: "--batch-mode --errors --fail-at-end --show-version -DinstallAtEnd=true -DdeployAtEnd=true" + +cache: + paths: + - .m2/repository + +.java: + image: maven:3.6.3-jdk-14 + tags: docker + coverage: '/Total.*?([0-9]{1,3})%/' diff --git a/.m2/settings.xml b/.m2/settings.xml deleted file mode 100644 index bceee5fd9af9df15624a3261d69daecf72728f73..0000000000000000000000000000000000000000 --- a/.m2/settings.xml +++ /dev/null @@ -1,10 +0,0 @@ -<?xml version="1.0" encoding="UTF-8"?> -<settings xmlns="http://maven.apache.org/SETTINGS/1.0.0" - xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" - xsi:schemaLocation="http://maven.apache.org/SETTINGS/1.0.0 http://maven.apache.org/xsd/settings-1.0.0.xsd"> - <pluginGroups/> - <proxies/> - <servers/> - <mirrors/> - <profiles/> -</settings> diff --git a/.mvn/wrapper/MavenWrapperDownloader.java b/.mvn/wrapper/MavenWrapperDownloader.java deleted file mode 100644 index b901097f2db6e50097dc0b222204a88f8cea1609..0000000000000000000000000000000000000000 --- a/.mvn/wrapper/MavenWrapperDownloader.java +++ /dev/null @@ -1,117 +0,0 @@ -/* - * Copyright 2007-present the original author or authors. - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ -import java.net.*; -import java.io.*; -import java.nio.channels.*; -import java.util.Properties; - -public class MavenWrapperDownloader { - - private static final String WRAPPER_VERSION = "0.5.6"; - /** - * Default URL to download the maven-wrapper.jar from, if no 'downloadUrl' is provided. - */ - private static final String DEFAULT_DOWNLOAD_URL = "https://repo.maven.apache.org/maven2/io/takari/maven-wrapper/" - + WRAPPER_VERSION + "/maven-wrapper-" + WRAPPER_VERSION + ".jar"; - - /** - * Path to the maven-wrapper.properties file, which might contain a downloadUrl property to - * use instead of the default one. - */ - private static final String MAVEN_WRAPPER_PROPERTIES_PATH = - ".mvn/wrapper/maven-wrapper.properties"; - - /** - * Path where the maven-wrapper.jar will be saved to. - */ - private static final String MAVEN_WRAPPER_JAR_PATH = - ".mvn/wrapper/maven-wrapper.jar"; - - /** - * Name of the property which should be used to override the default download url for the wrapper. - */ - private static final String PROPERTY_NAME_WRAPPER_URL = "wrapperUrl"; - - public static void main(String args[]) { - System.out.println("- Downloader started"); - File baseDirectory = new File(args[0]); - System.out.println("- Using base directory: " + baseDirectory.getAbsolutePath()); - - // If the maven-wrapper.properties exists, read it and check if it contains a custom - // wrapperUrl parameter. - File mavenWrapperPropertyFile = new File(baseDirectory, MAVEN_WRAPPER_PROPERTIES_PATH); - String url = DEFAULT_DOWNLOAD_URL; - if(mavenWrapperPropertyFile.exists()) { - FileInputStream mavenWrapperPropertyFileInputStream = null; - try { - mavenWrapperPropertyFileInputStream = new FileInputStream(mavenWrapperPropertyFile); - Properties mavenWrapperProperties = new Properties(); - mavenWrapperProperties.load(mavenWrapperPropertyFileInputStream); - url = mavenWrapperProperties.getProperty(PROPERTY_NAME_WRAPPER_URL, url); - } catch (IOException e) { - System.out.println("- ERROR loading '" + MAVEN_WRAPPER_PROPERTIES_PATH + "'"); - } finally { - try { - if(mavenWrapperPropertyFileInputStream != null) { - mavenWrapperPropertyFileInputStream.close(); - } - } catch (IOException e) { - // Ignore ... - } - } - } - System.out.println("- Downloading from: " + url); - - File outputFile = new File(baseDirectory.getAbsolutePath(), MAVEN_WRAPPER_JAR_PATH); - if(!outputFile.getParentFile().exists()) { - if(!outputFile.getParentFile().mkdirs()) { - System.out.println( - "- ERROR creating output directory '" + outputFile.getParentFile().getAbsolutePath() + "'"); - } - } - System.out.println("- Downloading to: " + outputFile.getAbsolutePath()); - try { - downloadFileFromURL(url, outputFile); - System.out.println("Done"); - System.exit(0); - } catch (Throwable e) { - System.out.println("- Error downloading"); - e.printStackTrace(); - System.exit(1); - } - } - - private static void downloadFileFromURL(String urlString, File destination) throws Exception { - if (System.getenv("MVNW_USERNAME") != null && System.getenv("MVNW_PASSWORD") != null) { - String username = System.getenv("MVNW_USERNAME"); - char[] password = System.getenv("MVNW_PASSWORD").toCharArray(); - Authenticator.setDefault(new Authenticator() { - @Override - protected PasswordAuthentication getPasswordAuthentication() { - return new PasswordAuthentication(username, password); - } - }); - } - URL website = new URL(urlString); - ReadableByteChannel rbc; - rbc = Channels.newChannel(website.openStream()); - FileOutputStream fos = new FileOutputStream(destination); - fos.getChannel().transferFrom(rbc, 0, Long.MAX_VALUE); - fos.close(); - rbc.close(); - } - -} diff --git a/.mvn/wrapper/maven-wrapper.jar b/.mvn/wrapper/maven-wrapper.jar deleted file mode 100644 index 2cc7d4a55c0cd0092912bf49ae38b3a9e3fd0054..0000000000000000000000000000000000000000 Binary files a/.mvn/wrapper/maven-wrapper.jar and /dev/null differ diff --git a/.mvn/wrapper/maven-wrapper.properties b/.mvn/wrapper/maven-wrapper.properties deleted file mode 100644 index 642d572ce90e5085986bdd9c9204b9404f028084..0000000000000000000000000000000000000000 --- a/.mvn/wrapper/maven-wrapper.properties +++ /dev/null @@ -1,2 +0,0 @@ -distributionUrl=https://repo.maven.apache.org/maven2/org/apache/maven/apache-maven/3.6.3/apache-maven-3.6.3-bin.zip -wrapperUrl=https://repo.maven.apache.org/maven2/io/takari/maven-wrapper/0.5.6/maven-wrapper-0.5.6.jar diff --git a/kata/romanNumerals/pom.xml b/kata/romanNumerals/pom.xml deleted file mode 100644 index 558723b04af8b1583b58b29276f01a190e8c89ad..0000000000000000000000000000000000000000 --- a/kata/romanNumerals/pom.xml +++ /dev/null @@ -1,43 +0,0 @@ -<?xml version="1.0" encoding="UTF-8"?> -<project xmlns="http://maven.apache.org/POM/4.0.0" - xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" - xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> - <modelVersion>4.0.0</modelVersion> - - <parent> - <groupId>fr.ippon.live-coding</groupId> - <artifactId>parent</artifactId> - <version>1.0-SNAPSHOT</version> - <relativePath>../../</relativePath> - </parent> - <groupId>fr.ippon.kata</groupId> - <artifactId>romanNumerals</artifactId> - - <name>Roman Numerals Kata</name> - - <developers> - <developer> - <email>cdamon@ippon.tech</email> - <name>Colin DAMON</name> - </developer> - <developer> - <email></email> - <name>Julie </name> - </developer> - </developers> - - <dependencies> - <dependency> - <groupId>org.assertj</groupId> - <artifactId>assertj-core</artifactId> - </dependency> - <dependency> - <groupId>org.junit.jupiter</groupId> - <artifactId>junit-jupiter-api</artifactId> - </dependency> - <dependency> - <groupId>org.junit.jupiter</groupId> - <artifactId>junit-jupiter-engine</artifactId> - </dependency> - </dependencies> -</project> \ No newline at end of file diff --git a/kata/romanNumerals/src/main/java/fr/ippon/kata/roman/Numerals.java b/kata/romanNumerals/src/main/java/fr/ippon/kata/roman/Numerals.java deleted file mode 100644 index 127971794357f0ea3471de2d7635a540d9ed4655..0000000000000000000000000000000000000000 --- a/kata/romanNumerals/src/main/java/fr/ippon/kata/roman/Numerals.java +++ /dev/null @@ -1,38 +0,0 @@ -package fr.ippon.kata.roman; - -import java.util.NavigableMap; -import java.util.TreeMap; - -public class Numerals { - - private static final NavigableMap<Integer, Roman> CONVERSIONS = buildConversions(); - - - public static String toRoman(int arabic) { - - // TODO : Use Stream.iterable to avoid stackoverflow on recursion - if (arabic <= 0) { - return ""; - } - - Integer highestKnownConversion = CONVERSIONS.floorKey(arabic); - - String highestKnownRepresentation = CONVERSIONS - .get(highestKnownConversion) - .getRepresentation(); - - return highestKnownRepresentation + toRoman(arabic - highestKnownConversion); - } - - private static NavigableMap<Integer, Roman> buildConversions() { - NavigableMap<Integer, Roman> conversions = new TreeMap<>(); - conversions.put(1, Roman.ONE); - conversions.put(4, Roman.FOUR); - conversions.put(5, Roman.FIVE); - conversions.put(9, Roman.NINE); - conversions.put(10, Roman.TEN); - - return conversions; - - } -} diff --git a/kata/romanNumerals/src/test/java/fr/ippon/kata/roman/NumeralsTest.java b/kata/romanNumerals/src/test/java/fr/ippon/kata/roman/NumeralsTest.java deleted file mode 100644 index ad8abc13fce8ed968a0825f12b45bab719ac285a..0000000000000000000000000000000000000000 --- a/kata/romanNumerals/src/test/java/fr/ippon/kata/roman/NumeralsTest.java +++ /dev/null @@ -1,57 +0,0 @@ -package fr.ippon.kata.roman; - -import org.junit.jupiter.api.Test; - -import static fr.ippon.kata.roman.Numerals.toRoman; -import static org.assertj.core.api.Assertions.*; - -class NumeralsTest { - - @Test - void shouldConvertZeroToEmptyString() { - assertThat(toRoman(0)).isEmpty(); - } - - @Test - void shouldConvertOneToI() { - assertThat(toRoman(1)).isEqualTo("I"); - } - - @Test - void shouldConvertThreeToIII() { - assertThat(toRoman(3)).isEqualTo("III"); - } - - @Test - void shouldConvertFourToIV() { - assertThat(toRoman(4)).isEqualTo("IV"); - } - - @Test - void shouldConvertFiveToV() { - assertThat(toRoman(5)).isEqualTo("V"); - } - - @Test - void shouldConvertSixToVI() { - assertThat(toRoman(6)).isEqualTo("VI"); - } - - @Test - void shouldConvertNineToIX() { - assertThat(toRoman(9)).isEqualTo("IX"); - } - - @Test - void shouldConvertTenToTen() { - assertThat(toRoman(10)).isEqualTo("X"); - } - - @Test - void shouldConvertFourteenToXIV() { - assertThat(toRoman(14)).isEqualTo("XIV"); - } - - - -} \ No newline at end of file diff --git a/kata/wrapper/pom.xml b/kata/wrapper/pom.xml deleted file mode 100644 index 9c5d1fd7c7b43a501b9693b19da964dd45253886..0000000000000000000000000000000000000000 --- a/kata/wrapper/pom.xml +++ /dev/null @@ -1,40 +0,0 @@ -<?xml version="1.0" encoding="UTF-8"?> -<project xmlns="http://maven.apache.org/POM/4.0.0" - xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" - xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> - <modelVersion>4.0.0</modelVersion> - - <parent> - <groupId>fr.ippon.live-coding</groupId> - <artifactId>parent</artifactId> - <version>1.0-SNAPSHOT</version> - <relativePath>../../</relativePath> - </parent> - <groupId>fr.ippon.kata</groupId> - <artifactId>wrapper</artifactId> - - <name>Wrapper Kata</name> - - <developers> - <developer> - <email>cdamon@ippon.tech</email> - <name>Colin DAMON</name> - </developer> - - </developers> - - <dependencies> - <dependency> - <groupId>org.assertj</groupId> - <artifactId>assertj-core</artifactId> - </dependency> - <dependency> - <groupId>org.junit.jupiter</groupId> - <artifactId>junit-jupiter-api</artifactId> - </dependency> - <dependency> - <groupId>org.junit.jupiter</groupId> - <artifactId>junit-jupiter-engine</artifactId> - </dependency> - </dependencies> -</project> \ No newline at end of file diff --git a/kata/wrapper/src/main/java/fr/ippon/kata/wrapper/Wrapper.java b/kata/wrapper/src/main/java/fr/ippon/kata/wrapper/Wrapper.java deleted file mode 100644 index cd263a4d339c596c0b93ad3b5fafd04d99b12573..0000000000000000000000000000000000000000 --- a/kata/wrapper/src/main/java/fr/ippon/kata/wrapper/Wrapper.java +++ /dev/null @@ -1,44 +0,0 @@ -package fr.ippon.kata.wrapper; - -public class Wrapper { - - private static final String BREAK = "\n"; - private int columns; - - private Wrapper(int columns) { - this.columns = columns; - } - - public static String wrap(String sentence, int columns) { - return new Wrapper(columns).wrap(sentence); - } - - private String wrap(String sentence) { - if (isShortEnough(sentence)) { - return sentence; - } - - String left = sentence.substring(0, columns); - String right = sentence.substring(columns); - - if (right.startsWith(" ")) { - return join(left, right.substring(1, right.length())); - } - - if (left.contains(" ")) { - int spaceIndex = left.lastIndexOf(" "); - return join(sentence.substring(0, spaceIndex), - sentence.substring(spaceIndex + 1)); - } - - return join(left, right); - } - - private boolean isShortEnough(String sentence){ - return sentence == null || sentence.length() <= columns; - } - - private String join(String left, String right){ - return left + BREAK + wrap(right,columns); - } -} diff --git a/kata/wrapper/src/test/java/wrapper/WrapperTest.java b/kata/wrapper/src/test/java/wrapper/WrapperTest.java deleted file mode 100644 index 47b3e172bb942ad723fb4020b8767d88eff8ba24..0000000000000000000000000000000000000000 --- a/kata/wrapper/src/test/java/wrapper/WrapperTest.java +++ /dev/null @@ -1,45 +0,0 @@ -package wrapper; - -import org.junit.jupiter.api.Test; - -import java.util.Arrays; -import java.util.stream.Collectors; - -import static fr.ippon.kata.wrapper.Wrapper.wrap; -import static org.assertj.core.api.Assertions.*; - -class WrapperTest { - - @Test - void shouldNotWrapWithoutSentence(){ - assertThat(wrap(null,4)).isNull(); - } - - @Test - void shouldNotWrapShortEnoughSentence(){ - assertThat(wrap("Once",4)).isEqualTo("Once"); - } - - @Test - void shouldWrapBySplittingWord(){ - assertThat(wrap("Once",2)).isEqualTo("On\nce"); - } - - @Test - void shouldWrapBySplittingWordMultipleItems(){ - assertThat(wrap("Once",1)) - .isEqualTo(join("O","n","c","e")); - } - - @Test - void shouldWrapAfterWord(){ - assertThat(wrap("Once uppon a time",10)) - .isEqualTo(join("Once uppon","a time")); - } - - private static String join (String... parts){ - return Arrays.stream(parts) - .collect(Collectors.joining("\n")); - } - -} \ No newline at end of file diff --git a/mvnw b/mvnw deleted file mode 100755 index 41c0f0c23db5dca836d3db1a17a7a28444d17d74..0000000000000000000000000000000000000000 --- a/mvnw +++ /dev/null @@ -1,310 +0,0 @@ -#!/bin/sh -# ---------------------------------------------------------------------------- -# Licensed to the Apache Software Foundation (ASF) under one -# or more contributor license agreements. See the NOTICE file -# distributed with this work for additional information -# regarding copyright ownership. The ASF licenses this file -# to you under the Apache License, Version 2.0 (the -# "License"); you may not use this file except in compliance -# with the License. You may obtain a copy of the License at -# -# http://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, -# software distributed under the License is distributed on an -# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY -# KIND, either express or implied. See the License for the -# specific language governing permissions and limitations -# under the License. -# ---------------------------------------------------------------------------- - -# ---------------------------------------------------------------------------- -# Maven Start Up Batch script -# -# Required ENV vars: -# ------------------ -# JAVA_HOME - location of a JDK home dir -# -# Optional ENV vars -# ----------------- -# M2_HOME - location of maven2's installed home dir -# MAVEN_OPTS - parameters passed to the Java VM when running Maven -# e.g. to debug Maven itself, use -# set MAVEN_OPTS=-Xdebug -Xrunjdwp:transport=dt_socket,server=y,suspend=y,address=8000 -# MAVEN_SKIP_RC - flag to disable loading of mavenrc files -# ---------------------------------------------------------------------------- - -if [ -z "$MAVEN_SKIP_RC" ] ; then - - if [ -f /etc/mavenrc ] ; then - . /etc/mavenrc - fi - - if [ -f "$HOME/.mavenrc" ] ; then - . "$HOME/.mavenrc" - fi - -fi - -# OS specific support. $var _must_ be set to either true or false. -cygwin=false; -darwin=false; -mingw=false -case "`uname`" in - CYGWIN*) cygwin=true ;; - MINGW*) mingw=true;; - Darwin*) darwin=true - # Use /usr/libexec/java_home if available, otherwise fall back to /Library/Java/Home - # See https://developer.apple.com/library/mac/qa/qa1170/_index.html - if [ -z "$JAVA_HOME" ]; then - if [ -x "/usr/libexec/java_home" ]; then - export JAVA_HOME="`/usr/libexec/java_home`" - else - export JAVA_HOME="/Library/Java/Home" - fi - fi - ;; -esac - -if [ -z "$JAVA_HOME" ] ; then - if [ -r /etc/gentoo-release ] ; then - JAVA_HOME=`java-config --jre-home` - fi -fi - -if [ -z "$M2_HOME" ] ; then - ## resolve links - $0 may be a link to maven's home - PRG="$0" - - # need this for relative symlinks - while [ -h "$PRG" ] ; do - ls=`ls -ld "$PRG"` - link=`expr "$ls" : '.*-> \(.*\)$'` - if expr "$link" : '/.*' > /dev/null; then - PRG="$link" - else - PRG="`dirname "$PRG"`/$link" - fi - done - - saveddir=`pwd` - - M2_HOME=`dirname "$PRG"`/.. - - # make it fully qualified - M2_HOME=`cd "$M2_HOME" && pwd` - - cd "$saveddir" - # echo Using m2 at $M2_HOME -fi - -# For Cygwin, ensure paths are in UNIX format before anything is touched -if $cygwin ; then - [ -n "$M2_HOME" ] && - M2_HOME=`cygpath --unix "$M2_HOME"` - [ -n "$JAVA_HOME" ] && - JAVA_HOME=`cygpath --unix "$JAVA_HOME"` - [ -n "$CLASSPATH" ] && - CLASSPATH=`cygpath --path --unix "$CLASSPATH"` -fi - -# For Mingw, ensure paths are in UNIX format before anything is touched -if $mingw ; then - [ -n "$M2_HOME" ] && - M2_HOME="`(cd "$M2_HOME"; pwd)`" - [ -n "$JAVA_HOME" ] && - JAVA_HOME="`(cd "$JAVA_HOME"; pwd)`" -fi - -if [ -z "$JAVA_HOME" ]; then - javaExecutable="`which javac`" - if [ -n "$javaExecutable" ] && ! [ "`expr \"$javaExecutable\" : '\([^ ]*\)'`" = "no" ]; then - # readlink(1) is not available as standard on Solaris 10. - readLink=`which readlink` - if [ ! `expr "$readLink" : '\([^ ]*\)'` = "no" ]; then - if $darwin ; then - javaHome="`dirname \"$javaExecutable\"`" - javaExecutable="`cd \"$javaHome\" && pwd -P`/javac" - else - javaExecutable="`readlink -f \"$javaExecutable\"`" - fi - javaHome="`dirname \"$javaExecutable\"`" - javaHome=`expr "$javaHome" : '\(.*\)/bin'` - JAVA_HOME="$javaHome" - export JAVA_HOME - fi - fi -fi - -if [ -z "$JAVACMD" ] ; then - if [ -n "$JAVA_HOME" ] ; then - if [ -x "$JAVA_HOME/jre/sh/java" ] ; then - # IBM's JDK on AIX uses strange locations for the executables - JAVACMD="$JAVA_HOME/jre/sh/java" - else - JAVACMD="$JAVA_HOME/bin/java" - fi - else - JAVACMD="`which java`" - fi -fi - -if [ ! -x "$JAVACMD" ] ; then - echo "Error: JAVA_HOME is not defined correctly." >&2 - echo " We cannot execute $JAVACMD" >&2 - exit 1 -fi - -if [ -z "$JAVA_HOME" ] ; then - echo "Warning: JAVA_HOME environment variable is not set." -fi - -CLASSWORLDS_LAUNCHER=org.codehaus.plexus.classworlds.launcher.Launcher - -# traverses directory structure from process work directory to filesystem root -# first directory with .mvn subdirectory is considered project base directory -find_maven_basedir() { - - if [ -z "$1" ] - then - echo "Path not specified to find_maven_basedir" - return 1 - fi - - basedir="$1" - wdir="$1" - while [ "$wdir" != '/' ] ; do - if [ -d "$wdir"/.mvn ] ; then - basedir=$wdir - break - fi - # workaround for JBEAP-8937 (on Solaris 10/Sparc) - if [ -d "${wdir}" ]; then - wdir=`cd "$wdir/.."; pwd` - fi - # end of workaround - done - echo "${basedir}" -} - -# concatenates all lines of a file -concat_lines() { - if [ -f "$1" ]; then - echo "$(tr -s '\n' ' ' < "$1")" - fi -} - -BASE_DIR=`find_maven_basedir "$(pwd)"` -if [ -z "$BASE_DIR" ]; then - exit 1; -fi - -########################################################################################## -# Extension to allow automatically downloading the maven-wrapper.jar from Maven-central -# This allows using the maven wrapper in projects that prohibit checking in binary data. -########################################################################################## -if [ -r "$BASE_DIR/.mvn/wrapper/maven-wrapper.jar" ]; then - if [ "$MVNW_VERBOSE" = true ]; then - echo "Found .mvn/wrapper/maven-wrapper.jar" - fi -else - if [ "$MVNW_VERBOSE" = true ]; then - echo "Couldn't find .mvn/wrapper/maven-wrapper.jar, downloading it ..." - fi - if [ -n "$MVNW_REPOURL" ]; then - jarUrl="$MVNW_REPOURL/io/takari/maven-wrapper/0.5.6/maven-wrapper-0.5.6.jar" - else - jarUrl="https://repo.maven.apache.org/maven2/io/takari/maven-wrapper/0.5.6/maven-wrapper-0.5.6.jar" - fi - while IFS="=" read key value; do - case "$key" in (wrapperUrl) jarUrl="$value"; break ;; - esac - done < "$BASE_DIR/.mvn/wrapper/maven-wrapper.properties" - if [ "$MVNW_VERBOSE" = true ]; then - echo "Downloading from: $jarUrl" - fi - wrapperJarPath="$BASE_DIR/.mvn/wrapper/maven-wrapper.jar" - if $cygwin; then - wrapperJarPath=`cygpath --path --windows "$wrapperJarPath"` - fi - - if command -v wget > /dev/null; then - if [ "$MVNW_VERBOSE" = true ]; then - echo "Found wget ... using wget" - fi - if [ -z "$MVNW_USERNAME" ] || [ -z "$MVNW_PASSWORD" ]; then - wget "$jarUrl" -O "$wrapperJarPath" - else - wget --http-user=$MVNW_USERNAME --http-password=$MVNW_PASSWORD "$jarUrl" -O "$wrapperJarPath" - fi - elif command -v curl > /dev/null; then - if [ "$MVNW_VERBOSE" = true ]; then - echo "Found curl ... using curl" - fi - if [ -z "$MVNW_USERNAME" ] || [ -z "$MVNW_PASSWORD" ]; then - curl -o "$wrapperJarPath" "$jarUrl" -f - else - curl --user $MVNW_USERNAME:$MVNW_PASSWORD -o "$wrapperJarPath" "$jarUrl" -f - fi - - else - if [ "$MVNW_VERBOSE" = true ]; then - echo "Falling back to using Java to download" - fi - javaClass="$BASE_DIR/.mvn/wrapper/MavenWrapperDownloader.java" - # For Cygwin, switch paths to Windows format before running javac - if $cygwin; then - javaClass=`cygpath --path --windows "$javaClass"` - fi - if [ -e "$javaClass" ]; then - if [ ! -e "$BASE_DIR/.mvn/wrapper/MavenWrapperDownloader.class" ]; then - if [ "$MVNW_VERBOSE" = true ]; then - echo " - Compiling MavenWrapperDownloader.java ..." - fi - # Compiling the Java class - ("$JAVA_HOME/bin/javac" "$javaClass") - fi - if [ -e "$BASE_DIR/.mvn/wrapper/MavenWrapperDownloader.class" ]; then - # Running the downloader - if [ "$MVNW_VERBOSE" = true ]; then - echo " - Running MavenWrapperDownloader.java ..." - fi - ("$JAVA_HOME/bin/java" -cp .mvn/wrapper MavenWrapperDownloader "$MAVEN_PROJECTBASEDIR") - fi - fi - fi -fi -########################################################################################## -# End of extension -########################################################################################## - -export MAVEN_PROJECTBASEDIR=${MAVEN_BASEDIR:-"$BASE_DIR"} -if [ "$MVNW_VERBOSE" = true ]; then - echo $MAVEN_PROJECTBASEDIR -fi -MAVEN_OPTS="$(concat_lines "$MAVEN_PROJECTBASEDIR/.mvn/jvm.config") $MAVEN_OPTS" - -# For Cygwin, switch paths to Windows format before running java -if $cygwin; then - [ -n "$M2_HOME" ] && - M2_HOME=`cygpath --path --windows "$M2_HOME"` - [ -n "$JAVA_HOME" ] && - JAVA_HOME=`cygpath --path --windows "$JAVA_HOME"` - [ -n "$CLASSPATH" ] && - CLASSPATH=`cygpath --path --windows "$CLASSPATH"` - [ -n "$MAVEN_PROJECTBASEDIR" ] && - MAVEN_PROJECTBASEDIR=`cygpath --path --windows "$MAVEN_PROJECTBASEDIR"` -fi - -# Provide a "standardized" way to retrieve the CLI args that will -# work with both Windows and non-Windows executions. -MAVEN_CMD_LINE_ARGS="$MAVEN_CONFIG $@" -export MAVEN_CMD_LINE_ARGS - -WRAPPER_LAUNCHER=org.apache.maven.wrapper.MavenWrapperMain - -exec "$JAVACMD" \ - $MAVEN_OPTS \ - -classpath "$MAVEN_PROJECTBASEDIR/.mvn/wrapper/maven-wrapper.jar" \ - "-Dmaven.home=${M2_HOME}" "-Dmaven.multiModuleProjectDirectory=${MAVEN_PROJECTBASEDIR}" \ - ${WRAPPER_LAUNCHER} $MAVEN_CONFIG "$@" diff --git a/mvnw.cmd b/mvnw.cmd deleted file mode 100644 index 86115719e5383e94597f918bf18c5ecbb7cfe492..0000000000000000000000000000000000000000 --- a/mvnw.cmd +++ /dev/null @@ -1,182 +0,0 @@ -@REM ---------------------------------------------------------------------------- -@REM Licensed to the Apache Software Foundation (ASF) under one -@REM or more contributor license agreements. See the NOTICE file -@REM distributed with this work for additional information -@REM regarding copyright ownership. The ASF licenses this file -@REM to you under the Apache License, Version 2.0 (the -@REM "License"); you may not use this file except in compliance -@REM with the License. You may obtain a copy of the License at -@REM -@REM http://www.apache.org/licenses/LICENSE-2.0 -@REM -@REM Unless required by applicable law or agreed to in writing, -@REM software distributed under the License is distributed on an -@REM "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY -@REM KIND, either express or implied. See the License for the -@REM specific language governing permissions and limitations -@REM under the License. -@REM ---------------------------------------------------------------------------- - -@REM ---------------------------------------------------------------------------- -@REM Maven Start Up Batch script -@REM -@REM Required ENV vars: -@REM JAVA_HOME - location of a JDK home dir -@REM -@REM Optional ENV vars -@REM M2_HOME - location of maven2's installed home dir -@REM MAVEN_BATCH_ECHO - set to 'on' to enable the echoing of the batch commands -@REM MAVEN_BATCH_PAUSE - set to 'on' to wait for a keystroke before ending -@REM MAVEN_OPTS - parameters passed to the Java VM when running Maven -@REM e.g. to debug Maven itself, use -@REM set MAVEN_OPTS=-Xdebug -Xrunjdwp:transport=dt_socket,server=y,suspend=y,address=8000 -@REM MAVEN_SKIP_RC - flag to disable loading of mavenrc files -@REM ---------------------------------------------------------------------------- - -@REM Begin all REM lines with '@' in case MAVEN_BATCH_ECHO is 'on' -@echo off -@REM set title of command window -title %0 -@REM enable echoing by setting MAVEN_BATCH_ECHO to 'on' -@if "%MAVEN_BATCH_ECHO%" == "on" echo %MAVEN_BATCH_ECHO% - -@REM set %HOME% to equivalent of $HOME -if "%HOME%" == "" (set "HOME=%HOMEDRIVE%%HOMEPATH%") - -@REM Execute a user defined script before this one -if not "%MAVEN_SKIP_RC%" == "" goto skipRcPre -@REM check for pre script, once with legacy .bat ending and once with .cmd ending -if exist "%HOME%\mavenrc_pre.bat" call "%HOME%\mavenrc_pre.bat" -if exist "%HOME%\mavenrc_pre.cmd" call "%HOME%\mavenrc_pre.cmd" -:skipRcPre - -@setlocal - -set ERROR_CODE=0 - -@REM To isolate internal variables from possible post scripts, we use another setlocal -@setlocal - -@REM ==== START VALIDATION ==== -if not "%JAVA_HOME%" == "" goto OkJHome - -echo. -echo Error: JAVA_HOME not found in your environment. >&2 -echo Please set the JAVA_HOME variable in your environment to match the >&2 -echo location of your Java installation. >&2 -echo. -goto error - -:OkJHome -if exist "%JAVA_HOME%\bin\java.exe" goto init - -echo. -echo Error: JAVA_HOME is set to an invalid directory. >&2 -echo JAVA_HOME = "%JAVA_HOME%" >&2 -echo Please set the JAVA_HOME variable in your environment to match the >&2 -echo location of your Java installation. >&2 -echo. -goto error - -@REM ==== END VALIDATION ==== - -:init - -@REM Find the project base dir, i.e. the directory that contains the folder ".mvn". -@REM Fallback to current working directory if not found. - -set MAVEN_PROJECTBASEDIR=%MAVEN_BASEDIR% -IF NOT "%MAVEN_PROJECTBASEDIR%"=="" goto endDetectBaseDir - -set EXEC_DIR=%CD% -set WDIR=%EXEC_DIR% -:findBaseDir -IF EXIST "%WDIR%"\.mvn goto baseDirFound -cd .. -IF "%WDIR%"=="%CD%" goto baseDirNotFound -set WDIR=%CD% -goto findBaseDir - -:baseDirFound -set MAVEN_PROJECTBASEDIR=%WDIR% -cd "%EXEC_DIR%" -goto endDetectBaseDir - -:baseDirNotFound -set MAVEN_PROJECTBASEDIR=%EXEC_DIR% -cd "%EXEC_DIR%" - -:endDetectBaseDir - -IF NOT EXIST "%MAVEN_PROJECTBASEDIR%\.mvn\jvm.config" goto endReadAdditionalConfig - -@setlocal EnableExtensions EnableDelayedExpansion -for /F "usebackq delims=" %%a in ("%MAVEN_PROJECTBASEDIR%\.mvn\jvm.config") do set JVM_CONFIG_MAVEN_PROPS=!JVM_CONFIG_MAVEN_PROPS! %%a -@endlocal & set JVM_CONFIG_MAVEN_PROPS=%JVM_CONFIG_MAVEN_PROPS% - -:endReadAdditionalConfig - -SET MAVEN_JAVA_EXE="%JAVA_HOME%\bin\java.exe" -set WRAPPER_JAR="%MAVEN_PROJECTBASEDIR%\.mvn\wrapper\maven-wrapper.jar" -set WRAPPER_LAUNCHER=org.apache.maven.wrapper.MavenWrapperMain - -set DOWNLOAD_URL="https://repo.maven.apache.org/maven2/io/takari/maven-wrapper/0.5.6/maven-wrapper-0.5.6.jar" - -FOR /F "tokens=1,2 delims==" %%A IN ("%MAVEN_PROJECTBASEDIR%\.mvn\wrapper\maven-wrapper.properties") DO ( - IF "%%A"=="wrapperUrl" SET DOWNLOAD_URL=%%B -) - -@REM Extension to allow automatically downloading the maven-wrapper.jar from Maven-central -@REM This allows using the maven wrapper in projects that prohibit checking in binary data. -if exist %WRAPPER_JAR% ( - if "%MVNW_VERBOSE%" == "true" ( - echo Found %WRAPPER_JAR% - ) -) else ( - if not "%MVNW_REPOURL%" == "" ( - SET DOWNLOAD_URL="%MVNW_REPOURL%/io/takari/maven-wrapper/0.5.6/maven-wrapper-0.5.6.jar" - ) - if "%MVNW_VERBOSE%" == "true" ( - echo Couldn't find %WRAPPER_JAR%, downloading it ... - echo Downloading from: %DOWNLOAD_URL% - ) - - powershell -Command "&{"^ - "$webclient = new-object System.Net.WebClient;"^ - "if (-not ([string]::IsNullOrEmpty('%MVNW_USERNAME%') -and [string]::IsNullOrEmpty('%MVNW_PASSWORD%'))) {"^ - "$webclient.Credentials = new-object System.Net.NetworkCredential('%MVNW_USERNAME%', '%MVNW_PASSWORD%');"^ - "}"^ - "[Net.ServicePointManager]::SecurityProtocol = [Net.SecurityProtocolType]::Tls12; $webclient.DownloadFile('%DOWNLOAD_URL%', '%WRAPPER_JAR%')"^ - "}" - if "%MVNW_VERBOSE%" == "true" ( - echo Finished downloading %WRAPPER_JAR% - ) -) -@REM End of extension - -@REM Provide a "standardized" way to retrieve the CLI args that will -@REM work with both Windows and non-Windows executions. -set MAVEN_CMD_LINE_ARGS=%* - -%MAVEN_JAVA_EXE% %JVM_CONFIG_MAVEN_PROPS% %MAVEN_OPTS% %MAVEN_DEBUG_OPTS% -classpath %WRAPPER_JAR% "-Dmaven.multiModuleProjectDirectory=%MAVEN_PROJECTBASEDIR%" %WRAPPER_LAUNCHER% %MAVEN_CONFIG% %* -if ERRORLEVEL 1 goto error -goto end - -:error -set ERROR_CODE=1 - -:end -@endlocal & set ERROR_CODE=%ERROR_CODE% - -if not "%MAVEN_SKIP_RC%" == "" goto skipRcPost -@REM check for post script, once with legacy .bat ending and once with .cmd ending -if exist "%HOME%\mavenrc_post.bat" call "%HOME%\mavenrc_post.bat" -if exist "%HOME%\mavenrc_post.cmd" call "%HOME%\mavenrc_post.cmd" -:skipRcPost - -@REM pause the script if MAVEN_BATCH_PAUSE is set to 'on' -if "%MAVEN_BATCH_PAUSE%" == "on" pause - -if "%MAVEN_TERMINATE_CMD%" == "on" exit %ERROR_CODE% - -exit /B %ERROR_CODE% diff --git a/pom.xml b/pom.xml deleted file mode 100644 index c30c8c2e272a47fa8c550e453c321b723810beaf..0000000000000000000000000000000000000000 --- a/pom.xml +++ /dev/null @@ -1,89 +0,0 @@ -<?xml version="1.0" encoding="UTF-8"?> -<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" - xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd"> - <modelVersion>4.0.0</modelVersion> - - <groupId>fr.ippon.live-coding</groupId> - <artifactId>parent</artifactId> - <version>1.0-SNAPSHOT</version> - <name>Ippon Live Coding Parent</name> - <description>Ippon Technologies propose des sessions live sur twitch.</description> - <packaging>pom</packaging> - <url>https://www.twitch.tv/ippontech</url> - <organization> - <name>Ippon Technologies</name> - <url>http://www.ippon.fr</url> - </organization> - <licenses> - <license> - <name>Apache License, Version 2.0</name> - <url>http://www.apache.org/licenses/LICENSE-2.0</url> - <distribution>repo</distribution> - </license> - </licenses> - - <modules> - <module>kata/wrapper</module> - <module>kata/romanNumerals</module> - </modules> - - <properties> - <java.version>14</java.version> - <maven.compiler.source>${java.version}</maven.compiler.source> - <maven.compiler.target>${java.version}</maven.compiler.target> - - <maven.surefire.version>2.22.2</maven.surefire.version> - <maven.failsafe.version>2.22.2</maven.failsafe.version> - - <junit.jupiter.version>5.6.2</junit.jupiter.version> - <mockito.version>3.4.0</mockito.version> - <assertj.version>3.11.1</assertj.version> - </properties> - - <dependencyManagement> - <dependencies> - <dependency> - <groupId>org.mockito</groupId> - <artifactId>mockito-junit-jupiter</artifactId> - <version>${mockito.version}</version> - <scope>test</scope> - </dependency> - - <dependency> - <groupId>org.junit.jupiter</groupId> - <artifactId>junit-jupiter-api</artifactId> - <version>${junit.jupiter.version}</version> - <scope>test</scope> - </dependency> - <dependency> - <groupId>org.junit.jupiter</groupId> - <artifactId>junit-jupiter-engine</artifactId> - <version>${junit.jupiter.version}</version> - <scope>test</scope> - </dependency> - - <dependency> - <groupId>org.assertj</groupId> - <artifactId>assertj-core</artifactId> - <version>${assertj.version}</version> - <scope>test</scope> - </dependency> - - </dependencies> - </dependencyManagement> - - <build> - <plugins> - <plugin> - <artifactId>maven-surefire-plugin</artifactId> - <version>${maven.surefire.version}</version> - </plugin> - <plugin> - <artifactId>maven-failsafe-plugin</artifactId> - <version>${maven.failsafe.version}</version> - </plugin> - </plugins> - </build> - - -</project> \ No newline at end of file diff --git a/romanNumerals/.gitignore b/romanNumerals/.gitignore new file mode 100644 index 0000000000000000000000000000000000000000..b83d22266ac8aa2f8df2edef68082c789727841d --- /dev/null +++ b/romanNumerals/.gitignore @@ -0,0 +1 @@ +/target/ diff --git a/romanNumerals/.gitlab-ci.yml b/romanNumerals/.gitlab-ci.yml new file mode 100644 index 0000000000000000000000000000000000000000..23919fbd73285fc2ac2c3e9e9357b8a900a810fa --- /dev/null +++ b/romanNumerals/.gitlab-ci.yml @@ -0,0 +1,24 @@ +stages: + - build + +package-roman-numerals: + extends: .java + stage: build + tags: + - docker + script: + - cd romanNumerals + - mvn $MAVEN_CLI_OPTS clean package + - cat target/site/jacoco/index.html + artifacts: + reports: + junit: romanNumerals/target/surefire-reports/TEST-*.xml + expire_in: 1 day + only: + refs: + - master + - merge_requests + changes: + - ".gitlab-ci.yml" + - ".gitlab-common-ci.yml" + - "romanNumerals/**/*" diff --git a/kata/romanNumerals/README.md b/romanNumerals/README.md similarity index 100% rename from kata/romanNumerals/README.md rename to romanNumerals/README.md diff --git a/romanNumerals/pom.xml b/romanNumerals/pom.xml new file mode 100644 index 0000000000000000000000000000000000000000..d3766ae1feb69932ddd0ad91f6d9a0ce58d53b72 --- /dev/null +++ b/romanNumerals/pom.xml @@ -0,0 +1,98 @@ +<?xml version="1.0" encoding="UTF-8"?> +<project xmlns="http://maven.apache.org/POM/4.0.0" + xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" + xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> + <modelVersion>4.0.0</modelVersion> + + <version>1.0.0-SNAPSHOT</version> + <groupId>fr.ippon.kata</groupId> + <artifactId>roman-numerals</artifactId> + + <name>RomanNumerals</name> + + <properties> + <java.version>14</java.version> + + <junit.version>5.7.0-M1</junit.version> + <assertj.version>3.16.1</assertj.version> + <mockito.version>3.1.0</mockito.version> + + <surefire-plugin.version>3.0.0-M4</surefire-plugin.version> + <compiler-plugin.version>3.8.1</compiler-plugin.version> + <jacoco.version>0.8.5</jacoco.version> + </properties> + + <developers> + <developer> + <email>cdamon@ippon.fr</email> + <name>Colin DAMON</name> + </developer> + <developer> + <email>jconte@ippon.fr</email> + <name>Julie CONTE</name> + </developer> + </developers> + + + <dependencies> + <dependency> + <groupId>org.junit.jupiter</groupId> + <artifactId>junit-jupiter-engine</artifactId> + <version>${junit.version}</version> + <scope>test</scope> + </dependency> + + <dependency> + <groupId>org.assertj</groupId> + <artifactId>assertj-core</artifactId> + <version>${assertj.version}</version> + <scope>test</scope> + </dependency> + + <dependency> + <groupId>org.mockito</groupId> + <artifactId>mockito-junit-jupiter</artifactId> + <version>${mockito.version}</version> + <scope>test</scope> + </dependency> + </dependencies> + + <build> + <plugins> + <plugin> + <groupId>org.apache.maven.plugins</groupId> + <artifactId>maven-surefire-plugin</artifactId> + <version>${surefire-plugin.version}</version> + </plugin> + + <plugin> + <artifactId>maven-compiler-plugin</artifactId> + <version>${compiler-plugin.version}</version> + <configuration> + <source>${java.version}</source> + <target>${java.version}</target> + </configuration> + </plugin> + + <plugin> + <groupId>org.jacoco</groupId> + <artifactId>jacoco-maven-plugin</artifactId> + <version>${jacoco.version}</version> + <executions> + <execution> + <goals> + <goal>prepare-agent</goal> + </goals> + </execution> + <execution> + <id>report</id> + <phase>test</phase> + <goals> + <goal>report</goal> + </goals> + </execution> + </executions> + </plugin> + </plugins> + </build> +</project> diff --git a/romanNumerals/src/main/java/fr/ippon/kata/roman/Numerals.java b/romanNumerals/src/main/java/fr/ippon/kata/roman/Numerals.java new file mode 100644 index 0000000000000000000000000000000000000000..648e22af4d9b6831c1d0f4e90dc49fcad361d8a0 --- /dev/null +++ b/romanNumerals/src/main/java/fr/ippon/kata/roman/Numerals.java @@ -0,0 +1,39 @@ +package fr.ippon.kata.roman; + +import java.util.NavigableMap; +import java.util.TreeMap; + +public final class Numerals { + + private static final NavigableMap<Integer, Roman> CONVERSIONS = buildConversions(); + + private Numerals() { + } + + public static String toRoman(int arabic) { + if (arabic <= 0) { + return ""; + } + + Integer highestKnownConversion = CONVERSIONS.floorKey(arabic); + + String highestKnownRepresentation = CONVERSIONS.get(highestKnownConversion) + .getRepresentation(); + + return highestKnownRepresentation + + toRoman(arabic - highestKnownConversion); + } + + private static NavigableMap<Integer, Roman> buildConversions() { + NavigableMap<Integer, Roman> conversions = new TreeMap<>(); + + conversions.put(1, Roman.ONE); + conversions.put(4, Roman.FOUR); + conversions.put(5, Roman.FIVE); + conversions.put(9, Roman.NINE); + conversions.put(10, Roman.TEN); + + return conversions; + + } +} diff --git a/kata/romanNumerals/src/main/java/fr/ippon/kata/roman/Roman.java b/romanNumerals/src/main/java/fr/ippon/kata/roman/Roman.java similarity index 91% rename from kata/romanNumerals/src/main/java/fr/ippon/kata/roman/Roman.java rename to romanNumerals/src/main/java/fr/ippon/kata/roman/Roman.java index b831d68f51c23839c152f27ec4599cb82cbe608d..8dcd86fff54bf312a1e9cdf16fc2b5756df405ea 100644 --- a/kata/romanNumerals/src/main/java/fr/ippon/kata/roman/Roman.java +++ b/romanNumerals/src/main/java/fr/ippon/kata/roman/Roman.java @@ -1,7 +1,5 @@ package fr.ippon.kata.roman; -import java.util.NavigableMap; - public enum Roman { ONE("I"), FOUR("IV"), diff --git a/romanNumerals/src/test/java/fr/ippon/kata/roman/NumeralsTest.java b/romanNumerals/src/test/java/fr/ippon/kata/roman/NumeralsTest.java new file mode 100644 index 0000000000000000000000000000000000000000..b07fc90ada08642a91468967a8f69e78dc296bf1 --- /dev/null +++ b/romanNumerals/src/test/java/fr/ippon/kata/roman/NumeralsTest.java @@ -0,0 +1,55 @@ +package fr.ippon.kata.roman; + +import org.junit.jupiter.api.Test; + +import static fr.ippon.kata.roman.Numerals.toRoman; +import static org.assertj.core.api.Assertions.*; + +class NumeralsTest { + + @Test + void shouldConvertZeroToEmptyString() { + assertThat(toRoman(0)).isEmpty(); + } + + @Test + void shouldConvertOneToI() { + assertThat(toRoman(1)).isEqualTo("I"); + } + + @Test + void shouldConvertThreeToIII() { + assertThat(toRoman(3)).isEqualTo("III"); + } + + @Test + void shouldConvertFourToIV() { + assertThat(toRoman(4)).isEqualTo("IV"); + } + + @Test + void shouldConvertFiveToV() { + assertThat(toRoman(5)).isEqualTo("V"); + } + + @Test + void shouldConvertSixToVI() { + assertThat(toRoman(6)).isEqualTo("VI"); + } + + @Test + void shouldConvertNineToIX() { + assertThat(toRoman(9)).isEqualTo("IX"); + } + + @Test + void shouldConvertTenToX() { + assertThat(toRoman(10)).isEqualTo("X"); + } + + @Test + void shouldConvertFourteenToXIV() { + assertThat(toRoman(14)).isEqualTo("XIV"); + } + +} \ No newline at end of file diff --git a/wordWrap/.gitignore b/wordWrap/.gitignore new file mode 100644 index 0000000000000000000000000000000000000000..b83d22266ac8aa2f8df2edef68082c789727841d --- /dev/null +++ b/wordWrap/.gitignore @@ -0,0 +1 @@ +/target/ diff --git a/wordWrap/.gitlab-ci.yml b/wordWrap/.gitlab-ci.yml new file mode 100644 index 0000000000000000000000000000000000000000..54e0b17d2a038702fa728008269b34572e9dae82 --- /dev/null +++ b/wordWrap/.gitlab-ci.yml @@ -0,0 +1,24 @@ +stages: + - build + +package-word-wrap: + extends: .java + stage: build + tags: + - docker + script: + - cd wordWrap + - mvn $MAVEN_CLI_OPTS clean package + - cat target/site/jacoco/index.html + artifacts: + reports: + junit: wordWrap/target/surefire-reports/TEST-*.xml + expire_in: 1 day + only: + refs: + - master + - merge_requests + changes: + - ".gitlab-ci.yml" + - ".gitlab-common-ci.yml" + - "wordWrap/**/*" diff --git a/kata/wrapper/README.md b/wordWrap/README.md similarity index 100% rename from kata/wrapper/README.md rename to wordWrap/README.md diff --git a/wordWrap/pom.xml b/wordWrap/pom.xml new file mode 100644 index 0000000000000000000000000000000000000000..d3034cd89e00db3bbd077eafb0d12cc446696f75 --- /dev/null +++ b/wordWrap/pom.xml @@ -0,0 +1,93 @@ +<?xml version="1.0" encoding="UTF-8"?> +<project xmlns="http://maven.apache.org/POM/4.0.0" + xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" + xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> + <modelVersion>4.0.0</modelVersion> + + <version>1.0.0-SNAPSHOT</version> + <groupId>fr.ippon.kata</groupId> + <artifactId>word-wrap</artifactId> + + <name>WordWrap</name> + + <properties> + <java.version>14</java.version> + + <junit.version>5.7.0-M1</junit.version> + <assertj.version>3.16.1</assertj.version> + <mockito.version>3.1.0</mockito.version> + + <surefire-plugin.version>3.0.0-M4</surefire-plugin.version> + <compiler-plugin.version>3.8.1</compiler-plugin.version> + <jacoco.version>0.8.5</jacoco.version> + </properties> + + <developers> + <developer> + <email>cdamon@ippon.fr</email> + <name>Colin DAMON</name> + </developer> + </developers> + + <dependencies> + <dependency> + <groupId>org.junit.jupiter</groupId> + <artifactId>junit-jupiter-engine</artifactId> + <version>${junit.version}</version> + <scope>test</scope> + </dependency> + + <dependency> + <groupId>org.assertj</groupId> + <artifactId>assertj-core</artifactId> + <version>${assertj.version}</version> + <scope>test</scope> + </dependency> + + <dependency> + <groupId>org.mockito</groupId> + <artifactId>mockito-junit-jupiter</artifactId> + <version>${mockito.version}</version> + <scope>test</scope> + </dependency> + </dependencies> + + <build> + <plugins> + <plugin> + <groupId>org.apache.maven.plugins</groupId> + <artifactId>maven-surefire-plugin</artifactId> + <version>${surefire-plugin.version}</version> + </plugin> + + <plugin> + <artifactId>maven-compiler-plugin</artifactId> + <version>${compiler-plugin.version}</version> + <configuration> + <source>${java.version}</source> + <target>${java.version}</target> + </configuration> + </plugin> + + <plugin> + <groupId>org.jacoco</groupId> + <artifactId>jacoco-maven-plugin</artifactId> + <version>${jacoco.version}</version> + <executions> + <execution> + <goals> + <goal>prepare-agent</goal> + </goals> + </execution> + <execution> + <id>report</id> + <phase>test</phase> + <goals> + <goal>report</goal> + </goals> + </execution> + </executions> + </plugin> + </plugins> + </build> +</project> \ No newline at end of file diff --git a/wordWrap/src/main/java/fr/ippon/kata/wrapper/Wrapper.java b/wordWrap/src/main/java/fr/ippon/kata/wrapper/Wrapper.java new file mode 100644 index 0000000000000000000000000000000000000000..5422af0aceb3703377dd91d36bb663410f4aac97 --- /dev/null +++ b/wordWrap/src/main/java/fr/ippon/kata/wrapper/Wrapper.java @@ -0,0 +1,45 @@ +package fr.ippon.kata.wrapper; + +public class Wrapper { + + private static final String SPACE = " "; + private static final String BREAK = "\n"; + private int columns; + + private Wrapper(int columns) { + this.columns = columns; + } + + public static String wrap(String sentence, int columns) { + return new Wrapper(columns).wrap(sentence); + } + + private String wrap(String sentence) { + if (isShortEnough(sentence)) { + return sentence; + } + + String left = sentence.substring(0, columns); + String right = sentence.substring(columns); + + if (right.startsWith(SPACE)) { + return join(left, right.substring(1, right.length())); + } + + int spaceIndex = left.lastIndexOf(SPACE); + if (spaceIndex != -1) { + return join(sentence.substring(0, spaceIndex), + sentence.substring(spaceIndex + 1)); + } + + return join(left, right); + } + + private boolean isShortEnough(String sentence) { + return sentence == null || sentence.length() <= columns; + } + + private String join(String left, String right) { + return left + BREAK + wrap(right, columns); + } +} diff --git a/wordWrap/src/test/java/fr/ippon/kata/wrapper/WrapperTest.java b/wordWrap/src/test/java/fr/ippon/kata/wrapper/WrapperTest.java new file mode 100644 index 0000000000000000000000000000000000000000..0db6b1b8889d62c0e830816490d69ff22a45fccb --- /dev/null +++ b/wordWrap/src/test/java/fr/ippon/kata/wrapper/WrapperTest.java @@ -0,0 +1,49 @@ +package fr.ippon.kata.wrapper; + +import org.junit.jupiter.api.Test; + +import java.util.Arrays; +import java.util.stream.Collectors; + +import static fr.ippon.kata.wrapper.Wrapper.wrap; +import static org.assertj.core.api.Assertions.*; + +class WrapperTest { + + @Test + void shouldNotWrapWithoutSentence() { + assertThat(wrap(null, 4)).isNull(); + } + + @Test + void shouldNotWrapShortEnoughSentence() { + assertThat(wrap("Once", 4)).isEqualTo("Once"); + } + + @Test + void shouldWrapBySplittingWord() { + assertThat(wrap("Once", 2)).isEqualTo("On\nce"); + } + + @Test + void shouldWrapBySplittingWordMultipleItems() { + assertThat(wrap("Once", 1)).isEqualTo(join("O", "n", "c", "e")); + } + + @Test + void shouldWrapAfterWord() { + assertThat(wrap("Once upon a time", 9)) + .isEqualTo(join("Once upon", "a time")); + } + + @Test + void shouldWrapBetweenWords() { + assertThat(wrap("Once upon a time in Hollywood", 13)) + .isEqualTo(join("Once upon a", "time in", "Hollywood")); + } + + private static String join(String... parts) { + return Arrays.stream(parts).collect(Collectors.joining("\n")); + } + +} \ No newline at end of file