tmf.ui: fix callsite and model lookup regression
authorBernd Hufmann <Bernd.Hufmann@ericsson.com>
Sat, 6 Dec 2014 01:58:53 +0000 (20:58 -0500)
committerMatthew Khouzam <matthew.khouzam@ericsson.com>
Mon, 8 Dec 2014 17:36:29 +0000 (12:36 -0500)
The notion of ITmfCallsite is lost when an event is cached as it is now
an CachedEvent which does not implement ITmfCallsite. This patch checks
if the event is cached, and if so, resolves the parent event to
validate.

Change-Id: I99733958bd1ac797fca32c8b293e709f4ddc3cc5
Signed-off-by: Matthew Khouzam <matthew.khouzam@ericsson.com>
Signed-off-by: Bernd Hufmann <Bernd.Hufmann@ericsson.com>
Reviewed-on: https://git.eclipse.org/r/37120
Tested-by: Hudson CI
12 files changed:
org.eclipse.tracecompass.tmf.core.tests/src/org/eclipse/tracecompass/tmf/core/tests/trace/text/TextTraceEventContentTest.java
org.eclipse.tracecompass.tmf.core.tests/src/org/eclipse/tracecompass/tmf/core/tests/trace/text/TextTraceTest.java
org.eclipse.tracecompass.tmf.core.tests/stubs/org/eclipse/tracecompass/tmf/tests/stubs/trace/text/SyslogEvent.java
org.eclipse.tracecompass.tmf.core.tests/stubs/org/eclipse/tracecompass/tmf/tests/stubs/trace/text/SyslogEventType.java
org.eclipse.tracecompass.tmf.core.tests/stubs/org/eclipse/tracecompass/tmf/tests/stubs/trace/text/SyslogTrace.java
org.eclipse.tracecompass.tmf.core.tests/testfiles/SourceFile [new file with mode: 0644]
org.eclipse.tracecompass.tmf.core.tests/testfiles/syslog
org.eclipse.tracecompass.tmf.core.tests/testfiles/syslog_collapse
org.eclipse.tracecompass.tmf.ui.swtbot.tests/src/org/eclipse/tracecompass/tmf/ui/swtbot/tests/table/AllTests.java
org.eclipse.tracecompass.tmf.ui.swtbot.tests/src/org/eclipse/tracecompass/tmf/ui/swtbot/tests/table/CallsiteEventsInTableTest.java [new file with mode: 0644]
org.eclipse.tracecompass.tmf.ui.swtbot.tests/src/org/eclipse/tracecompass/tmf/ui/swtbot/tests/table/CollapseEventsInTableTest.java
org.eclipse.tracecompass.tmf.ui/src/org/eclipse/tracecompass/tmf/ui/viewers/events/TmfEventsTable.java

