Clover icon

Coverage Report

  1. Project Clover database Mon Sep 2 2024 17:57:51 BST
  2. Package jalview.urls

File UrlLinkTableModelTest.java

 

Code metrics

22
104
10
1
350
228
25
0.24
10.4
10
2.5

Classes

Class Line # Actions
UrlLinkTableModelTest 44 104 25
0.9926470599.3%
 

Contributing tests

This file is covered by 9 tests. .

Source view

1    /*
2    * Jalview - A Sequence Alignment Editor and Viewer ($$Version-Rel$$)
3    * Copyright (C) $$Year-Rel$$ The Jalview Authors
4    *
5    * This file is part of Jalview.
6    *
7    * Jalview is free software: you can redistribute it and/or
8    * modify it under the terms of the GNU General Public License
9    * as published by the Free Software Foundation, either version 3
10    * of the License, or (at your option) any later version.
11    *
12    * Jalview is distributed in the hope that it will be useful, but
13    * WITHOUT ANY WARRANTY; without even the implied warranty
14    * of MERCHANTABILITY or FITNESS FOR A PARTICULAR
15    * PURPOSE. See the GNU General Public License for more details.
16    *
17    * You should have received a copy of the GNU General Public License
18    * along with Jalview. If not, see <http://www.gnu.org/licenses/>.
19    * The Jalview Authors are detailed in the 'AUTHORS' file.
20    */
21   
22    package jalview.urls;
23   
24    import static jalview.util.UrlConstants.DELIM;
25    import static jalview.util.UrlConstants.SEP;
26    import static jalview.util.UrlConstants.SEQUENCE_ID;
27   
28    import jalview.urls.api.UrlProviderI;
29    import jalview.util.MessageManager;
30   
31    import java.io.BufferedWriter;
32    import java.io.File;
33    import java.io.FileWriter;
34    import java.io.IOException;
35    import java.util.ArrayList;
36    import java.util.List;
37   
38    import javax.swing.event.TableModelListener;
39   
40    import org.testng.Assert;
41    import org.testng.annotations.BeforeMethod;
42    import org.testng.annotations.Test;
43   
 
