Define a feature-parent
[yangtools.git] / common / concepts / src / test / java / org / opendaylight / yangtools / concepts / SemVerTest.java
1 /*
2  * Copyright (c) 2016 Cisco Systems, Inc. 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.concepts;
9
10 import static org.junit.jupiter.api.Assertions.assertEquals;
11 import static org.junit.jupiter.api.Assertions.assertFalse;
12 import static org.junit.jupiter.api.Assertions.assertNotNull;
13 import static org.junit.jupiter.api.Assertions.assertTrue;
14
15 import java.io.ByteArrayInputStream;
16 import java.io.ByteArrayOutputStream;
17 import java.io.ObjectInputStream;
18 import java.io.ObjectOutputStream;
19 import java.util.HexFormat;
20 import org.junit.jupiter.api.Test;
21
22 class SemVerTest {
23     private static final HexFormat HEX_FORMAT = HexFormat.of().withUpperCase().withDelimiter(":");
24     private static final String SERIALIZED = """
25         AC:ED:00:05:73:72:00:2A:6F:72:67:2E:6F:70:65:6E:64:61:79:6C:69:67:68:74:2E:79:61:6E:67:74:\
26         6F:6F:6C:73:2E:63:6F:6E:63:65:70:74:73:2E:53:65:6D:56:65:72:00:00:00:00:00:00:00:01:02:00:\
27         03:49:00:05:6D:61:6A:6F:72:49:00:05:6D:69:6E:6F:72:49:00:05:70:61:74:63:68:78:70:00:00:00:\
28         01:00:00:00:02:00:00:00:03""";
29
30     @Test
31     void testSemVer() {
32         final var semVer = new SemVer(5);
33         assertNotNull(semVer);
34
35         assertEquals(5, semVer.major());
36         assertEquals(0, semVer.minor());
37         assertEquals(0, semVer.patch());
38
39         final var semVer2 = SemVer.valueOf("1.2.3");
40         assertNotNull(semVer2);
41
42         assertEquals(1, semVer2.major());
43         assertEquals(2, semVer2.minor());
44         assertEquals(3, semVer2.patch());
45
46         final var semVer3 = SemVer.valueOf("1");
47         assertNotNull(semVer3);
48
49         assertEquals(1, semVer3.major());
50         assertEquals(0, semVer3.minor());
51         assertEquals(0, semVer3.patch());
52
53         final var semVer4 = SemVer.valueOf("1.2");
54         assertNotNull(semVer4);
55
56         assertEquals(1, semVer4.major());
57         assertEquals(2, semVer4.minor());
58         assertEquals(0, semVer4.patch());
59
60         assertEquals(1, semVer2.compareTo(semVer3));
61         assertEquals(-1, semVer3.compareTo(semVer2));
62         assertEquals(0, semVer2.compareTo(semVer2));
63
64         assertTrue(semVer2.equals(semVer2));
65         assertFalse(semVer2.equals("not equal"));
66         assertFalse(semVer2.equals(semVer3));
67
68         assertEquals(semVer2.hashCode(), semVer2.hashCode());
69
70         assertEquals("1.0.0", semVer3.toString());
71     }
72
73     @Test
74     void testSerialize() throws Exception {
75         final byte[] bytes;
76         try (var bos = new ByteArrayOutputStream()) {
77             try (var oos = new ObjectOutputStream(bos)) {
78                 oos.writeObject(new SemVer(1, 2, 3));
79             }
80             bytes = bos.toByteArray();
81         }
82
83         assertEquals(SERIALIZED, HEX_FORMAT.formatHex(bytes));
84     }
85
86     @Test
87     void testDeserialize() throws Exception {
88         final Object value;
89         try (var oos = new ObjectInputStream(new ByteArrayInputStream(HEX_FORMAT.parseHex(SERIALIZED)))) {
90             value = oos.readObject();
91         }
92         assertEquals(new SemVer(1, 2, 3), value);
93     }
94 }