2 * Copyright (c) 2018 Pantheon Technologies, s.r.o. and others. All rights reserved.
4 * This program and the accompanying materials are made available under the
5 * terms of the Eclipse Public License v1.0 which accompanies this distribution,
6 * and is available at http://www.eclipse.org/legal/epl-v10.html
8 package org.opendaylight.yangtools.yang.common;
10 import static org.junit.Assert.assertEquals;
11 import static org.junit.Assert.assertSame;
13 import org.eclipse.jdt.annotation.NonNullByDefault;
14 import org.eclipse.jdt.annotation.Nullable;
15 import org.junit.Test;
18 public class DerivedStringTest {
19 public static class EagerDerivedString extends CachingDerivedString<EagerDerivedString> {
20 private static final long serialVersionUID = 1L;
22 protected EagerDerivedString(final String str) {
27 @SuppressWarnings("checkstyle:parameterName")
28 public final int compareTo(final EagerDerivedString o) {
29 return toCanonicalString().compareTo(o.toCanonicalString());
33 public final DerivedStringSupport<EagerDerivedString> support() {
38 public final int hashCode() {
39 return toCanonicalString().hashCode();
43 public final boolean equals(@Nullable final Object obj) {
47 if (obj instanceof String) {
48 return toCanonicalString().equals(obj);
51 return obj instanceof DerivedString
52 && toCanonicalString().equals(((DerivedString<?>)obj).toCanonicalString());
56 protected final String computeCanonicalString() {
57 throw new UnsupportedOperationException();
61 public static class LazyDerivedString extends CachingDerivedString<LazyDerivedString> {
62 private static final long serialVersionUID = 1L;
64 private final String str;
66 protected LazyDerivedString(final String str) {
71 @SuppressWarnings("checkstyle:parameterName")
72 public final int compareTo(final LazyDerivedString o) {
73 return str.compareTo(o.str);
77 public final DerivedStringSupport<LazyDerivedString> support() {
82 public final int hashCode() {
83 return str.hashCode();
87 public final boolean equals(@Nullable final Object obj) {
91 if (obj instanceof String) {
92 return str.equals(obj);
95 return obj instanceof DerivedString && str.equals(((DerivedString<?>)obj).toCanonicalString());
99 protected final String computeCanonicalString() {
104 public static final class EagerDerivedStringSupport extends AbstractDerivedStringSupport<EagerDerivedString> {
105 EagerDerivedStringSupport() {
106 super(EagerDerivedString.class);
110 public EagerDerivedString fromString(final String str) {
111 return new EagerDerivedString(str);
115 public static final class LazyDerivedStringSupport extends AbstractDerivedStringSupport<LazyDerivedString> {
116 LazyDerivedStringSupport() {
117 super(LazyDerivedString.class);
121 public LazyDerivedString fromString(final String str) {
122 return new LazyDerivedString(str);
126 private static final DerivedStringSupport<EagerDerivedString> EAGER_SUPPORT = new EagerDerivedStringSupport();
127 private static final DerivedStringSupport<LazyDerivedString> LAZY_SUPPORT = new LazyDerivedStringSupport();
130 public void testEager() {
131 final DerivedString<?> foo = new EagerDerivedString("foo");
132 assertSame("foo", foo.toString());
136 public void testLazy() {
137 final DerivedString<?> foo = new LazyDerivedString("foo");
138 final String first = foo.toString();
139 assertEquals("foo", first);
140 assertSame(first, foo.toString());