tmf.test: Add JUnit tests for testing the class TmfTreeDataModel

Change-Id: I3a84be9146a77f501fc498a35be4182760dafc36
Signed-off-by: Bernd Hufmann <Bernd.Hufmann@ericsson.com>
Signed-off-by: Matthew Khouzam <matthew.khouzam@ericsson.com>
Reviewed-on: https://git.eclipse.org/r/c/tracecompass/org.eclipse.tracecompass/+/167021
Tested-by: Trace Compass Bot <tracecompass-bot@eclipse.org>
diff --git a/tmf/org.eclipse.tracecompass.tmf.core.tests/src/org/eclipse/tracecompass/tmf/core/tests/model/tree/TmfTreeDataModelTest.java b/tmf/org.eclipse.tracecompass.tmf.core.tests/src/org/eclipse/tracecompass/tmf/core/tests/model/tree/TmfTreeDataModelTest.java
new file mode 100644
index 0000000..e50979d
--- /dev/null
+++ b/tmf/org.eclipse.tracecompass.tmf.core.tests/src/org/eclipse/tracecompass/tmf/core/tests/model/tree/TmfTreeDataModelTest.java
@@ -0,0 +1,204 @@
+/**********************************************************************
+ * Copyright (c) 2020 Ericsson
+ *
+ * All rights reserved. This program and the accompanying materials are
+ * made available under the terms of the Eclipse Public License 2.0 which
+ * accompanies this distribution, and is available at
+ * https://www.eclipse.org/legal/epl-2.0/
+ *
+ * SPDX-License-Identifier: EPL-2.0
+ **********************************************************************/
+package org.eclipse.tracecompass.tmf.core.tests.model.tree;
+
+import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.assertFalse;
+import static org.junit.Assert.assertTrue;
+
+import java.util.Arrays;
+import java.util.List;
+
+import org.eclipse.jdt.annotation.NonNull;
+import org.eclipse.tracecompass.tmf.core.model.OutputElementStyle;
+import org.eclipse.tracecompass.tmf.core.model.tree.TmfTreeDataModel;
+import org.junit.Before;
+import org.junit.Test;
+
+/**
+ * JUnit Test class to test {@link TmfTreeDataModel}
+ */
+public class TmfTreeDataModelTest {
+    // ------------------------------------------------------------------------
+    // Test data
+    // ------------------------------------------------------------------------
+    private static final String TO_STRING = "toString";
+    private static final String HASH_CODE = "hashCode";
+    private static final String EQUALS = "equals";
+
+    private static final @NonNull List<@NonNull String> LABELS0 = Arrays.asList("label1, label2, label3");
+    private static final long ID0 = 0L;
+    private static final long PARENT_ID0 = -1L;
+    private static final OutputElementStyle STYLE0 = null;
+    private static final @NonNull List<@NonNull String> LABELS1 = Arrays.asList("label4, label5, label6", "label7");
+    private static final long ID1 = 1L;
+    private static final long PARENT_ID1 = 0L;
+    private static final boolean HAS_MODEL1 = false;
+    private static final @NonNull OutputElementStyle STYLE1 = new OutputElementStyle("1");
+
+    private static final long ID2 = 0L;
+    private static final long PARENT_ID2 = -1L;
+    private static final OutputElementStyle STYLE3 = null;
+    private static final String NAME = "Name";
+
+    private TmfTreeDataModel fModel0 = null;
+    private TmfTreeDataModel fModel1 = null;
+
+    // ------------------------------------------------------------------------
+    // Test setup
+    // ------------------------------------------------------------------------
+    /**
+     * Test initialization.
+     */
+    @Before
+    public void setUp() {
+        fModel0 = createModel(0);
+        fModel1 = createModel(1);
+    }
+
+    // ------------------------------------------------------------------------
+    // Tests
+    // ------------------------------------------------------------------------
+
+    /**
+     * Test constructors and getter/setters.
+     */
+    @Test
+    public void testConstructors() {
+        TmfTreeDataModel model0 = createModel(0);
+        assertEquals(ID0, model0.getId());
+        assertEquals(PARENT_ID0, model0.getParentId());
+        assertEquals(LABELS0.get(0), model0.getName());
+        assertEquals(LABELS0, model0.getLabels());
+        assertTrue(model0.hasRowModel());
+        assertEquals(STYLE0, model0.getStyle());
+
+        TmfTreeDataModel model1 = createModel(1);
+        assertEquals(ID1, model1.getId());
+        assertEquals(PARENT_ID1, model1.getParentId());
+        assertEquals(LABELS1.get(0), model1.getName());
+        assertEquals(LABELS1, model1.getLabels());
+        assertFalse(model1.hasRowModel());
+        assertEquals(STYLE1, model1.getStyle());
+
+        TmfTreeDataModel model2 = createModel(2);
+        assertEquals(ID2, model2.getId());
+        assertEquals(PARENT_ID2, model2.getParentId());
+        assertEquals(NAME, model2.getName());
+        assertEquals(1, model2.getLabels().size());
+        assertEquals(NAME, model2.getLabels().get(0));
+        assertTrue(model2.hasRowModel());
+        assertEquals(STYLE3, model2.getStyle());
+
+    }
+
+    // ------------------------------------------------------------------------
+    // TmfTreeDataModel#equals()
+    // ------------------------------------------------------------------------
+
+    /**
+     * Run the {@link TmfTreeDataModel#equals} method test.
+     */
+    @Test
+    public void testEqualsReflexivity() {
+        assertTrue(EQUALS, fModel0.equals(fModel0));
+        assertTrue(EQUALS, fModel1.equals(fModel1));
+
+        assertTrue(EQUALS, !fModel0.equals(fModel1));
+        assertTrue(EQUALS, !fModel1.equals(fModel0));
+    }
+
+    /**
+     * Run the {@link TmfTreeDataModel#equals} method test.
+     */
+    @Test
+    public void testEqualsSymmetry() {
+        TmfTreeDataModel model0 = createModel(0);
+        TmfTreeDataModel model1 = createModel(1);
+
+        assertTrue(EQUALS, model0.equals(fModel0));
+        assertTrue(EQUALS, fModel0.equals(model0));
+
+        assertTrue(EQUALS, model1.equals(fModel1));
+        assertTrue(EQUALS, fModel1.equals(model1));
+    }
+
+    /**
+     * Run the {@link TmfTreeDataModel#equals} method test.
+     */
+    @Test
+    public void testEqualsTransivity() {
+        TmfTreeDataModel model0 = createModel(0);
+        TmfTreeDataModel model1 = createModel(0);
+        TmfTreeDataModel model2 = createModel(0);
+
+        assertTrue(EQUALS, model0.equals(model1));
+        assertTrue(EQUALS, model1.equals(model2));
+        assertTrue(EQUALS, model0.equals(model2));
+    }
+
+    /**
+     * Run the {@link TmfTreeDataModel#equals} method test.
+     */
+    @Test
+    public void testEqualsNull() {
+        TmfTreeDataModel model0 = null;
+        assertFalse(EQUALS, fModel0.equals(model0));
+        assertFalse(EQUALS, fModel1.equals(model0));
+    }
+
+    // ------------------------------------------------------------------------
+    // TmfTreeDataModel#hashCode
+    // ------------------------------------------------------------------------
+
+    /**
+     * Run the {@link TmfTreeDataModel#hashCode} method test.
+     */
+    @Test
+    public void testHashCode() {
+        TmfTreeDataModel model0 = createModel(0);
+        TmfTreeDataModel model1 = createModel(1);
+
+        assertTrue(HASH_CODE, fModel0.hashCode() == model0.hashCode());
+        assertTrue(HASH_CODE, fModel1.hashCode() == model1.hashCode());
+
+        assertTrue(HASH_CODE, fModel0.hashCode() != model1.hashCode());
+        assertTrue(HASH_CODE, fModel1.hashCode() != model0.hashCode());
+    }
+
+    /**
+     * Test {@link TmfTreeDataModel#toString()}
+     */
+    @Test
+    public void testToString() {
+        assertEquals(TO_STRING, "<name=[label1, label2, label3] id=0 parentId=-1 style=null hasRowModel=true>", fModel0.toString());
+        assertEquals(TO_STRING, "<name=[label4, label5, label6, label7] id=1 parentId=0 style=Style [1, {}] hasRowModel=false>", fModel1.toString());
+        TmfTreeDataModel model2 = createModel(2);
+        assertEquals(TO_STRING, "<name=[Name] id=0 parentId=-1 style=null hasRowModel=true>", model2.toString());
+    }
+
+    // ------------------------------------------------------------------------
+    // Helpers
+    // ------------------------------------------------------------------------
+
+    private static TmfTreeDataModel createModel(int i) {
+        switch (i) {
+        case 0:
+            return new TmfTreeDataModel(ID0, PARENT_ID0, LABELS0);
+        case 1:
+            return new TmfTreeDataModel(ID1, PARENT_ID1, LABELS1, HAS_MODEL1, STYLE1);
+        case 2:
+            return new TmfTreeDataModel(ID2, PARENT_ID2, NAME);
+        default:
+            return new TmfTreeDataModel(ID0, PARENT_ID0, LABELS0);
+        }
+    }
+}
diff --git a/tmf/org.eclipse.tracecompass.tmf.core/src/org/eclipse/tracecompass/tmf/core/model/tree/TmfTreeDataModel.java b/tmf/org.eclipse.tracecompass.tmf.core/src/org/eclipse/tracecompass/tmf/core/model/tree/TmfTreeDataModel.java
index 3f525f6..0777bfe 100644
--- a/tmf/org.eclipse.tracecompass.tmf.core/src/org/eclipse/tracecompass/tmf/core/model/tree/TmfTreeDataModel.java
+++ b/tmf/org.eclipse.tracecompass.tmf.core/src/org/eclipse/tracecompass/tmf/core/model/tree/TmfTreeDataModel.java
@@ -127,18 +127,25 @@
             return false;
         }
         TmfTreeDataModel other = (TmfTreeDataModel) obj;
+
+        if (!Objects.equals(fStyle, other.fStyle)) {
+            return false;
+        }
+
         return fId == other.fId
                 && fParentId == other.fParentId
-                && fLabels.equals(other.fLabels);
+                && fLabels.equals(other.fLabels)
+                && fHasRowModel == other.fHasRowModel;
     }
 
     @Override
     public int hashCode() {
-        return Objects.hash(fId, fParentId, fLabels);
+        return Objects.hash(fId, fParentId, fLabels, fStyle, fHasRowModel);
     }
 
+    @SuppressWarnings("nls")
     @Override
     public String toString() {
-        return "<name=" + fLabels + " id=" + fId + " parentId=" + fParentId + ">"; //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$ //$NON-NLS-4$
+        return "<name=" + fLabels + " id=" + fId + " parentId=" + fParentId + " style=" + fStyle + " hasRowModel=" + fHasRowModel +">";
     }
 }