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