index acbda3f5a53ae3a890aecc66c3400e2b732a2dc8..95d415b30b379e1f92b2902df3210f7230362f1b 100644 (file)
@@ -47,6 +47,8 @@ public class TextTraceEventContentTest {
         fEventContent1.setFieldValue(Index.TIMESTAMP, "Jan 1 01:01:01");
         fEventContent1.setFieldValue(Index.HOST, "HostA");
         fEventContent1.setFieldValue(Index.LOGGER, "LoggerA");
+        fEventContent1.setFieldValue(Index.FILE, "SourceFileA");
+        fEventContent1.setFieldValue(Index.LINE, "0");
         fEventContent1.setFieldValue(Index.MESSAGE, "MessageA");
 
         fEventContent1Clone = new TextTraceEventContent(SyslogEventType.LABELS);
@@ -54,29 +56,37 @@ public class TextTraceEventContentTest {
         fEventContent1Clone.setFieldValue(Index.TIMESTAMP, "Jan 1 01:01:01");
         fEventContent1Clone.setFieldValue(Index.HOST, "HostA");
         fEventContent1Clone.setFieldValue(Index.LOGGER, "LoggerA");
+        fEventContent1Clone.setFieldValue(Index.FILE, "SourceFileA");
+        fEventContent1Clone.setFieldValue(Index.LINE, "0");
         fEventContent1Clone.setFieldValue(Index.MESSAGE, "MessageA");
 
         fEventContent2 = new TextTraceEventContent(SyslogEventType.LABELS);
         fEventContent2.setFieldValue(SyslogEventType.LABELS[0], "Jan 1 02:02:02");
         fEventContent2.setFieldValue(SyslogEventType.LABELS[1], "HostB");
         fEventContent2.setFieldValue(SyslogEventType.LABELS[2], "LoggerB");
+        fEventContent2.setFieldValue(SyslogEventType.LABELS[3], "SourceFileB");
+        fEventContent2.setFieldValue(SyslogEventType.LABELS[4], "2");
         StringBuffer buffer = new StringBuffer();
         buffer.append("Message B");
-        fEventContent2.setFieldValue(SyslogEventType.LABELS[3],   buffer);
+        fEventContent2.setFieldValue(SyslogEventType.LABELS[5],   buffer);
 
         fEventContent2Clone = new TextTraceEventContent(SyslogEventType.LABELS);
         fEventContent2Clone.setFieldValue(SyslogEventType.LABELS[0], "Jan 1 02:02:02");
         fEventContent2Clone.setFieldValue(SyslogEventType.LABELS[1], "HostB");
         fEventContent2Clone.setFieldValue(SyslogEventType.LABELS[2], "LoggerB");
+        fEventContent2Clone.setFieldValue(SyslogEventType.LABELS[3], "SourceFileB");
+        fEventContent2Clone.setFieldValue(SyslogEventType.LABELS[4], "2");
         buffer = new StringBuffer();
         buffer.append("Message B");
-        fEventContent2Clone.setFieldValue(SyslogEventType.LABELS[3],   buffer);
+        fEventContent2Clone.setFieldValue(SyslogEventType.LABELS[5],   buffer);
     }
 
     public void testConstructorConstructor() {
         assertEquals("getField:TIMESTAMP", "Jan 1 01:01:01", fEventContent1.getFieldValue(Index.TIMESTAMP));
         assertEquals("getField:HOST", "HostA", fEventContent1.getFieldValue(Index.HOST));
         assertEquals("getField:LOGGER", "LoggerA", fEventContent1.getFieldValue(Index.LOGGER));
+        assertEquals("getField:FILE", "SourceFileA", fEventContent1.getFieldValue(Index.FILE));
+        assertEquals("getField:LINE", "0", fEventContent1.getFieldValue(Index.LINE));
         assertEquals("getField:MESSAGE", "MessageA", fEventContent1.getFieldValue(Index.MESSAGE).toString());
     }
 
@@ -92,6 +102,8 @@ public class TextTraceEventContentTest {
         assertTrue (eventType.getFieldNames().contains("Timestamp"));
         assertTrue (eventType.getFieldNames().contains("Host"));
         assertTrue (eventType.getFieldNames().contains("Logger"));
+        assertTrue (eventType.getFieldNames().contains("File"));
+        assertTrue (eventType.getFieldNames().contains("Line"));
         assertTrue (eventType.getFieldNames().contains("Message"));
     }
 
@@ -140,8 +152,10 @@ public class TextTraceEventContentTest {
         assertEquals("getFieldValue:TIMESTAMP", "Jan 1 01:01:01", fEventContent1.getFieldValue(Index.TIMESTAMP));
         assertEquals("getFieldValue:HOST", "HostA", fEventContent1.getFieldValue(Index.HOST));
         assertEquals("getFieldValue:LOGGER", "LoggerA", fEventContent1.getFieldValue(Index.LOGGER));
+        assertEquals("getFieldValue:FILE", "SourceFileA", fEventContent1.getFieldValue(Index.FILE));
+        assertEquals("getFieldValue:LINE", "0", fEventContent1.getFieldValue(Index.LINE));
         assertEquals("getFieldValue:MESSAGE", "MessageA", fEventContent1.getFieldValue(Index.MESSAGE));
-        assertNull(fEventContent1.getFieldValue(4));
+        assertNull(fEventContent1.getFieldValue(6));
     }
 
     @Test
@@ -149,6 +163,8 @@ public class TextTraceEventContentTest {
         assertEquals("getFieldValue:TIMESTAMP", "Jan 1 01:01:01", fEventContent1.getFieldValue("Timestamp"));
         assertEquals("getFieldValue:HOST", "HostA", fEventContent1.getFieldValue("Host"));
         assertEquals("getFieldValue:LOGGER", "LoggerA", fEventContent1.getFieldValue("Logger"));
+        assertEquals("getFieldValue:FILE", "SourceFileA", fEventContent1.getFieldValue("File"));
+        assertEquals("getFieldValue:LINE", "0", fEventContent1.getFieldValue("Line"));
         assertEquals("getFieldValue:MESSAGE", "MessageA", fEventContent1.getFieldValue("Message"));
         assertNull(fEventContent1.getFieldValue("BlaBla"));
     }
@@ -159,21 +175,27 @@ public class TextTraceEventContentTest {
         assertEquals("getFieldName:TIMESTAMP", SyslogEventType.LABELS[0], fEventContent1.getFieldName(Index.TIMESTAMP));
         assertEquals("getFieldName:HOST", SyslogEventType.LABELS[1], fEventContent1.getFieldName(Index.HOST));
         assertEquals("getFieldName:LOGGER", SyslogEventType.LABELS[2], fEventContent1.getFieldName(Index.LOGGER));
-        assertEquals("getFieldName:MESSAGE", SyslogEventType.LABELS[3], fEventContent1.getFieldName(Index.MESSAGE));
-        assertNull(fEventContent1.getFieldValue(4));
+        assertEquals("getFieldName:FILE", SyslogEventType.LABELS[3], fEventContent1.getFieldName(Index.FILE));
+        assertEquals("getFieldName:LINE", SyslogEventType.LABELS[4], fEventContent1.getFieldName(Index.LINE));
+        assertEquals("getFieldName:MESSAGE", SyslogEventType.LABELS[5], fEventContent1.getFieldName(Index.MESSAGE));
+        assertNull(fEventContent1.getFieldValue(6));
     }
 
     @Test
     public void testGetFields() {
         List<TextTraceEventContent> fields = fEventContent1.getFields();
-        assertEquals(4, fields.size());
+        assertEquals(6, fields.size());
         assertEquals("getFields:TIMESTAMP", SyslogEventType.LABELS[0], fields.get(Index.TIMESTAMP).getName());
         assertEquals("getFields:TIMESTAMP", "Jan 1 01:01:01", fields.get(Index.TIMESTAMP).getValue());
         assertEquals("getFields:HOST", SyslogEventType.LABELS[1], fields.get(Index.HOST).getName());
         assertEquals("getFields:HOST", "HostA", fields.get(Index.HOST).getValue());
         assertEquals("getFields:LOGGER", SyslogEventType.LABELS[2], fields.get(Index.LOGGER).getName());
         assertEquals("getFields:LOGGER", "LoggerA", fields.get(Index.LOGGER).getValue());
-        assertEquals("getFields:MESSAGE", SyslogEventType.LABELS[3], fields.get(Index.MESSAGE).getName());
+        assertEquals("getFields:FILE", SyslogEventType.LABELS[3], fields.get(Index.FILE).getName());
+        assertEquals("getFields:FILE", "SourceFileA", fields.get(Index.FILE).getValue());
+        assertEquals("getFields:LINE", SyslogEventType.LABELS[4], fields.get(Index.LINE).getName());
+        assertEquals("getFields:LINE", "0", fields.get(Index.LINE).getValue());
+        assertEquals("getFields:MESSAGE", SyslogEventType.LABELS[5], fields.get(Index.MESSAGE).getName());
         assertEquals("getFields:MESSAGE", "MessageA", fields.get(Index.MESSAGE).getValue());
     }
 
@@ -192,7 +214,15 @@ public class TextTraceEventContentTest {
         assertEquals("getFieldName:LOGGER", "LoggerA", field.getValue());
 
         field = fEventContent1.getField(SyslogEventType.LABELS[3]);
-        assertEquals("getFieldName:Message", SyslogEventType.LABELS[3], field.getName());
+        assertEquals("getFieldName:FILE", SyslogEventType.LABELS[3], field.getName());
+        assertEquals("getFieldName:FILE", "SourceFileA", field.getValue());
+
+        field = fEventContent1.getField(SyslogEventType.LABELS[4]);
+        assertEquals("getFieldName:LINE", SyslogEventType.LABELS[4], field.getName());
+        assertEquals("getFieldName:LINE", "0", field.getValue());
+
+        field = fEventContent1.getField(SyslogEventType.LABELS[5]);
+        assertEquals("getFieldName:Message", SyslogEventType.LABELS[5], field.getName());
         assertEquals("getgetFieldName:Message", "MessageA", field.getValue());
 
         field = fEventContent1.getField("BlaBla");
@@ -206,7 +236,7 @@ public class TextTraceEventContentTest {
 
     @Test
     public void testToString() {
-        assertEquals("Timestamp=Jan 1 01:01:01, Host=HostA, Logger=LoggerA, Message=MessageA", fEventContent1.toString());
+        assertEquals("Timestamp=Jan 1 01:01:01, Host=HostA, Logger=LoggerA, File=SourceFileA, Line=0, Message=MessageA", fEventContent1.toString());
     }
 
     @Test
@@ -224,7 +254,7 @@ public class TextTraceEventContentTest {
 
     @Test
     public void testGetFieldNames() {
-        String[] labels = {"Timestamp", "Host", "Logger", "Message"};
+        String[] labels = {"Timestamp", "Host", "Logger", "File", "Line", "Message"};
         List<String> names = fEventContent1.getFieldNames();
         assertArrayEquals(labels, names.toArray(new String[names.size()]));
     }
index 669d0521ba46c4ac7bd870bc2afc4743017babcf..5bcce65b922dacf65dc9956ea6c869cfea220703 100644 (file)
@@ -137,7 +137,7 @@ public class TextTraceTest {
         IStatus status = trace.validate(null, validTracePath);
         assertTrue(status.isOK());
         assertTrue(status instanceof TraceValidationStatus);
-        assertEquals(180, ((TraceValidationStatus) status).getConfidence());
+        assertEquals(185, ((TraceValidationStatus) status).getConfidence());
 
         URL location = FileLocator.find(TmfCoreTestPlugin.getDefault().getBundle(), new Path(OTHER_PATH), null);
         URI uri = FileLocator.toFileURL(location).toURI();
@@ -192,6 +192,8 @@ public class TextTraceTest {
         assertEquals("getField:TIMESTAMP", "Jan 1 01:01:01", content.getFieldValue(Index.TIMESTAMP));
         assertEquals("getField:HOST", "HostA", content.getFieldValue(Index.HOST));
         assertEquals("getField:LOGGER", "LoggerA", content.getFieldValue(Index.LOGGER));
+        assertEquals("getField:FILE", "SourceFileA", content.getFieldValue(Index.FILE));
+        assertEquals("getField:LINE", "4", content.getFieldValue(Index.LINE));
         assertEquals("getField:MESSAGE", "Message A", content.getFieldValue(Index.MESSAGE).toString());
         event = fTrace.getNext(context);
         content = event.getContent();
@@ -199,6 +201,8 @@ public class TextTraceTest {
         assertEquals("getField:TIMESTAMP", "Jan 1 02:02:02", content.getFieldValue(Index.TIMESTAMP));
         assertEquals("getField:HOST", "HostB", content.getFieldValue(Index.HOST));
         assertEquals("getField:LOGGER", "LoggerB", content.getFieldValue(Index.LOGGER));
+        assertEquals("getField:FILE", "SourceFileB", content.getFieldValue(Index.FILE));
+        assertEquals("getField:LINE", "5", content.getFieldValue(Index.LINE));
         assertEquals("getField:MESSAGE", "Message B", content.getFieldValue(Index.MESSAGE).toString());
         event = fTrace.getNext(context);
         content = event.getContent();
@@ -206,6 +210,8 @@ public class TextTraceTest {
         assertEquals("getField:TIMESTAMP", "Jan 1 03:03:03", content.getFieldValue(Index.TIMESTAMP));
         assertEquals("getField:HOST", "HostC", content.getFieldValue(Index.HOST));
         assertEquals("getField:LOGGER", "LoggerC", content.getFieldValue(Index.LOGGER));
+        assertEquals("getField:FILE", "SourceFileC", content.getFieldValue(Index.FILE));
+        assertEquals("getField:LINE", "6", content.getFieldValue(Index.LINE));
         assertEquals("getField:MESSAGE", "Message C", content.getFieldValue(Index.MESSAGE).toString());
         event = fTrace.getNext(context);
         content = event.getContent();
@@ -213,6 +219,8 @@ public class TextTraceTest {
         assertEquals("getField:TIMESTAMP", "Jan 1 04:04:04", content.getFieldValue(Index.TIMESTAMP));
         assertEquals("getField:HOST", "HostD", content.getFieldValue(Index.HOST));
         assertEquals("getField:LOGGER", "LoggerD", content.getFieldValue(Index.LOGGER));
+        assertEquals("getField:FILE", "SourceFileD", content.getFieldValue(Index.FILE));
+        assertEquals("getField:LINE", "7", content.getFieldValue(Index.LINE));
         assertEquals("getField:MESSAGE", "Message D", content.getFieldValue(Index.MESSAGE).toString());
         event = fTrace.getNext(context);
         content = event.getContent();
@@ -220,6 +228,8 @@ public class TextTraceTest {
         assertEquals("getField:TIMESTAMP", "Jan 1 05:05:05", content.getFieldValue(Index.TIMESTAMP));
         assertEquals("getField:HOST", "HostE", content.getFieldValue(Index.HOST));
         assertEquals("getField:LOGGER", "LoggerE", content.getFieldValue(Index.LOGGER));
+        assertEquals("getField:FILE", "SourceFileE", content.getFieldValue(Index.FILE));
+        assertEquals("getField:LINE", "8", content.getFieldValue(Index.LINE));
         assertEquals("getField:MESSAGE", "", content.getFieldValue(Index.MESSAGE).toString());
         event = fTrace.getNext(context);
         content = event.getContent();
@@ -227,6 +237,8 @@ public class TextTraceTest {
         assertEquals("getField:TIMESTAMP", "Jan 1 06:06:06", content.getFieldValue(Index.TIMESTAMP));
         assertEquals("getField:HOST", "HostF", content.getFieldValue(Index.HOST));
         assertEquals("getField:LOGGER", "LoggerF", content.getFieldValue(Index.LOGGER));
+        assertEquals("getField:FILE", "SourceFileF", content.getFieldValue(Index.FILE));
+        assertEquals("getField:LINE", "9", content.getFieldValue(Index.LINE));
         assertEquals("getField:MESSAGE", "Message F", content.getFieldValue(Index.MESSAGE).toString());
         event = fTrace.getNext(context);
         assertEquals("event", null, event);
@@ -256,4 +268,4 @@ public class TextTraceTest {
         assertEquals("event", null, event);
         context.dispose();
     }
-}
+}
\ No newline at end of file
index 961e108bfdb76dbd52747bddf64828b73143e2aa..e1f4eb10753e62ec912869466f21d2400f4b324a 100644 (file)
@@ -18,14 +18,18 @@ import org.eclipse.jdt.annotation.NonNull;
 import org.eclipse.tracecompass.tmf.core.event.ITmfEvent;
 import org.eclipse.tracecompass.tmf.core.event.ITmfEventType;
 import org.eclipse.tracecompass.tmf.core.event.collapse.ITmfCollapsibleEvent;
+import org.eclipse.tracecompass.tmf.core.event.lookup.ITmfCallsite;
+import org.eclipse.tracecompass.tmf.core.event.lookup.ITmfSourceLookup;
+import org.eclipse.tracecompass.tmf.core.event.lookup.TmfCallsite;
 import org.eclipse.tracecompass.tmf.core.timestamp.ITmfTimestamp;
 import org.eclipse.tracecompass.tmf.core.trace.text.TextTraceEvent;
 import org.eclipse.tracecompass.tmf.core.trace.text.TextTraceEventContent;
+import org.eclipse.tracecompass.tmf.tests.stubs.trace.text.SyslogEventType.Index;
 
 /**
  * System log trace implementation of TmfEvent.
  */
-public class SyslogEvent extends TextTraceEvent implements ITmfCollapsibleEvent {
+public class SyslogEvent extends TextTraceEvent implements ITmfCollapsibleEvent, ITmfSourceLookup {
 
     /**
      * Default constructor
@@ -117,4 +121,18 @@ public class SyslogEvent extends TextTraceEvent implements ITmfCollapsibleEvent
         return true;
     }
 
+    @Override
+    public ITmfCallsite getCallsite() {
+        if (getContent() != null) {
+            long lineNo = 0;
+            try {
+                lineNo = Long.valueOf((String) getContent().getField(Index.LINE).getValue());
+            } catch (NumberFormatException e) {
+                // ignore
+            }
+            return new TmfCallsite((String) getContent().getField(Index.FILE).getValue(), null, lineNo);
+        }
+        return null;
+    }
+
 }
index e66963bd2a50e1f81ee8672ae41cc78e0562e919..1ee4f42d5bc915e0e9571f5ce8a2df0d7ec5cd58 100644 (file)
@@ -24,7 +24,7 @@ public class SyslogEventType extends TmfEventType {
     public static final String TYPE_ID = "Syslog"; //$NON-NLS-1$
     /** The labels (field names) used for SA system log events. */
     @SuppressWarnings("nls")
-    public static final String[] LABELS = {"Timestamp", "Host", "Logger", "Message"};
+    public static final String[] LABELS = {"Timestamp", "Host", "Logger", "File", "Line", "Message"};
     /** A default instance of this class */
     public static final SyslogEventType INSTANCE = new SyslogEventType();
 
@@ -36,8 +36,12 @@ public class SyslogEventType extends TmfEventType {
         int HOST      = 1;
         /** Index for the logger name */
         int LOGGER    = 2;
+        /** Index for the logger name */
+        int FILE    = 3;
+        /** Index for the logger name */
+        int LINE    = 4;
         /** Index for the event message */
-        int MESSAGE   = 3;
+        int MESSAGE   = 5;
     }
 
     /**
index 5243b38088c316bdc33b679106bbd3b35148161a..250c364c099aee088a623aed0a2ab458b16184c4 100644 (file)
@@ -42,7 +42,7 @@ public class SyslogTrace extends TextTrace<SyslogEvent> {
             TIMESTAMP_FORMAT, TmfTimePreferences.getLocale());
     /** The regular expression pattern of the first line of an event. */
     public static final Pattern LINE1_PATTERN = Pattern.compile(
-            "\\s*(\\S\\S\\S \\d\\d? \\d\\d:\\d\\d:\\d\\d)\\s*(\\S*)\\s*(\\S*):+\\s*(.*\\S)?"); //$NON-NLS-1$
+            "\\s*(\\S\\S\\S \\d\\d? \\d\\d:\\d\\d:\\d\\d)\\s*(\\S*)\\s*(\\S*):+\\s*(\\S*):([0-9]*)\\s*(.*\\S)?"); //$NON-NLS-1$
 
     /* The current calendar to use */
     private static final Calendar CURRENT = Calendar.getInstance();
@@ -86,7 +86,9 @@ public class SyslogTrace extends TextTrace<SyslogEvent> {
         content.setFieldValue(Index.TIMESTAMP, matcher.group(1));
         content.setFieldValue(Index.HOST, matcher.group(2));
         content.setFieldValue(Index.LOGGER, matcher.group(3));
-        content.setFieldValue(Index.MESSAGE, new StringBuffer(matcher.group(4) != null ? matcher.group(4) : "")); //$NON-NLS-1$
+        content.setFieldValue(Index.FILE, matcher.group(4));
+        content.setFieldValue(Index.LINE, matcher.group(5));
+        content.setFieldValue(Index.MESSAGE, new StringBuffer(matcher.group(6) != null ? matcher.group(6) : "")); //$NON-NLS-1$
 
         SyslogEvent event = new SyslogEvent(
                 this,
diff --git a/org.eclipse.tracecompass.tmf.core.tests/testfiles/SourceFile b/org.eclipse.tracecompass.tmf.core.tests/testfiles/SourceFile
new file mode 100644 (file)
index 0000000..209dda8
--- /dev/null
@@ -0,0 +1,10 @@
+This is source line 1
+This is source line 2
+This is source line 3
+This is source line 4
+This is source line 5
+This is source line 6
+This is source line 7
+This is source line 8
+This is source line 9
+This is source line 10
\ No newline at end of file
index 5ea5d3477b1fa6a20663d183877bb1d69113a94a..1124f32de0e2dcb87ea1f27f287a839a83bd7219 100644 (file)
@@ -1,6 +1,6 @@
-Jan 1 01:01:01 HostA LoggerA: Message A
-Jan 1 02:02:02 HostB LoggerB: Message B
-Jan 1 03:03:03 HostC LoggerC: Message C
-Jan 1 04:04:04 HostD LoggerD: Message D
-Jan 1 05:05:05 HostE LoggerE:
-Jan 1 06:06:06 HostF LoggerF: Message F
+Jan 1 01:01:01 HostA LoggerA: SourceFileA:4 Message A
+Jan 1 02:02:02 HostB LoggerB: SourceFileB:5 Message B
+Jan 1 03:03:03 HostC LoggerC: SourceFileC:6 Message C
+Jan 1 04:04:04 HostD LoggerD: SourceFileD:7 Message D
+Jan 1 05:05:05 HostE LoggerE: SourceFileE:8
+Jan 1 06:06:06 HostF LoggerF: SourceFileF:9 Message F
index 556c0f2b7246d7e12353bde752cc501e7d18745c..bd9c18cb2df9b03c629ef6ee6b12078c5dd217fe 100644 (file)
@@ -1,22 +1,22 @@
-Jan 1 01:01:01 HostA LoggerA: Message A
-Jan 1 02:02:02 HostB LoggerB: Message B
-Jan 1 03:03:03 HostC LoggerC: Message C
-Jan 1 04:04:04 HostD LoggerD: Message D
-Jan 1 05:05:05 HostE LoggerE:
-Jan 1 06:06:06 HostF LoggerF: Message F
-Jan 1 06:06:07 HostF LoggerF: Message F
-Jan 1 06:06:08 HostF LoggerF: Message F
-Jan 1 06:06:09 HostF LoggerF: Message F
-Jan 1 06:06:10 HostF LoggerF: Message F
-Jan 1 06:06:11 HostF LoggerF: Message F
-Jan 1 06:06:12 HostF LoggerF: Message F
-Jan 1 06:06:13 HostF LoggerF: Message F
-Jan 1 06:06:14 HostF LoggerF: Message F
-Jan 1 06:06:15 HostF LoggerF: Message F
-Jan 1 06:06:16 HostF LoggerF: Message F
-Jan 1 06:06:17 HostF LoggerF: Message F
-Jan 1 06:06:18 HostF LoggerF: Message F
-Jan 1 06:06:19 HostF LoggerF: Message F
-Jan 1 06:06:20 HostF LoggerF: Message F
-Jan 1 06:06:21 HostF LoggerF: Message D
-Jan 1 06:06:22 HostF LoggerF: Message D
+Jan 1 01:01:01 HostA LoggerA: SourceFile:4 Message A
+Jan 1 02:02:02 HostB LoggerB: SourceFile:5 Message B
+Jan 1 03:03:03 HostC LoggerC: SourceFile:6 Message C
+Jan 1 04:04:04 HostD LoggerD: SourceFile:7 Message D
+Jan 1 05:05:05 HostE LoggerE: SourceFile:8
+Jan 1 06:06:06 HostF LoggerF: SourceFile:9 Message F
+Jan 1 06:06:07 HostF LoggerF: SourceFile:9 Message F
+Jan 1 06:06:08 HostF LoggerF: SourceFile:9 Message F
+Jan 1 06:06:09 HostF LoggerF: SourceFile:9 Message F
+Jan 1 06:06:10 HostF LoggerF: SourceFile:9 Message F
+Jan 1 06:06:11 HostF LoggerF: SourceFile:9 Message F
+Jan 1 06:06:12 HostF LoggerF: SourceFile:9 Message F
+Jan 1 06:06:13 HostF LoggerF: SourceFile:9 Message F
+Jan 1 06:06:14 HostF LoggerF: SourceFile:9 Message F
+Jan 1 06:06:15 HostF LoggerF: SourceFile:9 Message F
+Jan 1 06:06:16 HostF LoggerF: SourceFile:9 Message F
+Jan 1 06:06:17 HostF LoggerF: SourceFile:9 Message F
+Jan 1 06:06:18 HostF LoggerF: SourceFile:9 Message F
+Jan 1 06:06:19 HostF LoggerF: SourceFile:9 Message F
+Jan 1 06:06:20 HostF LoggerF: SourceFile:9 Message F
+Jan 1 06:06:21 HostF LoggerF: SourceFile:10 Message D
+Jan 1 06:06:22 HostF LoggerF: SourceFile:10 Message D
index dc578f0b1caee9c31921aa3ca04733069c07358a..f4dcd8bddbe27f0c805856faf272fa5a8c540c43 100644 (file)
@@ -20,7 +20,8 @@ import org.junit.runners.Suite;
  */
 @RunWith(Suite.class)
 @Suite.SuiteClasses({
-        CollapseEventsInTableTest.class,
+        CallsiteEventsInTableTest.class,
+        CollapseEventsInTableTest.class
 })
 public class AllTests {
 }
diff --git a/org.eclipse.tracecompass.tmf.ui.swtbot.tests/src/org/eclipse/tracecompass/tmf/ui/swtbot/tests/table/CallsiteEventsInTableTest.java b/org.eclipse.tracecompass.tmf.ui.swtbot.tests/src/org/eclipse/tracecompass/tmf/ui/swtbot/tests/table/CallsiteEventsInTableTest.java
new file mode 100644 (file)
index 0000000..6e442e9
--- /dev/null
@@ -0,0 +1,186 @@
+/*******************************************************************************
+ * Copyright (c) 2014 Ericsson
+ *
+ * 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
+ *
+ * Contributors:
+ *   Bernd Hufmann - Initial API and implementation
+ *******************************************************************************/
+
+package org.eclipse.tracecompass.tmf.ui.swtbot.tests.table;
+
+import static org.junit.Assert.assertTrue;
+import static org.junit.Assert.fail;
+import static org.junit.Assume.assumeTrue;
+
+import java.io.File;
+import java.io.IOException;
+import java.net.URI;
+import java.net.URISyntaxException;
+import java.net.URL;
+
+import org.apache.log4j.ConsoleAppender;
+import org.apache.log4j.Logger;
+import org.apache.log4j.SimpleLayout;
+import org.eclipse.core.runtime.FileLocator;
+import org.eclipse.core.runtime.Path;
+import org.eclipse.core.runtime.preferences.IEclipsePreferences;
+import org.eclipse.core.runtime.preferences.InstanceScope;
+import org.eclipse.jface.bindings.keys.IKeyLookup;
+import org.eclipse.jface.bindings.keys.KeyStroke;
+import org.eclipse.jface.bindings.keys.ParseException;
+import org.eclipse.tracecompass.internal.tmf.core.Activator;
+import org.eclipse.tracecompass.tmf.core.tests.TmfCoreTestPlugin;
+import org.eclipse.tracecompass.tmf.core.timestamp.ITmfTimePreferencesConstants;
+import org.eclipse.tracecompass.tmf.core.timestamp.TmfTimestampFormat;
+import org.eclipse.tracecompass.tmf.ui.swtbot.tests.SWTBotUtil;
+import org.eclipse.swtbot.eclipse.finder.SWTWorkbenchBot;
+import org.eclipse.swtbot.eclipse.finder.matchers.WidgetMatcherFactory;
+import org.eclipse.swtbot.eclipse.finder.widgets.SWTBotEditor;
+import org.eclipse.swtbot.swt.finder.junit.SWTBotJunit4ClassRunner;
+import org.eclipse.swtbot.swt.finder.utils.SWTBotPreferences;
+import org.eclipse.swtbot.swt.finder.widgets.SWTBotMenu;
+import org.eclipse.swtbot.swt.finder.widgets.SWTBotTable;
+import org.eclipse.ui.IEditorReference;
+import org.hamcrest.Matcher;
+import org.junit.AfterClass;
+import org.junit.BeforeClass;
+import org.junit.Test;
+import org.junit.runner.RunWith;
+
+/**
+ * SWTBot test for testing callsite feature.
+ *
+ * @author Bernd Hufmann
+ */
+@RunWith(SWTBotJunit4ClassRunner.class)
+public class CallsiteEventsInTableTest {
+
+    private static final String TRACE_PROJECT_NAME = "test";
+    private static final String CALLSITE_TRACE_NAME = "syslog_collapse";
+    private static final String CALLSITE_TRACE_PATH = "testfiles/" + CALLSITE_TRACE_NAME;
+    private static final String CALLSITE_TRACE_TYPE = "org.eclipse.linuxtools.tmf.tests.stubs.trace.text.testsyslog";
+    private static final String SOURCE_FILE_NAME = "SourceFile";
+    private static final String SOURCE_FILE_PATH = "testfiles/" + SOURCE_FILE_NAME;
+
+    private static File fTestFile = null;
+    private static File fSourceFile = null;
+
+    private static SWTWorkbenchBot fBot;
+
+    /** The Log4j logger instance. */
+    private static final Logger fLogger = Logger.getRootLogger();
+
+    /**
+     * Test Class setup
+     */
+    @BeforeClass
+    public static void init() {
+        SWTBotUtil.failIfUIThread();
+
+        /* set up test trace*/
+        URL location = FileLocator.find(TmfCoreTestPlugin.getDefault().getBundle(), new Path(CALLSITE_TRACE_PATH), null);
+        URI uri;
+        try {
+            uri = FileLocator.toFileURL(location).toURI();
+            fTestFile = new File(uri);
+        } catch (URISyntaxException | IOException e) {
+            e.printStackTrace();
+            fail();
+        }
+
+        assumeTrue(fTestFile.exists());
+
+        IEclipsePreferences defaultPreferences = InstanceScope.INSTANCE.getNode(Activator.PLUGIN_ID);
+        defaultPreferences.put(ITmfTimePreferencesConstants.DATIME, "MMM d HH:mm:ss");
+        defaultPreferences.put(ITmfTimePreferencesConstants.SUBSEC, ITmfTimePreferencesConstants.SUBSEC_NO_FMT);
+        TmfTimestampFormat.updateDefaultFormats();
+
+        /* Create source file link */
+        location = FileLocator.find(TmfCoreTestPlugin.getDefault().getBundle(), new Path(SOURCE_FILE_PATH), null);
+        try {
+            uri = FileLocator.toFileURL(location).toURI();
+            fSourceFile = new File(uri);
+        } catch (URISyntaxException | IOException e) {
+            e.printStackTrace();
+            fail();
+        }
+
+        assumeTrue(fSourceFile.exists());
+
+
+
+        /* Set up for swtbot */
+        SWTBotPreferences.TIMEOUT = 20000; /* 20 second timeout */
+        fLogger.addAppender(new ConsoleAppender(new SimpleLayout(), ConsoleAppender.SYSTEM_OUT));
+        fBot = new SWTWorkbenchBot();
+
+        /* Close welcome view */
+        SWTBotUtil.closeView("Welcome", fBot);
+
+        /* Switch perspectives */
+        SWTBotUtil.switchToTracingPerspective();
+
+        /* Finish waiting for eclipse to load */
+        SWTBotUtil.waitForJobs();
+    }
+
+    /**
+     * Test class tear down method.
+     */
+    @AfterClass
+    public static void tearDown() {
+        /* Set timestamp defaults */
+        IEclipsePreferences defaultPreferences = InstanceScope.INSTANCE.getNode(Activator.PLUGIN_ID);
+        defaultPreferences.put(ITmfTimePreferencesConstants.DATIME, ITmfTimePreferencesConstants.TIME_HOUR_FMT);
+        defaultPreferences.put(ITmfTimePreferencesConstants.SUBSEC, ITmfTimePreferencesConstants.SUBSEC_NANO_FMT);
+        TmfTimestampFormat.updateDefaultFormats();
+    }
+
+    /**
+     * Main test case
+     */
+    @Test
+    public void test() {
+        SWTBotUtil.createProject(TRACE_PROJECT_NAME);
+
+        // Open source file as a unknown trace
+        SWTBotUtil.openTrace(TRACE_PROJECT_NAME, fSourceFile.getAbsolutePath(), null);
+
+        // Open the actual trace
+        SWTBotUtil.openTrace(TRACE_PROJECT_NAME, fTestFile.getAbsolutePath(), CALLSITE_TRACE_TYPE);
+        SWTBotEditor editorBot = SWTBotUtil.openEditor(fBot, fTestFile.getName());
+
+        SWTBotTable tableBot = editorBot.bot().table();
+
+        // Maximize editor area
+        maximizeTable(tableBot);
+        tableBot.click(1, 0);
+
+        // Open source code location
+        SWTBotMenu menuBot = tableBot.contextMenu("Open Source Code");
+        menuBot.click();
+
+        // Verify that source code was actually opened
+        Matcher<IEditorReference> matcher = WidgetMatcherFactory.withPartName(fSourceFile.getName());
+        final SWTBotEditor sourceEditorBot = fBot.editor(matcher);
+        assertTrue(sourceEditorBot.isActive());
+
+        maximizeTable(tableBot);
+
+        fBot.closeAllEditors();
+        SWTBotUtil.deleteProject(TRACE_PROJECT_NAME, fBot);
+    }
+
+    private static void maximizeTable(SWTBotTable tableBot) {
+        try {
+            tableBot.pressShortcut(KeyStroke.getInstance(IKeyLookup.CTRL_NAME + "+"), KeyStroke.getInstance("M"));
+        } catch (ParseException e) {
+            fail();
+        }
+    }
+
+}
index 8267c4a3bf2f4e0b034895739a6ddce56db2f579..4f42f161dfc63c6ed5b2145d01cc004271d180fe 100644 (file)
@@ -155,7 +155,7 @@ public class CollapseEventsInTableTest {
         assertEquals("type", "Syslog", filterString);
 
         filterString = tableBot.cell(7, 3);
-        assertEquals("content", "Timestamp=Jan 1 06:06:06, Host=HostF, Logger=LoggerF, Message=Message F", filterString);
+        assertEquals("content", "Timestamp=Jan 1 06:06:06, Host=HostF, Logger=LoggerF, File=SourceFile, Line=9, Message=Message F", filterString);
 
         filterString = tableBot.cell(8, 0);
         assertEquals("repeatCount", "+1", filterString);
@@ -164,7 +164,7 @@ public class CollapseEventsInTableTest {
         assertEquals("first timestamp (2nd collapse)", "Jan 1 06:06:21", filterString);
 
         filterString = tableBot.cell(8, 3);
-        assertEquals("content", "Timestamp=Jan 1 06:06:21, Host=HostF, Logger=LoggerF, Message=Message D", filterString);
+        assertEquals("content", "Timestamp=Jan 1 06:06:21, Host=HostF, Logger=LoggerF, File=SourceFile, Line=10, Message=Message D", filterString);
 
         /* Clear Filter */
         menuBot = tableBot.contextMenu("Clear Filters");
index c6a3c2e72baf2a379e3ae6cba80fd5a2f693eb8f..dadf9b2ddba376d6a46e5b16b6c0f782f140faf0 100644 (file)
@@ -1132,9 +1132,15 @@ public class TmfEventsTable extends TmfComponent implements IGotoMarker, IColorS
      */
     protected void setItemData(final TableItem item, final ITmfEvent event, final long rank) {
         String[] itemStrings = getItemStrings(fColumns, event);
+
+        // Get the actual ITmfEvent from the CachedEvent
+        ITmfEvent tmfEvent = event;
+        if (event instanceof CachedEvent) {
+            tmfEvent = ((CachedEvent) event).event;
+        }
         item.setText(itemStrings);
-        item.setData(event);
-        item.setData(Key.TIMESTAMP, new TmfTimestamp(event.getTimestamp()));
+        item.setData(tmfEvent);
+        item.setData(Key.TIMESTAMP, new TmfTimestamp(tmfEvent.getTimestamp()));
         item.setData(Key.RANK, rank);
 
         final Collection<Long> markerIds = fBookmarksMap.get(rank);
@@ -1161,14 +1167,14 @@ public class TmfEventsTable extends TmfComponent implements IGotoMarker, IColorS
         boolean searchNoMatch = false;
         final ITmfFilter searchFilter = (ITmfFilter) fTable.getData(Key.SEARCH_OBJ);
         if (searchFilter != null) {
-            if (searchFilter.matches(event)) {
+            if (searchFilter.matches(tmfEvent)) {
                 searchMatch = true;
             } else {
                 searchNoMatch = true;
             }
         }
 
-        final ColorSetting colorSetting = ColorSettingsManager.getColorSetting(event);
+        final ColorSetting colorSetting = ColorSettingsManager.getColorSetting(tmfEvent);
         if (searchNoMatch) {
             item.setForeground(colorSetting.getDimmedForegroundColor());
             item.setBackground(colorSetting.getDimmedBackgroundColor());
This page took 0.03612 seconds and 5 git commands to generate.