Migrate yang-common to JUnit5
[yangtools.git] / common / yang-common / src / test / java / org / opendaylight / yangtools / yang / common / DerivedStringTest.java
1 /*
2  * Copyright (c) 2018 Pantheon Technologies, s.r.o. and others.  All rights reserved.
3  *
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
7  */
8 package org.opendaylight.yangtools.yang.common;
9
10 import static org.junit.jupiter.api.Assertions.assertEquals;
11 import static org.junit.jupiter.api.Assertions.assertSame;
12
13 import org.eclipse.jdt.annotation.NonNullByDefault;
14 import org.eclipse.jdt.annotation.Nullable;
15 import org.junit.jupiter.api.Test;
16 import org.opendaylight.yangtools.concepts.Either;
17
18 @NonNullByDefault
19 public class DerivedStringTest {
20     public static class EagerDerivedString extends CachingDerivedString<EagerDerivedString> {
21         private static final long serialVersionUID = 1L;
22
23         protected EagerDerivedString(final String str) {
24             super(str);
25         }
26
27         @Override
28         @SuppressWarnings("checkstyle:parameterName")
29         public final int compareTo(final EagerDerivedString o) {
30             return toCanonicalString().compareTo(o.toCanonicalString());
31         }
32
33         @Override
34         public final CanonicalValueSupport<EagerDerivedString> support() {
35             return EAGER_SUPPORT;
36         }
37
38         @Override
39         public final int hashCode() {
40             return toCanonicalString().hashCode();
41         }
42
43         @Override
44         public final boolean equals(@Nullable final Object obj) {
45             if (obj == this) {
46                 return true;
47             }
48             if (obj instanceof String) {
49                 return toCanonicalString().equals(obj);
50             }
51
52             return obj instanceof DerivedString
53                     && toCanonicalString().equals(((DerivedString<?>)obj).toCanonicalString());
54         }
55
56         @Override
57         protected final String computeCanonicalString() {
58             throw new UnsupportedOperationException();
59         }
60     }
61
62     public static class LazyDerivedString extends CachingDerivedString<LazyDerivedString> {
63         private static final long serialVersionUID = 1L;
64
65         private final String str;
66
67         protected LazyDerivedString(final String str) {
68             this.str = str;
69         }
70
71         @Override
72         @SuppressWarnings("checkstyle:parameterName")
73         public final int compareTo(final LazyDerivedString o) {
74             return str.compareTo(o.str);
75         }
76
77         @Override
78         public final CanonicalValueSupport<LazyDerivedString> support() {
79             return LAZY_SUPPORT;
80         }
81
82         @Override
83         public final int hashCode() {
84             return str.hashCode();
85         }
86
87         @Override
88         public final boolean equals(@Nullable final Object obj) {
89             if (obj == this) {
90                 return true;
91             }
92             if (obj instanceof String) {
93                 return str.equals(obj);
94             }
95
96             return obj instanceof DerivedString && str.equals(((DerivedString<?>)obj).toCanonicalString());
97         }
98
99         @Override
100         protected final String computeCanonicalString() {
101             return str;
102         }
103     }
104
105     public static final class EagerDerivedStringSupport extends AbstractCanonicalValueSupport<EagerDerivedString> {
106         EagerDerivedStringSupport() {
107             super(EagerDerivedString.class);
108         }
109
110         @Override
111         public Either<EagerDerivedString, CanonicalValueViolation> fromString(final String str) {
112             return Either.ofFirst(new EagerDerivedString(str));
113         }
114     }
115
116     public static final class LazyDerivedStringSupport extends AbstractCanonicalValueSupport<LazyDerivedString> {
117         LazyDerivedStringSupport() {
118             super(LazyDerivedString.class);
119         }
120
121         @Override
122         public Either<LazyDerivedString, CanonicalValueViolation> fromString(final String str) {
123             return Either.ofFirst(new LazyDerivedString(str));
124         }
125     }
126
127     private static final CanonicalValueSupport<EagerDerivedString> EAGER_SUPPORT = new EagerDerivedStringSupport();
128     private static final CanonicalValueSupport<LazyDerivedString> LAZY_SUPPORT = new LazyDerivedStringSupport();
129
130     @Test
131     public void testEager() {
132         final DerivedString<?> foo = new EagerDerivedString("foo");
133         assertSame("foo", foo.toString());
134     }
135
136     @Test
137     public void testLazy() {
138         final DerivedString<?> foo = new LazyDerivedString("foo");
139         final String first = foo.toString();
140         assertEquals("foo", first);
141         assertSame(first, foo.toString());
142     }
143
144 }