+/*
+ * Copyright (c) 2016 Cisco Systems, Inc. and others. All rights reserved.
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v1.0 which accompanies this distribution,
+ * and is available at http://www.eclipse.org/legal/epl-v10.html
+ */
+package org.opendaylight.yangtools.yang.parser.spi.meta;
+
+import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.assertFalse;
+import static org.junit.Assert.assertSame;
+import static org.junit.Assert.assertTrue;
+
+import org.junit.Test;
+
+public class CopyHistoryTest {
+
+ @Test
+ public void testSingleton() {
+ final CopyHistory original = CopyHistory.original();
+
+ assertEquals(CopyType.ORIGINAL, original.getLastOperation());
+ assertTrue(original.contains(CopyType.ORIGINAL));
+ assertFalse(original.contains(CopyType.ADDED_BY_USES));
+ assertFalse(original.contains(CopyType.ADDED_BY_AUGMENTATION));
+ assertFalse(original.contains(CopyType.ADDED_BY_USES_AUGMENTATION));
+
+ assertSame(original, CopyHistory.original());
+ }
+
+ @Test
+ public void testAppend() {
+ final CopyHistory original = CopyHistory.original();
+ assertSame(original, original.append(CopyType.ORIGINAL, original));
+
+ final CopyHistory originalUA = original.append(CopyType.ADDED_BY_USES_AUGMENTATION, original);
+ assertEquals(CopyType.ADDED_BY_USES_AUGMENTATION, originalUA.getLastOperation());
+ assertTrue(originalUA.contains(CopyType.ORIGINAL));
+ assertFalse(originalUA.contains(CopyType.ADDED_BY_USES));
+ assertFalse(originalUA.contains(CopyType.ADDED_BY_AUGMENTATION));
+ assertTrue(originalUA.contains(CopyType.ADDED_BY_USES_AUGMENTATION));
+
+ assertSame(originalUA, original.append(CopyType.ADDED_BY_USES_AUGMENTATION, original));
+ assertSame(originalUA, originalUA.append(CopyType.ADDED_BY_USES_AUGMENTATION, original));
+
+ final CopyHistory originalU = original.append(CopyType.ADDED_BY_USES, original);
+ assertEquals(CopyType.ADDED_BY_USES, originalU.getLastOperation());
+ assertTrue(originalU.contains(CopyType.ORIGINAL));
+ assertTrue(originalU.contains(CopyType.ADDED_BY_USES));
+ assertFalse(originalU.contains(CopyType.ADDED_BY_AUGMENTATION));
+ assertFalse(originalU.contains(CopyType.ADDED_BY_USES_AUGMENTATION));
+
+ final CopyHistory uaU = originalUA.append(CopyType.ADDED_BY_USES, original);
+ assertEquals(CopyType.ADDED_BY_USES, uaU.getLastOperation());
+ assertTrue(uaU.contains(CopyType.ORIGINAL));
+ assertTrue(uaU.contains(CopyType.ADDED_BY_USES));
+ assertFalse(uaU.contains(CopyType.ADDED_BY_AUGMENTATION));
+ assertTrue(uaU.contains(CopyType.ADDED_BY_USES_AUGMENTATION));
+
+ assertSame(uaU, originalUA.append(CopyType.ADDED_BY_USES, original));
+
+ final CopyHistory res = originalUA.append(CopyType.ADDED_BY_AUGMENTATION, originalU);
+ assertEquals(CopyType.ADDED_BY_AUGMENTATION, res.getLastOperation());
+ assertTrue(res.contains(CopyType.ORIGINAL));
+ assertTrue(res.contains(CopyType.ADDED_BY_USES));
+ assertTrue(res.contains(CopyType.ADDED_BY_AUGMENTATION));
+ assertTrue(res.contains(CopyType.ADDED_BY_USES_AUGMENTATION));
+ }
+
+}