Upload files to "java/markup"

This commit is contained in:
2026-04-13 10:47:55 +03:00
parent a3ea393291
commit d5c3e10e29
5 changed files with 144 additions and 0 deletions

View File

@@ -0,0 +1,102 @@
package markup;
import base.Asserts;
import base.BaseChecker;
import base.TestCounter;
import java.lang.invoke.MethodHandle;
import java.lang.invoke.MethodHandles;
import java.lang.invoke.MethodType;
import java.util.Map;
import java.util.function.BiConsumer;
import java.util.function.Consumer;
/**
* @author Georgiy Korneev (kgeorgiy@kgeorgiy.info)
*/
public final class MarkupTester {
private final Map<String, String> mapping;
private final String toString;
private MarkupTester(
final Map<String, String> mapping,
final String toString
) {
this.mapping = mapping;
this.toString = toString;
}
public static Consumer<TestCounter> variant(
final Consumer<Checker> checker,
final String name,
final Map<String, String> mapping
) {
return counter ->
test(checker).accept(
new MarkupTester(mapping, "to" + name),
counter
);
}
public static BiConsumer<MarkupTester, TestCounter> test(
final Consumer<Checker> tester
) {
return (checker, counter) ->
tester.accept(checker.new Checker(counter));
}
@Override
public String toString() {
return toString;
}
public class Checker extends BaseChecker {
public Checker(final TestCounter counter) {
super(counter);
}
private <T> MethodHandle findMethod(final T value) {
try {
return MethodHandles.publicLookup().findVirtual(
value.getClass(),
toString,
MethodType.methodType(void.class, StringBuilder.class)
);
} catch (final NoSuchMethodException | IllegalAccessException e) {
throw Asserts.error(
"Cannot find method 'void %s(StringBuilder)' for %s",
toString,
value.getClass()
);
}
}
public <T> void test(final T value, String expectedTemplate) {
final MethodHandle method = findMethod(value);
for (final Map.Entry<String, String> entry : mapping.entrySet()) {
expectedTemplate = expectedTemplate.replace(
entry.getKey(),
entry.getValue()
);
}
final String expected = expectedTemplate;
counter.println("Test " + counter.getTestNo());
counter.test(() -> {
final StringBuilder sb = new StringBuilder();
try {
method.invoke(value, sb);
} catch (final Throwable e) {
throw Asserts.error(
"%s(StringBuilder) for %s thrown exception: %s",
toString,
value.getClass(),
e
);
}
Asserts.assertEquals("Result", expected, sb.toString());
});
}
}
}

View File

@@ -0,0 +1,13 @@
package markup;
import java.util.List;
/**
* @author Nikita Doschennikov (me@fymio.us)
*/
public class OrderedList extends AbstractList {
public OrderedList(List<ListItem> items) {
super(items, "ol", "\\begin{enumerate}", "\\end{enumerate}");
}
}

View File

@@ -0,0 +1,16 @@
package markup;
import java.util.List;
/**
* @author Nikita Doschennikov (me@fymio.us)
*/
public class Paragraph
extends AbstractMarkup
implements ContainsInListItem, PrimePart
{
public Paragraph(List<PartOfParagraph> items) {
super(items, "", "p", "\\par{}", "");
}
}

View File

@@ -0,0 +1,6 @@
package markup;
/**
* @author Nikita Doschennikov (me@fymio.us)
*/
public interface PartOfParagraph extends Markup {}

View File

@@ -0,0 +1,7 @@
/**
* Tests for <a href="https://www.kgeorgiy.info/courses/prog-intro/homeworks.html#markup">Markup</a> homework
* of <a href="https://www.kgeorgiy.info/courses/prog-intro/">Introduction to Programming</a> course.
*
* @author Georgiy Korneev (kgeorgiy@kgeorgiy.info)
*/
package markup;