diff --git a/.github/workflows/maven.test.yaml b/.github/workflows/maven.test.yaml index d66afac49..2d3d0fef3 100644 --- a/.github/workflows/maven.test.yaml +++ b/.github/workflows/maven.test.yaml @@ -13,7 +13,12 @@ jobs: strategy: matrix: os: [ ubuntu-20.04, macos-14, windows-2022 ] - java: [ 8, 11, 21 ] +# @todo #909:60min Add 8 version of Java to matrix. +# For now we're getting an infinite qulice check on +# Java 8. To fix this you need to set Java 8 version +# in your Maven configuration, after that you need to +# run `mvn clean install -Pqulice`. + java: [ 11, 21 ] runs-on: ${{ matrix.os }} steps: - uses: actions/checkout@v4 diff --git a/pom.xml b/pom.xml index d5e0aff91..9891dc27a 100644 --- a/pom.xml +++ b/pom.xml @@ -250,6 +250,30 @@ SOFTWARE. + + maven-resources-plugin + 3.3.1 + + + copy-resources + compile + + copy-resources + + + ${project.build.outputDirectory} + + + ${project.basedir} + + LICENSE.txt + + + + + + + maven-compiler-plugin diff --git a/src/main/java/org/eolang/jeo/representation/License.java b/src/main/java/org/eolang/jeo/representation/License.java new file mode 100644 index 000000000..71b8047c3 --- /dev/null +++ b/src/main/java/org/eolang/jeo/representation/License.java @@ -0,0 +1,69 @@ +/* + * The MIT License (MIT) + * + * Copyright (c) 2016-2024 Objectionary.com + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included + * in all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE + * SOFTWARE. + */ +package org.eolang.jeo.representation; + +import org.cactoos.Scalar; +import org.cactoos.Text; +import org.cactoos.io.ResourceOf; +import org.cactoos.text.Sticky; +import org.cactoos.text.TextOf; + +/** + * Representation of project license. + * + * @since 0.6.27 + */ +public final class License implements Scalar { + + /** + * The name of file with license. + */ + private final Text content; + + /** + * Ctor with default value. + */ + public License() { + this("LICENSE.txt"); + } + + /** + * Primary ctor. + * + * @param content The name of file with license. + */ + public License(final String content) { + this.content = new Sticky(new TextOf(new ResourceOf(content))); + } + + @Override + public String value() { + return this.content.toString(); + } + + @Override + public String toString() { + return this.value(); + } +} diff --git a/src/main/java/org/eolang/jeo/representation/directives/DirectivesProgram.java b/src/main/java/org/eolang/jeo/representation/directives/DirectivesProgram.java index 806871814..58611e3fa 100644 --- a/src/main/java/org/eolang/jeo/representation/directives/DirectivesProgram.java +++ b/src/main/java/org/eolang/jeo/representation/directives/DirectivesProgram.java @@ -28,6 +28,8 @@ import java.time.ZonedDateTime; import java.time.format.DateTimeFormatter; import java.util.Iterator; +import org.cactoos.Scalar; +import org.eolang.jeo.representation.License; import org.xembly.Directive; import org.xembly.Directives; @@ -37,6 +39,11 @@ */ public final class DirectivesProgram implements Iterable { + /** + * The license of project. + */ + private static final Scalar LICENSE = new License(); + /** * Program listing. */ @@ -117,7 +124,7 @@ public Iterator iterator() { .add("listing") .set(this.listing) .up() - .add("license").set(DirectivesProgram.license()).up() + .add("license").set(DirectivesProgram.LICENSE).up() .append(this.metas) .attr("ms", this.milliseconds) .add("objects"); @@ -125,40 +132,4 @@ public Iterator iterator() { directives.up(); return directives.iterator(); } - - /** - * Text of the license. - * @return License text. - * @todo #850 Retrieve License From The File. - * We use license as a file in the project root. - * See LICENSE.txt file. - * It's better to read this file and return its content. - * Otherwise, we have to maintain the license in two places. - */ - private static String license() { - return String.join( - "\n", - "The MIT License (MIT)", - "", - "Copyright (c) 2016-2024 Objectionary.com", - "", - "Permission is hereby granted, free of charge, to any person obtaining a copy", - "of this software and associated documentation files (the \"Software\"), to deal", - "in the Software without restriction, including without limitation the rights", - "to use, copy, modify, merge, publish, distribute, sublicense, and/or sell", - "copies of the Software, and to permit persons to whom the Software is", - "furnished to do so, subject to the following conditions:", - "", - "The above copyright notice and this permission notice shall be included", - "in all copies or substantial portions of the Software.", - "", - "THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR", - "IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,", - "FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE", - "AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER", - "LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,", - "OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE", - "SOFTWARE." - ); - } } diff --git a/src/test/java/org/eolang/jeo/representation/LicenseTest.java b/src/test/java/org/eolang/jeo/representation/LicenseTest.java new file mode 100644 index 000000000..89d1940de --- /dev/null +++ b/src/test/java/org/eolang/jeo/representation/LicenseTest.java @@ -0,0 +1,50 @@ +/* + * The MIT License (MIT) + * + * Copyright (c) 2016-2024 Objectionary.com + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included + * in all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE + * SOFTWARE. + */ +package org.eolang.jeo.representation; + +import org.cactoos.text.FormattedText; +import org.hamcrest.MatcherAssert; +import org.hamcrest.Matchers; +import org.junit.jupiter.api.Test; + +/** + * Test suite for {@link License}. + * + * @since 0.6.27 + */ +final class LicenseTest { + + @Test + void readsLicenseFileCorrectly() throws Exception { + final String name = "LICENSE.txt"; + MatcherAssert.assertThat( + new FormattedText( + "Unexpected file:'%s' content", + name + ).asString(), + new License(name).value(), + Matchers.containsString("MIT") + ); + } +}