44    public class UrlLinkTableModelTest
45    {
46   
47    private static final String inmenu = "TEST|http://someurl.blah/$DB_ACCESSION$|"
48    + "ANOTHER|http://test/t$SEQUENCE_ID$|"
49    + "TEST2|http://address/$SEQUENCE_ID$|SRS|"
50    + "http://theSRSlink/$SEQUENCE_ID$|"
51    + "MIR:00000005|MIR:00000011|MIR:00000372";
52   
53    private static final String notinmenu = "Not1|http://not.in.menu/$DB_ACCESSION$|"
54    + "Not2|http://not.in.menu.either/$DB_ACCESSION$";
55   
56    private static final String testIdOrgString = "{\"Local\": [{\"id\":\"MIR:00000002\",\"name\":\"ChEBI\",\"pattern\":\"^CHEBI:\\d+$\","
57    + "\"definition\":\"Chemical Entities of Biological Interest (ChEBI)\",\"prefix\":\"chebi\","
58    + "\"url\":\"http://identifiers.org/chebi\"},{\"id\":\"MIR:00000005\",\"name\":\"UniProt Knowledgebase\","
59    + "\"pattern\":\"^([A-N,R-Z][0-9]([A-Z][A-Z, 0-9][A-Z, 0-9][0-9]){1,2})|([O,P,Q][0-9][A-Z, 0-9][A-Z, 0-9][A-Z, 0-9][0-9])(\\.\\d+)?$\","
60    + "\"definition\":\"The UniProt Knowledgebase (UniProtKB)\",\"prefix\":\"uniprot\",\"url\":\"http://identifiers.org/uniprot\"},"
61    + "{\"id\":\"MIR:00000011\",\"name\":\"InterPro\",\"pattern\":\"^IPR\\d{6}$\",\"definition\":\"InterPro\",\"prefix\":\"interpro\","
62    + "\"url\":\"http://identifiers.org/interpro\"},"
63    + "{\"id\":\"MIR:00000372\",\"name\":\"ENA\",\"pattern\":\"^[A-Z]+[0-9]+(\\.\\d+)?$\",\"definition\":\"The European Nucleotide Archive (ENA),\""
64    + "\"prefix\":\"ena.embl\",\"url\":\"http://identifiers.org/ena.embl\"}]}";
65   
66    private UrlProviderI prov;
67   
 
68  9 toggle @BeforeMethod(alwaysRun = true)
69    public void setup()
70    {
71    // set up UrlProvider data as the source for the TableModel
72    // the data gets updated by the TableModel, so needs to be reinitialised for
73    // each test
74   
75    // make a dummy identifiers.org download file
76  9 File temp = null;
77  9 try
78    {
79  9 temp = File.createTempFile("tempfile", ".tmp");
80  9 temp.deleteOnExit();
81  9 BufferedWriter bw = new BufferedWriter(new FileWriter(temp));
82  9 bw.write(testIdOrgString);
83  9 bw.close();
84    } catch (IOException e)
85    {
86  0 System.out.println("Error initialising UrlLinkTableModel test: "
87    + e.getMessage());
88    }
89   
90    // set up custom and identifiers.org url providers
91  9 IdOrgSettings.setDownloadLocation(temp.getPath());
92  9 IdentifiersUrlProvider idprov = new IdentifiersUrlProvider(inmenu);
93  9 CustomUrlProvider cprov = new CustomUrlProvider(inmenu, notinmenu);
94  9 List<UrlProviderI> provlist = new ArrayList<UrlProviderI>();
95  9 provlist.add(idprov);
96  9 provlist.add(cprov);
97   
98  9 prov = new UrlProvider("TEST2", provlist);
99    }
100   
101    /*
102    * Test that the table model is correctly initialised
103    * Display columns and default row are set; data provider listening event set up
104    */
 
105  1 toggle @Test(groups = { "Functional" })
106    public void testInitialisation()
107    {
108  1 int defaultCol = 4;
109  1 int dbCol = 0;
110  1 int descCol = 1;
111   
112  1 UrlLinkTableModel m = new UrlLinkTableModel(prov);
113   
114    // exactly one table model listener
115  1 TableModelListener[] listeners = m
116    .getListeners(TableModelListener.class);
117  1 Assert.assertEquals(listeners.length, 1);
118   
119    // default row exists, there is exactly 1, and it matches the supplied
120    // default
121  1 int count = 0;
122  11 for (int row = 0; row < m.getRowCount(); row++)
123    {
124  10 boolean isDefault = (boolean) m.getValueAt(row, defaultCol);
125  10 if (isDefault)
126    {
127  1 count++;
128  1 String defaultDBName = (String) m.getValueAt(row, dbCol);
129  1 Assert.assertEquals(defaultDBName, "TEST2");
130   
131  1 String defaultDesc = (String) m.getValueAt(row, descCol);
132  1 Assert.assertEquals(defaultDesc, "TEST2");
133    }
134    }
135  1 Assert.assertEquals(count, 1);
136    }
137   
138    /*
139    * Test row and column counts
140    */
 
141  1 toggle @Test(groups = { "Functional" })
142    public void testCounts()
143    {
144  1 UrlLinkTableModel m = new UrlLinkTableModel(prov);
145   
146    // correct numbers of column and rows
147  1 Assert.assertEquals(m.getColumnCount(), 5);
148  1 Assert.assertEquals(m.getRowCount(), 10);
149    }
150   
151    /*
152    * Test column access
153    */
 
154  1 toggle @Test(groups = { "Functional" })
155    public void testColumns()
156    {
157  1 UrlLinkTableModel m = new UrlLinkTableModel(prov);
158   
159    // check column names
160  1 Assert.assertEquals(m.getColumnName(0),
161    MessageManager.formatMessage("label.database"));
162  1 Assert.assertEquals(m.getColumnName(1),
163    MessageManager.formatMessage("label.name"));
164  1 Assert.assertEquals(m.getColumnName(2),
165    MessageManager.formatMessage("label.url"));
166  1 Assert.assertEquals(m.getColumnName(3),
167    MessageManager.formatMessage("label.inmenu"));
168  1 Assert.assertEquals(m.getColumnName(4),
169    MessageManager.formatMessage("label.primary"));
170   
171    // check column classes
172  1 Assert.assertEquals(m.getColumnClass(0), String.class);
173  1 Assert.assertEquals(m.getColumnClass(1), String.class);
174  1 Assert.assertEquals(m.getColumnClass(2), String.class);
175  1 Assert.assertEquals(m.getColumnClass(3), Boolean.class);
176  1 Assert.assertEquals(m.getColumnClass(4), Boolean.class);
177    }
178   
179    /*
180    * Test row insertion
181    */
 
182  1 toggle @Test(groups = { "Functional" })
183    public void testRowInsert()
184    {
185  1 UrlLinkTableModel m = new UrlLinkTableModel(prov);
186   
187  1 m.insertRow("newname", "newurl");
188   
189    // check table has new row inserted
190  1 Assert.assertEquals(m.getValueAt(10, 0), "newname");
191  1 Assert.assertEquals(m.getValueAt(10, 1), "newname");
192  1 Assert.assertEquals(m.getValueAt(10, 2), "newurl");
193  1 Assert.assertEquals(m.getValueAt(10, 3), true);
194  1 Assert.assertEquals(m.getValueAt(10, 4), false);
195   
196    // check data source has new row insrte
197  1 Assert.assertTrue(
198    prov.getLinksForMenu().contains("newname" + SEP + "newurl"));
199    }
200   
201    /*
202    * Test row deletion
203    */
 
204  1 toggle @Test(groups = { "Functional" })
205    public void testRowDelete()
206    {
207  1 UrlLinkTableModel m = new UrlLinkTableModel(prov);
208   
209    // get name and url at row 0
210  1 String name = (String) m.getValueAt(0, 0);
211  1 String url = (String) m.getValueAt(0, 1);
212   
213  1 m.removeRow(0);
214   
215    // check table no longer has row 0 elements in it
216  10 for (int row = 0; row < m.getRowCount(); row++)
217    {
218  9 Assert.assertNotEquals(m.getValueAt(row, 0), name);
219    }
220   
221    // check data source likewise
222  1 Assert.assertFalse(prov.getLinksForMenu().contains(name + SEP + url));
223    }
224   
225    /*
226    * Test value setting and getting
227    */
 
228  1 toggle @Test(groups = { "Functional" })
229    public void testValues()
230    {
231  1 UrlLinkTableModel m = new UrlLinkTableModel(prov);
232   
233    // get original default
234  1 int olddefault;
235  1 boolean isDefault = false;
236  2 for (olddefault = 0; olddefault < m.getRowCount()
237    && !isDefault; olddefault++)
238    {
239  1 isDefault = (boolean) m.getValueAt(olddefault, 3);
240    }
241   
242    // set new values, one in each row
243  1 m.setValueAt("dbnamechanged", 6, 0);
244  1 m.setValueAt("descchanged", 6, 1);
245  1 m.setValueAt("urlchanged", 7, 2);
246  1 m.setValueAt(false, 8, 3);
247  1 m.setValueAt(true, 6, 4);
248   
249  1 m.setValueAt("dbnamechanged", 5, 0);
250   
251    // check values updated in table
252  1 Assert.assertEquals(m.getValueAt(6, 0), "descchanged"); // custom url can't
253    // change db name
254  1 Assert.assertEquals(m.getValueAt(6, 1), "descchanged");
255  1 Assert.assertEquals(m.getValueAt(7, 2), "urlchanged");
256  1 Assert.assertFalse((boolean) m.getValueAt(8, 3));
257  1 Assert.assertTrue((boolean) m.getValueAt(6, 4));
258  1 Assert.assertFalse((boolean) m.getValueAt(olddefault, 4));
259   
260  1 Assert.assertEquals(m.getValueAt(5, 0), "dbnamechanged");
261   
262    // check default row is exactly one row still
263  11 for (int row = 0; row < m.getRowCount(); row++)
264    {
265  10 isDefault = (boolean) m.getValueAt(row, 4);
266   
267    // if isDefault is true, row is 9
268    // if isDefault is false, row is not 9
269  10 Assert.assertFalse(isDefault && !(row == 6));
270    }
271   
272    // check table updated
273  1 Assert.assertTrue(prov.writeUrlsAsString(true)
274    .contains("descchanged" + SEP + m.getValueAt(6, 2)));
275  1 Assert.assertTrue(prov.writeUrlsAsString(true)
276    .contains(m.getValueAt(7, 1) + SEP + "urlchanged"));
277  1 Assert.assertTrue(prov.writeUrlsAsString(false)
278    .contains((String) m.getValueAt(8, 1)));
279  1 Assert.assertEquals(prov.getPrimaryUrl("seqid"), m.getValueAt(6, 2)
280    .toString().replace(DELIM + SEQUENCE_ID + DELIM, "seqid"));
281    }
282   
283    /*
284    * Test cell editability
285    */
 
286  1 toggle @Test(groups = { "Functional" })
287    public void testEditable()
288    {
289  1 UrlLinkTableModel m = new UrlLinkTableModel(prov);
290   
291  11 for (int row = 0; row < m.getRowCount(); row++)
292    {
293  10 Assert.assertFalse(m.isCellEditable(row, 0));
294  10 Assert.assertFalse(m.isCellEditable(row, 1));
295  10 Assert.assertFalse(m.isCellEditable(row, 2));
296  10 Assert.assertTrue(m.isCellEditable(row, 3));
297   
298  10 if ((row == 4) || (row == 6) || (row == 7))
299    {
300  3 Assert.assertTrue(m.isCellEditable(row, 4));
301    }
302    else
303    {
304  7 Assert.assertFalse(m.isCellEditable(row, 4));
305    }
306    }
307    }
308   
309    /*
310    * Test row 'deletability'
311    */
 
312  1 toggle @Test(groups = { "Functional" })
313    public void testDeletable()
314    {
315  1 UrlLinkTableModel m = new UrlLinkTableModel(prov);
316   
317  11 for (int row = 0; row < m.getRowCount(); row++)
318    {
319  10 if (row > 4)
320    {
321  5 Assert.assertTrue(m.isRowDeletable(row));
322    }
323    else
324    {
325  5 Assert.assertFalse(m.isRowDeletable(row));
326    }
327    }
328    }
329   
330    /*
331    * Test indirect row editability
332    */
 
333  1 toggle @Test(groups = { "Functional" })
334    public void testRowEditable()
335    {
336  1 UrlLinkTableModel m = new UrlLinkTableModel(prov);
337   
338  11 for (int row = 0; row < m.getRowCount(); row++)
339    {
340  10 if (row > 3)
341    {
342  6 Assert.assertTrue(m.isRowEditable(row));
343    }
344    else
345    {
346  4 Assert.assertFalse(m.isRowEditable(row));
347    }
348    }
349    }
350    }