From 6bf77b638fafa693f9b14fb06e1008710e8c2c2e Mon Sep 17 00:00:00 2001 From: volodya-lombrozo Date: Tue, 10 Jan 2023 09:59:34 +0300 Subject: [PATCH 1/5] feat(#1617): add tests for AtLogged --- .../src/main/java/org/eolang/AtLogged.java | 28 ++++-- .../test/java/org/eolang/AtLoggedTest.java | 86 +++++++++++++++++++ 2 files changed, 108 insertions(+), 6 deletions(-) create mode 100644 eo-runtime/src/test/java/org/eolang/AtLoggedTest.java diff --git a/eo-runtime/src/main/java/org/eolang/AtLogged.java b/eo-runtime/src/main/java/org/eolang/AtLogged.java index c2f31f2aee..50e99f5b99 100644 --- a/eo-runtime/src/main/java/org/eolang/AtLogged.java +++ b/eo-runtime/src/main/java/org/eolang/AtLogged.java @@ -24,6 +24,8 @@ package org.eolang; +import java.io.PrintStream; + /** * An attribute that logs all its operations to the console (very * convenient for debugging). @@ -44,14 +46,28 @@ final class AtLogged implements Attr { */ private final String owner; + + private final PrintStream out; + /** * Ctor. * @param attr Attribute * @param label Label */ AtLogged(final Attr attr, final String label) { + this(attr, label, System.out); + } + + /** + * Ctor. + * @param attr Attribute + * @param label Label + * @param out Output stream + */ + AtLogged(final Attr attr, final String label, PrintStream out) { this.origin = attr; this.owner = label; + this.out = out; } @Override @@ -66,25 +82,25 @@ public String toString() { @Override public Attr copy(final Phi self) { - System.out.printf(" %s.copy()...\n", this.owner); + this.out.printf(" %s.copy()...\n", this.owner); final Attr ret = this.origin.copy(self); - System.out.printf(" %s.copy()!\n", this.owner); + this.out.printf(" %s.copy()!\n", this.owner); return ret; } @Override public Phi get() { - System.out.printf(" %s.get()...\n", this.owner); + this.out.printf(" %s.get()...\n", this.owner); final Phi ret = this.origin.get(); - System.out.printf(" %s.get()! -> %d\n", this.owner, ret.hashCode()); + this.out.printf(" %s.get()! -> %d\n", this.owner, ret.hashCode()); return ret; } @Override public void put(final Phi src) { - System.out.printf(" %s.put()...\n", this.owner); + this.out.printf(" %s.put()...\n", this.owner); this.origin.put(src); - System.out.printf(" %s.put()!\n", this.owner); + this.out.printf(" %s.put()!\n", this.owner); } } diff --git a/eo-runtime/src/test/java/org/eolang/AtLoggedTest.java b/eo-runtime/src/test/java/org/eolang/AtLoggedTest.java new file mode 100644 index 0000000000..89a7617185 --- /dev/null +++ b/eo-runtime/src/test/java/org/eolang/AtLoggedTest.java @@ -0,0 +1,86 @@ +package org.eolang; + +import java.io.ByteArrayOutputStream; +import java.io.PrintStream; +import java.nio.charset.StandardCharsets; +import org.hamcrest.MatcherAssert; +import org.hamcrest.Matchers; +import org.junit.jupiter.api.BeforeEach; +import org.junit.jupiter.api.Test; + +class AtLoggedTest { + + private AtLogged logged; + private AtSimple origin; + private ByteArrayOutputStream out; + private String label; + + @BeforeEach + void setUp() { + out = new ByteArrayOutputStream(); + origin = new AtSimple(); + label = "test"; + logged = new AtLogged(origin, label, new PrintStream(out)); + } + + @Test + void convertsToStringAsOrigin() { + MatcherAssert.assertThat( + logged.toString(), + Matchers.equalTo(origin.toString()) + ); + } + + @Test + void convertsToPhiTermAsOrigin() { + MatcherAssert.assertThat( + logged.φTerm(), + Matchers.equalTo(origin.φTerm()) + ); + } + + @Test + void copiesWithLogging() { + logged.copy(Phi.Φ); + final String log = new String(out.toByteArray(), StandardCharsets.UTF_8); + MatcherAssert.assertThat( + log, + Matchers.containsString(String.format(" %s.copy()...", label)) + ); + MatcherAssert.assertThat( + log, + Matchers.containsString(String.format(" %s.copy()!", label)) + ); + } + + @Test + void getsWithLogging() { + MatcherAssert.assertThat( + logged.get(), + Matchers.equalTo(origin.get()) + ); + final String log = new String(out.toByteArray(), StandardCharsets.UTF_8); + MatcherAssert.assertThat( + log, + Matchers.containsString(String.format(" %s.get()...", label)) + ); + MatcherAssert.assertThat( + log, + Matchers.containsString(String.format(" %s.get()!", label)) + ); + } + + @Test + void putsWithLogging() { + logged.put(Phi.Φ); + final String log = new String(out.toByteArray(), StandardCharsets.UTF_8); + MatcherAssert.assertThat( + log, + Matchers.containsString(String.format(" %s.put()...", label)) + ); + MatcherAssert.assertThat( + log, + Matchers.containsString(String.format(" %s.put()!", label)) + ); + } +} \ No newline at end of file From 30eaf3a222e5b6daec15a853146a84a45ff386db Mon Sep 17 00:00:00 2001 From: volodya-lombrozo Date: Tue, 10 Jan 2023 09:59:43 +0300 Subject: [PATCH 2/5] feat(#1617): remove puzzle --- eo-runtime/src/main/java/org/eolang/AtLogged.java | 2 -- 1 file changed, 2 deletions(-) diff --git a/eo-runtime/src/main/java/org/eolang/AtLogged.java b/eo-runtime/src/main/java/org/eolang/AtLogged.java index 50e99f5b99..b49270a8dc 100644 --- a/eo-runtime/src/main/java/org/eolang/AtLogged.java +++ b/eo-runtime/src/main/java/org/eolang/AtLogged.java @@ -31,8 +31,6 @@ * convenient for debugging). * * @since 0.24 - * @todo #1614:30min This class don't have enough tests. We need to add more, at least for - * the next methods: toString(), φTerm(), copy(), put(), get(). */ final class AtLogged implements Attr { From 92176ebbf6433b8da2ffa5856ee248153849e71b Mon Sep 17 00:00:00 2001 From: volodya-lombrozo Date: Tue, 10 Jan 2023 10:09:57 +0300 Subject: [PATCH 3/5] feat(#1617): fix all qulice suggestions --- .../src/main/java/org/eolang/AtLogged.java | 11 +-- .../test/java/org/eolang/AtLoggedTest.java | 88 ++++++++++++++----- 2 files changed, 72 insertions(+), 27 deletions(-) diff --git a/eo-runtime/src/main/java/org/eolang/AtLogged.java b/eo-runtime/src/main/java/org/eolang/AtLogged.java index b49270a8dc..ce250cb52c 100644 --- a/eo-runtime/src/main/java/org/eolang/AtLogged.java +++ b/eo-runtime/src/main/java/org/eolang/AtLogged.java @@ -44,7 +44,9 @@ final class AtLogged implements Attr { */ private final String owner; - + /** + * Output stream. + */ private final PrintStream out; /** @@ -60,12 +62,12 @@ final class AtLogged implements Attr { * Ctor. * @param attr Attribute * @param label Label - * @param out Output stream + * @param stream Output stream */ - AtLogged(final Attr attr, final String label, PrintStream out) { + AtLogged(final Attr attr, final String label, final PrintStream stream) { this.origin = attr; this.owner = label; - this.out = out; + this.out = stream; } @Override @@ -100,5 +102,4 @@ public void put(final Phi src) { this.origin.put(src); this.out.printf(" %s.put()!\n", this.owner); } - } diff --git a/eo-runtime/src/test/java/org/eolang/AtLoggedTest.java b/eo-runtime/src/test/java/org/eolang/AtLoggedTest.java index 89a7617185..8a5689b7ee 100644 --- a/eo-runtime/src/test/java/org/eolang/AtLoggedTest.java +++ b/eo-runtime/src/test/java/org/eolang/AtLoggedTest.java @@ -1,3 +1,27 @@ +/* + * The MIT License (MIT) + * + * Copyright (c) 2016-2022 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; import java.io.ByteArrayOutputStream; @@ -8,79 +32,99 @@ import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.Test; +/** + * Test case for {@link AtLogged}. + * + * @since 0.29 + */ class AtLoggedTest { + /** + * Testable object. + */ private AtLogged logged; + + /** + * Delegate. + */ private AtSimple origin; + + /** + * Output stream. + */ private ByteArrayOutputStream out; + + /** + * Label for logging. + */ private String label; @BeforeEach void setUp() { - out = new ByteArrayOutputStream(); - origin = new AtSimple(); - label = "test"; - logged = new AtLogged(origin, label, new PrintStream(out)); + this.out = new ByteArrayOutputStream(); + this.origin = new AtSimple(); + this.label = "test"; + this.logged = new AtLogged(this.origin, this.label, new PrintStream(this.out)); } @Test void convertsToStringAsOrigin() { MatcherAssert.assertThat( - logged.toString(), - Matchers.equalTo(origin.toString()) + this.logged.toString(), + Matchers.equalTo(this.origin.toString()) ); } @Test void convertsToPhiTermAsOrigin() { MatcherAssert.assertThat( - logged.φTerm(), - Matchers.equalTo(origin.φTerm()) + this.logged.φTerm(), + Matchers.equalTo(this.origin.φTerm()) ); } @Test void copiesWithLogging() { - logged.copy(Phi.Φ); - final String log = new String(out.toByteArray(), StandardCharsets.UTF_8); + this.logged.copy(Phi.Φ); + final String log = new String(this.out.toByteArray(), StandardCharsets.UTF_8); MatcherAssert.assertThat( log, - Matchers.containsString(String.format(" %s.copy()...", label)) + Matchers.containsString(String.format(" %s.copy()...", this.label)) ); MatcherAssert.assertThat( log, - Matchers.containsString(String.format(" %s.copy()!", label)) + Matchers.containsString(String.format(" %s.copy()!", this.label)) ); } @Test void getsWithLogging() { MatcherAssert.assertThat( - logged.get(), - Matchers.equalTo(origin.get()) + this.logged.get(), + Matchers.equalTo(this.origin.get()) ); - final String log = new String(out.toByteArray(), StandardCharsets.UTF_8); + final String log = new String(this.out.toByteArray(), StandardCharsets.UTF_8); MatcherAssert.assertThat( log, - Matchers.containsString(String.format(" %s.get()...", label)) + Matchers.containsString(String.format(" %s.get()...", this.label)) ); MatcherAssert.assertThat( log, - Matchers.containsString(String.format(" %s.get()!", label)) + Matchers.containsString(String.format(" %s.get()!", this.label)) ); } @Test void putsWithLogging() { - logged.put(Phi.Φ); - final String log = new String(out.toByteArray(), StandardCharsets.UTF_8); + this.logged.put(Phi.Φ); + final String log = new String(this.out.toByteArray(), StandardCharsets.UTF_8); MatcherAssert.assertThat( log, - Matchers.containsString(String.format(" %s.put()...", label)) + Matchers.containsString(String.format(" %s.put()...", this.label)) ); MatcherAssert.assertThat( log, - Matchers.containsString(String.format(" %s.put()!", label)) + Matchers.containsString(String.format(" %s.put()!", this.label)) ); } -} \ No newline at end of file +} From 5e266e1c633000f46b6be62c2e4ee74071deebc2 Mon Sep 17 00:00:00 2001 From: volodya-lombrozo Date: Tue, 10 Jan 2023 10:14:02 +0300 Subject: [PATCH 4/5] feat(#1617): increase JaCoCo limits --- eo-runtime/pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/eo-runtime/pom.xml b/eo-runtime/pom.xml index 771e9cf66c..61a0a4ee5e 100644 --- a/eo-runtime/pom.xml +++ b/eo-runtime/pom.xml @@ -214,7 +214,7 @@ SOFTWARE. COMPLEXITY COVEREDRATIO - 0.52 + 0.53 METHOD From 4f111d365ac48de6d8ae62ea58320e8d1823db72 Mon Sep 17 00:00:00 2001 From: volodya-lombrozo Date: Tue, 10 Jan 2023 11:36:58 +0300 Subject: [PATCH 5/5] feat(#1617): add puzzle --- eo-runtime/src/main/java/org/eolang/AtLogged.java | 2 ++ 1 file changed, 2 insertions(+) diff --git a/eo-runtime/src/main/java/org/eolang/AtLogged.java b/eo-runtime/src/main/java/org/eolang/AtLogged.java index ce250cb52c..cc845cf789 100644 --- a/eo-runtime/src/main/java/org/eolang/AtLogged.java +++ b/eo-runtime/src/main/java/org/eolang/AtLogged.java @@ -31,6 +31,8 @@ * convenient for debugging). * * @since 0.24 + * @todo #1617:30min Use logger instead of System.out.println. It's much better to use standard + * logger in that class. Examples of using logger are inside {@link PhDefault} or {@link Dataized}. */ final class AtLogged implements Attr {