Download
Getting Started
Members
Projects
Community
Marketplace
Events
Planet Eclipse
Newsletter
Videos
Participate
Report a Bug
Forums
Mailing Lists
Wiki
IRC
How to Contribute
Working Groups
Automotive
Internet of Things
LocationTech
Long-Term Support
PolarSys
Science
OpenMDM
More
Community
Marketplace
Events
Planet Eclipse
Newsletter
Videos
Participate
Report a Bug
Forums
Mailing Lists
Wiki
IRC
How to Contribute
Working Groups
Automotive
Internet of Things
LocationTech
Long-Term Support
PolarSys
Science
OpenMDM
Toggle navigation
Bugzilla – Attachment 244471 Details for
Bug 219466
[JUnit] allow to sort by name and by execution time
Home
|
New
|
Browse
|
Search
|
[?]
|
Reports
|
Requests
|
Help
|
Log In
[x]
|
Terms of Use
|
Copyright Agent
[patch]
Unit Test + Patch version 2
219466_v2.diff (text/plain), 19.51 KB, created by
sandra lions
on 2014-06-24 09:34:53 EDT
(
hide
)
Description:
Unit Test + Patch version 2
Filename:
MIME Type:
Creator:
sandra lions
Created:
2014-06-24 09:34:53 EDT
Size:
19.51 KB
patch
obsolete
>diff --git a/org.eclipse.jdt.ui.tests/ui/org/eclipse/jdt/junit/tests/TestSorting.java b/org.eclipse.jdt.ui.tests/ui/org/eclipse/jdt/junit/tests/TestSorting.java >new file mode 100644 >index 0000000..c85d6dc >--- /dev/null >+++ b/org.eclipse.jdt.ui.tests/ui/org/eclipse/jdt/junit/tests/TestSorting.java >@@ -0,0 +1,103 @@ >+/******************************************************************************* >+ * Copyright (c) 2014 Sandra Lions 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 >+ * >+ * Contributors: >+ * Sandra Lions <sandra.lions-piron@oracle.com> - [JUnit] allow to sort by name and by execution time - https://bugs.eclipse.org/bugs/show_bug.cgi?id=219466 >+ *******************************************************************************/ >+package org.eclipse.jdt.junit.tests; >+ >+import java.util.ArrayList; >+import java.util.Arrays; >+import java.util.List; >+ >+import org.eclipse.jdt.junit.JUnitCore; >+import org.eclipse.jdt.junit.TestRunListener; >+ >+import org.eclipse.swt.widgets.Table; >+ >+import org.eclipse.jface.viewers.TableViewer; >+ >+import org.eclipse.ui.IWorkbenchPage; >+ >+import org.eclipse.jdt.core.IType; >+ >+import org.eclipse.jdt.internal.junit.ui.JUnitPlugin; >+import org.eclipse.jdt.internal.junit.ui.TestRunnerViewPart; >+import org.eclipse.jdt.internal.junit.ui.TestRunnerViewPart.SortingCriteria; >+ >+public class TestSorting extends AbstractTestRunListenerTest { >+ >+ private String[] runSequenceTest(IType typeToLaunch) throws Exception { >+ TestRunLog log= new TestRunLog(); >+ final TestRunListener testRunListener= new TestRunListeners.SequenceTest(log); >+ JUnitCore.addTestRunListener(testRunListener); >+ try { >+ return launchJUnit(typeToLaunch, new TestRunLog()); >+ } finally { >+ JUnitCore.removeTestRunListener(testRunListener); >+ } >+ } >+ >+ public void testSorting() throws Exception { >+ >+ IWorkbenchPage activePage= JUnitPlugin.getActivePage(); >+ TestRunnerViewPart testRunnerViewPart= (TestRunnerViewPart)activePage.showView(TestRunnerViewPart.NAME); >+ testRunnerViewPart.setLayoutMode(TestRunnerViewPart.LAYOUT_FLAT); // TableViewer >+ >+ String source= "package pack;\n" >+ + "import junit.framework.TestCase;\n" >+ + "public class ATestCase extends TestCase {\n" >+ + " private String fString;\n" >+ + " public void testB_FirstTest() throws Exception {\n" >+ + " fString= \"first\";\n" >+ + " Thread.sleep(30);\n" >+ + " }\n" >+ + " public void testa_SecondTest() throws Exception {\n" >+ + " fString= \"second\";\n" >+ + " Thread.sleep(50);\n" >+ + " }\n" >+ + " public void testC_ThirdTest() throws Exception {\n" >+ + " fString= \"second\";\n" >+ + " Thread.sleep(50);\n" >+ + " }\n" >+ + " public void testA_FourthTest() throws Exception {\n" >+ + " fString= \"third\";\n" >+ + " Thread.sleep(40);\n" >+ + " }\n" >+ + "}"; >+ >+ IType aTestCase= createType(source, "pack", "ATestCase.java"); >+ runSequenceTest(aTestCase); >+ >+ Table table= ((TableViewer)testRunnerViewPart.getTestViewer().getActiveViewer()).getTable(); >+ assertEquals(4, table.getItemCount()); >+ >+ List<String> testResults; >+ >+ testRunnerViewPart.setSortingCriteria(SortingCriteria.SORT_BY_NAME); >+ testResults= new ArrayList<String>(); >+ for (int i= 0; i < table.getItems().length; i++) { >+ String text= table.getItems()[i].getText(); >+ testResults.add(i, text.substring(0, text.indexOf("_"))); >+ } >+ assertTrue(Arrays.deepEquals(new String[] { "testA", "testa", "testB", "testC" }, testResults.toArray())); >+ >+ testRunnerViewPart.setSortingCriteria(SortingCriteria.SORT_BY_EXECUTION_TIME); >+ testResults= new ArrayList<String>(); >+ for (int i= 0; i < table.getItems().length; i++) { >+ String text= table.getItems()[i].getText(); >+ testResults.add(i, text.substring(text.indexOf("(") + 1, text.length())); >+ } >+ String previousResult= null; >+ for (String testResult : testResults) { >+ if (previousResult != null) { >+ assertTrue(previousResult.compareTo(testResult) <= 0); >+ } >+ previousResult= testResult; >+ } >+ } >+} >diff --git a/org.eclipse.jdt.junit/src/org/eclipse/jdt/internal/junit/ui/JUnitMessages.java b/org.eclipse.jdt.junit/src/org/eclipse/jdt/internal/junit/ui/JUnitMessages.java >index f3ec487..a39438e 100644 >--- a/org.eclipse.jdt.junit/src/org/eclipse/jdt/internal/junit/ui/JUnitMessages.java >+++ b/org.eclipse.jdt.junit/src/org/eclipse/jdt/internal/junit/ui/JUnitMessages.java >@@ -9,6 +9,7 @@ > * IBM Corporation - initial API and implementation > * David Saff (saff@mit.edu) - bug 102632: [JUnit] Support for JUnit 4. > * Robert Konigsberg <konigsberg@google.com> - [JUnit] Improve discoverability of the ability to run a single method under JUnit Tests - https://bugs.eclipse.org/bugs/show_bug.cgi?id=285637 >+ * Sandra Lions <sandra.lions-piron@oracle.com> - [JUnit] allow to sort by name and by execution time - https://bugs.eclipse.org/bugs/show_bug.cgi?id=219466 > *******************************************************************************/ > package org.eclipse.jdt.internal.junit.ui; > >@@ -297,6 +298,11 @@ public final class JUnitMessages extends NLS { > public static String TestRunnerViewPart_show_failures_only; > public static String TestRunnerViewPart_hierarchical_layout; > >+ public static String TestRunnerViewPart_sort_by_menu; >+ public static String TestRunnerViewPart_toggle_name_label; >+ public static String TestRunnerViewPart_toggle_execution_order_label; >+ public static String TestRunnerViewPart_toggle_execution_time_label; >+ > public static String TestSessionLabelProvider_testName_elapsedTimeInSeconds; > > public static String TestSessionLabelProvider_testName_JUnitVersion; >diff --git a/org.eclipse.jdt.junit/src/org/eclipse/jdt/internal/junit/ui/JUnitMessages.properties b/org.eclipse.jdt.junit/src/org/eclipse/jdt/internal/junit/ui/JUnitMessages.properties >index 3f98342..a28154d 100644 >--- a/org.eclipse.jdt.junit/src/org/eclipse/jdt/internal/junit/ui/JUnitMessages.properties >+++ b/org.eclipse.jdt.junit/src/org/eclipse/jdt/internal/junit/ui/JUnitMessages.properties >@@ -8,6 +8,7 @@ > # Contributors: > # IBM Corporation - initial API and implementation > # Robert Konigsberg <konigsberg@google.com> - [JUnit] Improve discoverability of the ability to run a single method under JUnit Tests - https://bugs.eclipse.org/bugs/show_bug.cgi?id=285637 >+# Sandra Lions <sandra.lions-piron@oracle.com> - [JUnit] allow to sort by name and by execution time - https://bugs.eclipse.org/bugs/show_bug.cgi?id=219466 > ############################################################################### > CopyTrace_action_label=Copy Trace > CopyTraceAction_problem=Problem Copying to Clipboard >@@ -75,6 +76,10 @@ TestRunnerViewPart_select_test_run=&Select a test run: > TestRunnerViewPart_stopaction_tooltip=Stop JUnit Test Run > TestRunnerViewPart_show_execution_time=Show Execution &Time > TestRunnerViewPart_show_failures_only=Show &Failures Only >+TestRunnerViewPart_sort_by_menu=Sort By >+TestRunnerViewPart_toggle_name_label=Name >+TestRunnerViewPart_toggle_execution_order_label=Execution Order >+TestRunnerViewPart_toggle_execution_time_label=Execution Time > TestRunnerViewPart_rerunaction_label=Rerun Test > TestRunnerViewPart_rerunaction_tooltip=Rerun Test > TestRunnerViewPart_hierarchical_layout=Show Tests in &Hierarchy >diff --git a/org.eclipse.jdt.junit/src/org/eclipse/jdt/internal/junit/ui/TestRunnerViewPart.java b/org.eclipse.jdt.junit/src/org/eclipse/jdt/internal/junit/ui/TestRunnerViewPart.java >index ccf104e..d85f86c 100644 >--- a/org.eclipse.jdt.junit/src/org/eclipse/jdt/internal/junit/ui/TestRunnerViewPart.java >+++ b/org.eclipse.jdt.junit/src/org/eclipse/jdt/internal/junit/ui/TestRunnerViewPart.java >@@ -1,5 +1,5 @@ > /******************************************************************************* >- * Copyright (c) 2000, 2013 IBM Corporation and others. >+ * Copyright (c) 2000, 2014 IBM Corporation 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 >@@ -16,6 +16,7 @@ > * Andrew Eisenberg <andrew@eisenberg.as> - [JUnit] Rerun failed first does not work with JUnit4 - https://bugs.eclipse.org/bugs/show_bug.cgi?id=140392 > * Thirumala Reddy Mutchukota <thirumala@google.com> - [JUnit] Avoid rerun test launch on UI thread - https://bugs.eclipse.org/bugs/show_bug.cgi?id=411841 > * Andrew Eisenberg <andrew@eisenberg.as> - [JUnit] Add a monospace font option for the junit results view - https://bugs.eclipse.org/bugs/show_bug.cgi?id=411794 >+ * Sandra Lions <sandra.lions-piron@oracle.com> - [JUnit] allow to sort by name and by execution time - https://bugs.eclipse.org/bugs/show_bug.cgi?id=219466 > *******************************************************************************/ > package org.eclipse.jdt.internal.junit.ui; > >@@ -163,8 +164,8 @@ public class TestRunnerViewPart extends ViewPart { > > static final int REFRESH_INTERVAL= 200; > >- static final int LAYOUT_FLAT= 0; >- static final int LAYOUT_HIERARCHICAL= 1; >+ public static final int LAYOUT_FLAT= 0; >+ public static final int LAYOUT_HIERARCHICAL= 1; > > /** > * Whether the output scrolls and reveals tests as they are executed. >@@ -203,6 +204,14 @@ public class TestRunnerViewPart extends ViewPart { > */ > private boolean fIsDisposed= false; > >+ public enum SortingCriteria { >+ SORT_BY_NAME, SORT_BY_EXECUTION_ORDER, SORT_BY_EXECUTION_TIME >+ } >+ /** >+ * The current sorting criteria. >+ */ >+ private SortingCriteria fSortingCriteria= SortingCriteria.SORT_BY_EXECUTION_ORDER; >+ > /** > * Actions > */ >@@ -225,6 +234,8 @@ public class TestRunnerViewPart extends ViewPart { > private ShowTimeAction fShowTimeAction; > private ActivateOnErrorAction fActivateOnErrorAction; > private IMenuListener fViewMenuListener; >+ >+ private ToggleSortingAction[] fToggleSortingActions; > > private TestRunSession fTestRunSession; > private TestSessionListener fTestSessionListener; >@@ -279,6 +290,8 @@ public class TestRunnerViewPart extends ViewPart { > */ > static final String TAG_SHOW_TIME= "time"; //$NON-NLS-1$ > >+ static final String TAG_SORTING_CRITERIA= "SortingCriteria"; //$NON-NLS-1$ >+ > /** > * @since 3.5 > */ >@@ -706,6 +719,10 @@ public class TestRunnerViewPart extends ViewPart { > > fStopAction.setEnabled(true); > fRerunLastTestAction.setEnabled(true); >+ >+ for (ToggleSortingAction tsa : fToggleSortingActions) { >+ tsa.setEnabled(false); >+ } > } > > public void sessionEnded(long elapsedTime){ >@@ -735,6 +752,10 @@ public class TestRunnerViewPart extends ViewPart { > } > }); > stopUpdateJobs(); >+ >+ for (ToggleSortingAction tsa : fToggleSortingActions) { >+ tsa.setEnabled(true); >+ } > } > > public void sessionStopped(final long elapsedTime) { >@@ -744,6 +765,10 @@ public class TestRunnerViewPart extends ViewPart { > > registerInfoMessage(JUnitMessages.TestRunnerViewPart_message_stopped); > handleStopped(); >+ >+ for (ToggleSortingAction tsa : fToggleSortingActions) { >+ tsa.setEnabled(true); >+ } > } > > public void sessionTerminated() { >@@ -961,6 +986,48 @@ public class TestRunnerViewPart extends ViewPart { > } > } > >+ private class ToggleSortingAction extends Action { >+ private final SortingCriteria fActionSortingCriteria; >+ >+ public ToggleSortingAction(SortingCriteria sortingCriteria) { >+ super("", AS_RADIO_BUTTON); //$NON-NLS-1$ >+ switch (sortingCriteria) { >+ case SORT_BY_NAME: >+ setText(JUnitMessages.TestRunnerViewPart_toggle_name_label); >+ break; >+ case SORT_BY_EXECUTION_ORDER: >+ setText(JUnitMessages.TestRunnerViewPart_toggle_execution_order_label); >+ break; >+ case SORT_BY_EXECUTION_TIME: >+ setText(JUnitMessages.TestRunnerViewPart_toggle_execution_time_label); >+ break; >+ default: >+ break; >+ } >+ fActionSortingCriteria= sortingCriteria; >+ } >+ >+ >+ @Override >+ public void run() { >+ if (isChecked()) { >+ setSortingCriteria(fActionSortingCriteria); >+ } >+ } >+ >+ public SortingCriteria getActionSortingCriteria() { >+ return fActionSortingCriteria; >+ } >+ } >+ >+ public void setSortingCriteria(SortingCriteria sortingCriteria) { >+ fSortingCriteria= sortingCriteria; >+ fTestViewer.setSortingCriteria(sortingCriteria); >+ for (int i= 0; i < fToggleSortingActions.length; ++i) { >+ fToggleSortingActions[i].setChecked(sortingCriteria == fToggleSortingActions[i].getActionSortingCriteria()); >+ } >+ } >+ > /** > * Listen for for modifications to Java elements > */ >@@ -1145,6 +1212,7 @@ public class TestRunnerViewPart extends ViewPart { > memento.putString(TAG_FAILURES_ONLY, fFailuresOnlyFilterAction.isChecked() ? "true" : "false"); //$NON-NLS-1$ //$NON-NLS-2$ > memento.putInteger(TAG_LAYOUT, fLayout); > memento.putString(TAG_SHOW_TIME, fShowTimeAction.isChecked() ? "true" : "false"); //$NON-NLS-1$ //$NON-NLS-2$ >+ memento.putString(TAG_SORTING_CRITERIA, fSortingCriteria.name()); > } > > private void restoreLayoutState(IMemento memento) { >@@ -1183,6 +1251,13 @@ public class TestRunnerViewPart extends ViewPart { > boolean showTime= true; > if (time != null) > showTime= time.equals("true"); //$NON-NLS-1$ >+ >+ SortingCriteria sortingCriteria= SortingCriteria.SORT_BY_EXECUTION_ORDER; >+ String tagSortingCriteria= memento.getString(TAG_SORTING_CRITERIA); >+ if (tagSortingCriteria != null) { >+ sortingCriteria= Enum.valueOf(SortingCriteria.class, tagSortingCriteria); >+ } >+ setSortingCriteria(sortingCriteria); > > setFilterAndLayout(showFailuresOnly, layoutValue); > setShowExecutionTime(showTime); >@@ -1943,6 +2018,18 @@ action enablement > viewMenu.add(fShowTimeAction); > viewMenu.add(new Separator()); > >+ fToggleSortingActions= >+ new ToggleSortingAction[] { >+ new ToggleSortingAction(SortingCriteria.SORT_BY_NAME), >+ new ToggleSortingAction(SortingCriteria.SORT_BY_EXECUTION_TIME), >+ new ToggleSortingAction(SortingCriteria.SORT_BY_EXECUTION_ORDER) }; >+ MenuManager sortBySubMenu= new MenuManager(JUnitMessages.TestRunnerViewPart_sort_by_menu); >+ for (int i= 0; i < fToggleSortingActions.length; ++i) { >+ sortBySubMenu.add(fToggleSortingActions[i]); >+ } >+ viewMenu.add(sortBySubMenu); >+ viewMenu.add(new Separator()); >+ > MenuManager layoutSubMenu= new MenuManager(JUnitMessages.TestRunnerViewPart_layout_menu); > for (int i = 0; i < fToggleOrientationActions.length; ++i) { > layoutSubMenu.add(fToggleOrientationActions[i]); >@@ -2174,12 +2261,15 @@ action enablement > return fFailureTrace; > } > >+ public TestViewer getTestViewer() { >+ return fTestViewer; >+ } > > void setShowFailuresOnly(boolean failuresOnly) { > setFilterAndLayout(failuresOnly, fLayout); > } > >- private void setLayoutMode(int mode) { >+ public void setLayoutMode(int mode) { > setFilterAndLayout(fFailuresOnlyFilterAction.isChecked(), mode); > } > >diff --git a/org.eclipse.jdt.junit/src/org/eclipse/jdt/internal/junit/ui/TestViewer.java b/org.eclipse.jdt.junit/src/org/eclipse/jdt/internal/junit/ui/TestViewer.java >index 3ab858c..2c58dff 100644 >--- a/org.eclipse.jdt.junit/src/org/eclipse/jdt/internal/junit/ui/TestViewer.java >+++ b/org.eclipse.jdt.junit/src/org/eclipse/jdt/internal/junit/ui/TestViewer.java >@@ -10,7 +10,7 @@ > * Brock Janiczak (brockj@tpg.com.au) > * - https://bugs.eclipse.org/bugs/show_bug.cgi?id=102236: [JUnit] display execution time next to each test > * Xavier Coulon <xcoulon@redhat.com> - https://bugs.eclipse.org/bugs/show_bug.cgi?id=102512 - [JUnit] test method name cut off before ( >- >+ * Sandra Lions <sandra.lions-piron@oracle.com> - [JUnit] allow to sort by name and by execution time - https://bugs.eclipse.org/bugs/show_bug.cgi?id=219466 > *******************************************************************************/ > > package org.eclipse.jdt.internal.junit.ui; >@@ -48,6 +48,7 @@ import org.eclipse.jface.viewers.StructuredViewer; > import org.eclipse.jface.viewers.TableViewer; > import org.eclipse.jface.viewers.TreeViewer; > import org.eclipse.jface.viewers.Viewer; >+import org.eclipse.jface.viewers.ViewerComparator; > import org.eclipse.jface.viewers.ViewerFilter; > > import org.eclipse.ui.IWorkbenchActionConstants; >@@ -65,6 +66,7 @@ import org.eclipse.jdt.internal.junit.model.TestElement.Status; > import org.eclipse.jdt.internal.junit.model.TestRoot; > import org.eclipse.jdt.internal.junit.model.TestRunSession; > import org.eclipse.jdt.internal.junit.model.TestSuiteElement; >+import org.eclipse.jdt.internal.junit.ui.TestRunnerViewPart.SortingCriteria; > > import org.eclipse.jdt.internal.ui.viewsupport.ColoringLabelProvider; > import org.eclipse.jdt.internal.ui.viewsupport.SelectionProviderMediator; >@@ -324,6 +326,44 @@ public class TestViewer { > } > } > >+ public synchronized void setSortingCriteria(SortingCriteria sortingCriteria) { >+ ViewerComparator viewComparator; >+ switch (sortingCriteria) { >+ case SORT_BY_EXECUTION_ORDER: >+ viewComparator= null; >+ break; >+ case SORT_BY_EXECUTION_TIME: >+ viewComparator= new TestExecutionTimeComparator(); >+ break; >+ case SORT_BY_NAME: >+ viewComparator= new TestNameComparator(); >+ break; >+ default: >+ viewComparator= null; >+ break; >+ } >+ fTableViewer.setComparator(viewComparator); >+ fTreeViewer.setComparator(viewComparator); >+ } >+ >+ private final class TestNameComparator extends ViewerComparator { >+ @Override >+ public int compare(Viewer viewer, Object e1, Object e2) { >+ String testName1= ((TestElement)e1).getTestName(); >+ String testName2= ((TestElement)e2).getTestName(); >+ return getComparator().compare(testName1, testName2); >+ } >+ } >+ >+ private final class TestExecutionTimeComparator extends ViewerComparator { >+ @Override >+ public int compare(Viewer viewer, Object e1, Object e2) { >+ TestElement tce1= (TestElement)e1; >+ TestElement tce2= (TestElement)e2; >+ return Double.compare(tce1.getElapsedTimeInSeconds(), tce2.getElapsedTimeInSeconds()); >+ } >+ } >+ > public synchronized void setShowFailuresOnly(boolean failuresOnly, int layoutMode) { > /* > * Management of fTreeViewer and fTableViewer >@@ -399,7 +439,7 @@ public class TestViewer { > fTableHasFilter= filter; > } > >- private StructuredViewer getActiveViewer() { >+ public StructuredViewer getActiveViewer() { > if (fLayoutMode == TestRunnerViewPart.LAYOUT_HIERARCHICAL) > return fTreeViewer; > else >diff --git a/org.eclipse.jdt.ui.tests/ui/org/eclipse/jdt/junit/tests/JUnitJUnitTests.java b/org.eclipse.jdt.ui.tests/ui/org/eclipse/jdt/junit/tests/JUnitJUnitTests.java >index ca3ef8b..e2c5619 100644 >--- a/org.eclipse.jdt.ui.tests/ui/org/eclipse/jdt/junit/tests/JUnitJUnitTests.java >+++ b/org.eclipse.jdt.ui.tests/ui/org/eclipse/jdt/junit/tests/JUnitJUnitTests.java >@@ -1,5 +1,5 @@ > /******************************************************************************* >- * Copyright (c) 2005, 2010 IBM Corporation and others. >+ * Copyright (c) 2005, 2014 IBM Corporation 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 >@@ -7,6 +7,7 @@ > * > * Contributors: > * IBM Corporation - initial API and implementation >+ * Sandra Lions <sandra.lions-piron@oracle.com> - [JUnit] allow to sort by name and by execution time - https://bugs.eclipse.org/bugs/show_bug.cgi?id=219466 > *******************************************************************************/ > > package org.eclipse.jdt.junit.tests; >@@ -37,6 +38,9 @@ public class JUnitJUnitTests { > > suite.addTestSuite(JUnit3TestFinderTest.class); > suite.addTestSuite(JUnit4TestFinderTest.class); >+ >+ suite.addTestSuite(TestSorting.class); >+ > //$JUnit-END$ > return suite; > }
You cannot view the attachment while viewing its details because your browser does not support IFRAMEs.
View the attachment on a separate page
.
View Attachment As Diff
View Attachment As Raw
Actions:
View
|
Diff
Attachments on
bug 219466
:
244275
|
244471
|
244528
|
245073
|
246948