TodoParser.java

1
/* $Id: TodoParser.java 19907 2012-12-30 13:06:01Z closettop_nightlybuild $
2
 *****************************************************************************
3
 * Copyright (c) 2009-2012 Contributors - see below
4
 * All rights reserved. This program and the accompanying materials
5
 * are made available under the terms of the Eclipse Public License v1.0
6
 * which accompanies this distribution, and is available at
7
 * http://www.eclipse.org/legal/epl-v10.html
8
 *
9
 * Contributors:
10
 *    tfmorris
11
 *****************************************************************************
12
 *
13
 * Some portions of this file was previously release using the BSD License:
14
 */
15
16
// Copyright (c) 1996-2009 The Regents of the University of California. All
17
// Rights Reserved. Permission to use, copy, modify, and distribute this
18
// software and its documentation without fee, and without a written
19
// agreement is hereby granted, provided that the above copyright notice
20
// and this paragraph appear in all copies.  This software program and
21
// documentation are copyrighted by The Regents of the University of
22
// California. The software program and documentation are supplied "AS
23
// IS", without any accompanying services from The Regents. The Regents
24
// does not warrant that the operation of the program will be
25
// uninterrupted or error-free. The end-user understands that the program
26
// was developed for research purposes and is advised not to rely
27
// exclusively on the program for any reason.  IN NO EVENT SHALL THE
28
// UNIVERSITY OF CALIFORNIA BE LIABLE TO ANY PARTY FOR DIRECT, INDIRECT,
29
// SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES, INCLUDING LOST PROFITS,
30
// ARISING OUT OF THE USE OF THIS SOFTWARE AND ITS DOCUMENTATION, EVEN IF
31
// THE UNIVERSITY OF CALIFORNIA HAS BEEN ADVISED OF THE POSSIBILITY OF
32
// SUCH DAMAGE. THE UNIVERSITY OF CALIFORNIA SPECIFICALLY DISCLAIMS ANY
33
// WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
34
// MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE SOFTWARE
35
// PROVIDED HEREUNDER IS ON AN "AS IS" BASIS, AND THE UNIVERSITY OF
36
// CALIFORNIA HAS NO OBLIGATIONS TO PROVIDE MAINTENANCE, SUPPORT,
37
// UPDATES, ENHANCEMENTS, OR MODIFICATIONS.
38
39
package org.argouml.persistence;
40
41
import java.io.Reader;
42
import java.util.ArrayList;
43
import java.util.List;
44
import java.util.logging.Level;
45
import java.util.logging.Logger;
46
47
import org.argouml.cognitive.Designer;
48
import org.argouml.cognitive.ListSet;
49
import org.argouml.cognitive.ResolvedCritic;
50
import org.argouml.cognitive.ToDoItem;
51
import org.xml.sax.InputSource;
52
import org.xml.sax.SAXException;
53
54
55
// TODO: Reuse the offender List.
56
57
/**
58
 * Class that reads a todo list from a todo xml file.
59
 *
60
 * @author	Michael Stockman
61
 */
62
class TodoParser extends SAXParserBase {
63
    /**
64
     * Logger.
65
     */
66
    private static final Logger LOG =
67
        Logger.getLogger(TodoParser.class.getName());
68
69
    private TodoTokenTable tokens = new TodoTokenTable();
70
71
    /**
72
     * The headline of the ToDoItem currently being read.
73
     */
74
    private String headline;
75
76
    /**
77
     * The priority of the ToDoItem currently being read.
78
     */
79
    private int    priority;
80
81
    /**
82
     * The moreInfoURL of the ToDoItem currently being read.
83
     */
84
    private String moreinfourl;
85
86
    /**
87
     * The description of the ToDoItem currently being read.
88
     */
89
    private String description;
90
91
    /**
92
     * The critic String of the ResolvedCritic currently being read.
93
     */
94
    private String critic;
95
96
    /**
97
     * The offenders list of the ResolvedCritic currently being
98
     * read.
99
     */
100
    private List offenders;
101
102
    /**
103
     * Creates a new TodoParser.
104
     */
105
    public TodoParser() {
106
        // Empty constructor
107
    }
108
109
110
    /**
111
     * Read an XML todo list and enter any todo items into the current designer.
112
     *
113
     * @param inputSource The stream containing TodoList XML data.
114
     * @throws SAXException on any error
115
     */
116
    public synchronized void readTodoList(
117
            InputSource inputSource) throws SAXException {
118
        LOG.log(Level.INFO, "Reading ToDo list");
119 1 1. readTodoList : removed call to org/argouml/persistence/TodoParser::parse → NO_COVERAGE
        parse(inputSource);
120
    }
121
122
    /**
123
     * Reads an XML todo list from InputStream is and enters
124
     * any todo items into the current designer.
125
     *
126
     * @param	is	The stream containing TodoList XML data.
127
     * @throws SAXException on any error
128
     */
129
    public synchronized void readTodoList(
130
            Reader is) throws SAXException {
131
132
        LOG.log(Level.INFO,
133
                "=======================================\n"
134
                + "== READING TO DO LIST");
135 1 1. readTodoList : removed call to org/argouml/persistence/TodoParser::parse → NO_COVERAGE
        parse(is);
136
    }
137
138
    /**
139
     * Called by the XML implementation to signal the start of
140
     * an XML entity.
141
     *
142
     * @param	e	The entity being started.
143
     */
144
    public void handleStartElement(XMLElement e) {
145
	//cat.debug("NOTE: TodoParser handleStartTag:" + e.getName());
146
147
	try {
148
	    switch (tokens.toToken(e.getName(), true)) {
149
	    case TodoTokenTable.TOKEN_HEADLINE:
150
	    case TodoTokenTable.TOKEN_DESCRIPTION:
151
	    case TodoTokenTable.TOKEN_PRIORITY:
152
	    case TodoTokenTable.TOKEN_MOREINFOURL:
153
	    case TodoTokenTable.TOKEN_POSTER:
154
	    case TodoTokenTable.TOKEN_OFFENDER:
155
		// NOP
156
		break;
157
158
	    case TodoTokenTable.TOKEN_TO_DO:
159 1 1. handleStartElement : removed call to org/argouml/persistence/TodoParser::handleTodo → NO_COVERAGE
		handleTodo(e);
160
		break;
161
162
	    case TodoTokenTable.TOKEN_TO_DO_LIST:
163 1 1. handleStartElement : removed call to org/argouml/persistence/TodoParser::handleTodoList → NO_COVERAGE
		handleTodoList(e);
164
		break;
165
166
	    case TodoTokenTable.TOKEN_TO_DO_ITEM:
167 1 1. handleStartElement : removed call to org/argouml/persistence/TodoParser::handleTodoItemStart → NO_COVERAGE
		handleTodoItemStart(e);
168
		break;
169
170
	    case TodoTokenTable.TOKEN_RESOLVEDCRITICS:
171 1 1. handleStartElement : removed call to org/argouml/persistence/TodoParser::handleResolvedCritics → NO_COVERAGE
		handleResolvedCritics(e);
172
		break;
173
174
	    case TodoTokenTable.TOKEN_ISSUE:
175 1 1. handleStartElement : removed call to org/argouml/persistence/TodoParser::handleIssueStart → NO_COVERAGE
		handleIssueStart(e);
176
		break;
177
178
	    default:
179
                LOG.log(Level.WARNING, "WARNING: unknown tag:" + e.getName());
180
		break;
181
	    }
182
	} catch (Exception ex) {
183
            LOG.log(Level.SEVERE, "Exception in startelement", ex);
184
	}
185
    }
186
187
    /**
188
     * Called by the XML implementation to signal the end of an XML
189
     * entity.
190
     *
191
     * @param	e	The XML entity that ends.
192
     * @throws SAXException on any error
193
     */
194
    public void handleEndElement(XMLElement e) throws SAXException {
195
196
        try {
197
            switch (tokens.toToken(e.getName(), false)) {
198
            case TodoTokenTable.TOKEN_TO_DO:
199
            case TodoTokenTable.TOKEN_RESOLVEDCRITICS:
200
            case TodoTokenTable.TOKEN_TO_DO_LIST:
201
        	// NOP
202
        	break;
203
204
            case TodoTokenTable.TOKEN_TO_DO_ITEM:
205 1 1. handleEndElement : removed call to org/argouml/persistence/TodoParser::handleTodoItemEnd → NO_COVERAGE
        	handleTodoItemEnd(e);
206
        	break;
207
208
            case TodoTokenTable.TOKEN_HEADLINE:
209 1 1. handleEndElement : removed call to org/argouml/persistence/TodoParser::handleHeadline → NO_COVERAGE
        	handleHeadline(e);
210
        	break;
211
212
            case TodoTokenTable.TOKEN_DESCRIPTION:
213 1 1. handleEndElement : removed call to org/argouml/persistence/TodoParser::handleDescription → NO_COVERAGE
        	handleDescription(e);
214
        	break;
215
216
            case TodoTokenTable.TOKEN_PRIORITY:
217 1 1. handleEndElement : removed call to org/argouml/persistence/TodoParser::handlePriority → NO_COVERAGE
        	handlePriority(e);
218
        	break;
219
220
            case TodoTokenTable.TOKEN_MOREINFOURL:
221 1 1. handleEndElement : removed call to org/argouml/persistence/TodoParser::handleMoreInfoURL → NO_COVERAGE
        	handleMoreInfoURL(e);
222
        	break;
223
224
            case TodoTokenTable.TOKEN_ISSUE:
225 1 1. handleEndElement : removed call to org/argouml/persistence/TodoParser::handleIssueEnd → NO_COVERAGE
        	handleIssueEnd(e);
226
        	break;
227
228
            case TodoTokenTable.TOKEN_POSTER:
229 1 1. handleEndElement : removed call to org/argouml/persistence/TodoParser::handlePoster → NO_COVERAGE
        	handlePoster(e);
230
        	break;
231
232
            case TodoTokenTable.TOKEN_OFFENDER:
233 1 1. handleEndElement : removed call to org/argouml/persistence/TodoParser::handleOffender → NO_COVERAGE
        	handleOffender(e);
234
        	break;
235
236
            default:
237
                LOG.log(Level.WARNING,
238
                        "WARNING: unknown end tag:" + e.getName());
239
        	break;
240
            }
241
        } catch (Exception ex) {
242
            throw new SAXException(ex);
243
        }
244
    }
245
246
    /**
247
     * Internal method.
248
     *
249
     * @param e the element
250
     */
251
    protected void handleTodo(XMLElement e) {
252
	/* do nothing */
253
    }
254
255
    /**
256
     * Internal method.
257
     *
258
     * @param e the element
259
     */
260
    protected void handleTodoList(XMLElement e) {
261
	/* do nothing */
262
    }
263
264
    /**
265
     * Internal method.
266
     *
267
     * @param e the element
268
     */
269
    protected void handleResolvedCritics(XMLElement e) {
270
	/* do nothing */
271
    }
272
273
    /**
274
     * Internal method.
275
     *
276
     * @param e the element
277
     */
278
    protected void handleTodoItemStart(XMLElement e) {
279
        headline = "";
280
        priority = ToDoItem.HIGH_PRIORITY;
281
        moreinfourl = "";
282
        description = "";
283
    }
284
285
    /**
286
     * Internal method.
287
     *
288
     * @param e the element
289
     */
290
    protected void handleTodoItemEnd(XMLElement e) {
291
        ToDoItem item;
292
        Designer dsgr;
293
294
        /* This is expected to be safe, don't add a try block here */
295
296
        dsgr = Designer.theDesigner();
297
        item =
298
            new ToDoItem(dsgr, headline, priority, description, moreinfourl,
299
                         new ListSet());
300 1 1. handleTodoItemEnd : removed call to org/argouml/cognitive/ToDoList::addElement → NO_COVERAGE
        dsgr.getToDoList().addElement(item);
301
        //cat.debug("Added ToDoItem: " + _headline);
302
    }
303
304
    /**
305
     * Internal method.
306
     *
307
     * @param e the element
308
     */
309
    protected void handleHeadline(XMLElement e) {
310
	headline = decode(e.getText()).trim();
311
    }
312
313
    /**
314
     * Internal method.
315
     *
316
     * @param e the element
317
     */
318
    protected void handlePriority(XMLElement e) {
319
        String prio = decode(e.getText()).trim();
320
        int np;
321
322
        try {
323
            np = Integer.parseInt(prio);
324
        } catch (NumberFormatException nfe) {
325
            np = ToDoItem.HIGH_PRIORITY;
326
327 1 1. handlePriority : negated conditional → NO_COVERAGE
            if (TodoTokenTable.STRING_PRIO_HIGH.equalsIgnoreCase(prio)) {
328
                np = ToDoItem.HIGH_PRIORITY;
329 1 1. handlePriority : negated conditional → NO_COVERAGE
            } else if (TodoTokenTable.STRING_PRIO_MED.equalsIgnoreCase(prio)) {
330
                np = ToDoItem.MED_PRIORITY;
331 1 1. handlePriority : negated conditional → NO_COVERAGE
            } else if (TodoTokenTable.STRING_PRIO_LOW.equalsIgnoreCase(prio)) {
332
                np = ToDoItem.LOW_PRIORITY;
333
            }
334
        }
335
336
        priority = np;
337
    }
338
339
    /**
340
     * Internal method.
341
     *
342
     * @param e the element
343
     */
344
    protected void handleMoreInfoURL(XMLElement e) {
345
	moreinfourl = decode(e.getText()).trim();
346
    }
347
348
    /**
349
     * Internal method.
350
     *
351
     * @param e the element
352
     */
353
    protected void handleDescription(XMLElement e) {
354
	description = decode(e.getText()).trim();
355
    }
356
357
    /**
358
     * Internal method.
359
     *
360
     * @param e the element
361
     */
362
    protected void handleIssueStart(XMLElement e) {
363
	critic = null;
364
	offenders = null;
365
    }
366
367
    /**
368
     * Internal method.
369
     *
370
     * @param e the element
371
     */
372
    protected void handleIssueEnd(XMLElement e) {
373
        Designer dsgr;
374
        ResolvedCritic item;
375
376 1 1. handleIssueEnd : negated conditional → NO_COVERAGE
        if (critic == null) {
377
            return;
378
        }
379
380
        item = new ResolvedCritic(critic, offenders);
381
        dsgr = Designer.theDesigner();
382
        dsgr.getToDoList().addResolvedCritic(item);
383
    }
384
385
    /**
386
     * Internal method.
387
     *
388
     * @param e the element
389
     */
390
    protected void handlePoster(XMLElement e) {
391
        critic = decode(e.getText()).trim();
392
    }
393
394
    /**
395
     * Internal method.
396
     *
397
     * @param e the element
398
     */
399
    protected void handleOffender(XMLElement e) {
400 1 1. handleOffender : negated conditional → NO_COVERAGE
        if (offenders == null) {
401
            offenders = new ArrayList();
402
        }
403
        offenders.add(decode(e.getText()).trim());
404
    }
405
406
    /**
407
     * Utility method to decode a String filtering out any noise that
408
     * an XML framework might have seen fit to add and thus regaining
409
     * the original unmodified String.
410
     *
411
     * @param	str	The String to decode.
412
     * @return	A copy of the original String.
413
     */
414
    public static String decode(String str) {
415 1 1. decode : negated conditional → NO_COVERAGE
        if (str == null) {
416 1 1. decode : mutated return of Object value for org/argouml/persistence/TodoParser::decode to ( if (x != null) null else throw new RuntimeException ) → NO_COVERAGE
            return null;
417
        }
418
419
        StringBuffer sb;
420
        int i1, i2;
421
        char c;
422
423
        sb = new StringBuffer();
424 3 1. decode : changed conditional boundary → NO_COVERAGE
2. decode : Changed increment from 1 to -1 → NO_COVERAGE
3. decode : negated conditional → NO_COVERAGE
        for (i1 = 0, i2 = 0; i2 < str.length(); i2++) {
425
            c = str.charAt(i2);
426 1 1. decode : negated conditional → NO_COVERAGE
            if (c == '%') {
427 2 1. decode : changed conditional boundary → NO_COVERAGE
2. decode : negated conditional → NO_COVERAGE
                if (i2 > i1) {
428
                    sb.append(str.substring(i1, i2));
429
                }
430 4 1. decode : changed conditional boundary → NO_COVERAGE
2. decode : Changed increment from 1 to -1 → NO_COVERAGE
3. decode : Changed increment from 1 to -1 → NO_COVERAGE
4. decode : negated conditional → NO_COVERAGE
                for (i1 = ++i2; i2 < str.length(); i2++) {
431 1 1. decode : negated conditional → NO_COVERAGE
                    if (str.charAt(i2) == ';') {
432
                        break;
433
                    }
434
                }
435 2 1. decode : changed conditional boundary → NO_COVERAGE
2. decode : negated conditional → NO_COVERAGE
                if (i2 >= str.length()) {
436
                    i1 = i2;
437
                    break;
438
                }
439
440 2 1. decode : changed conditional boundary → NO_COVERAGE
2. decode : negated conditional → NO_COVERAGE
                if (i2 > i1) {
441
                    String ent = str.substring(i1, i2);
442 1 1. decode : negated conditional → NO_COVERAGE
                    if ("proc".equals(ent)) {
443
                        sb.append('%');
444
                    } else {
445
                        try {
446
                            sb.append((char) Integer.parseInt(ent));
447
                        } catch (NumberFormatException nfe) {
448
                            // TODO: handle parse error
449
                        }
450
                    }
451
                }
452 1 1. decode : Replaced integer addition with subtraction → NO_COVERAGE
                i1 = i2 + 1;
453
            }
454
        }
455 2 1. decode : changed conditional boundary → NO_COVERAGE
2. decode : negated conditional → NO_COVERAGE
        if (i2 > i1) {
456
            sb.append(str.substring(i1, i2));
457
        }
458 1 1. decode : mutated return of Object value for org/argouml/persistence/TodoParser::decode to ( if (x != null) null else throw new RuntimeException ) → NO_COVERAGE
        return sb.toString();
459
    }
460
461
    /**
462
     * Utility method to encode a String in a way that allows it to be
463
     * saved properly in an XML file and regained filtering out any noice
464
     * that an XML framework might have seen fit to add.
465
     *
466
     * TODO: Why are we doing this ourselves?  Surely encoding information
467
     * for XML serialization is a well known task - tfm
468
     * I have never understood why this is being done. I think we should remove
469
     * any usage - bob
470
     *
471
     * @param	str	The String to encode.
472
     * @return	The encoded String.
473
     */
474
    public static String encode(String str) {
475
	StringBuffer sb;
476
	int i1, i2;
477
	char c;
478
479 1 1. encode : negated conditional → NO_COVERAGE
	if (str == null) {
480 1 1. encode : mutated return of Object value for org/argouml/persistence/TodoParser::encode to ( if (x != null) null else throw new RuntimeException ) → NO_COVERAGE
            return null;
481
        }
482
	sb = new StringBuffer();
483 3 1. encode : changed conditional boundary → NO_COVERAGE
2. encode : Changed increment from 1 to -1 → NO_COVERAGE
3. encode : negated conditional → NO_COVERAGE
	for (i1 = 0, i2 = 0; i2 < str.length(); i2++) {
484
	    c = str.charAt(i2);
485 1 1. encode : negated conditional → NO_COVERAGE
	    if (c == '%') {
486 2 1. encode : changed conditional boundary → NO_COVERAGE
2. encode : negated conditional → NO_COVERAGE
		if (i2 > i1) {
487
                    sb.append(str.substring(i1, i2));
488
                }
489
		sb.append("%proc;");
490 1 1. encode : Replaced integer addition with subtraction → NO_COVERAGE
		i1 = i2 + 1;
491 2 1. encode : changed conditional boundary → NO_COVERAGE
2. encode : negated conditional → NO_COVERAGE
	    } else if (c < 0x28
492 6 1. encode : changed conditional boundary → NO_COVERAGE
2. encode : changed conditional boundary → NO_COVERAGE
3. encode : negated conditional → NO_COVERAGE
4. encode : negated conditional → NO_COVERAGE
5. encode : negated conditional → NO_COVERAGE
6. encode : negated conditional → NO_COVERAGE
                ||  (c >= 0x3C && c <= 0x40 && c != 0x3D && c != 0x3F)
493 5 1. encode : changed conditional boundary → NO_COVERAGE
2. encode : changed conditional boundary → NO_COVERAGE
3. encode : negated conditional → NO_COVERAGE
4. encode : negated conditional → NO_COVERAGE
5. encode : negated conditional → NO_COVERAGE
                ||  (c >= 0x5E && c <= 0x60 && c != 0x5F)
494 2 1. encode : changed conditional boundary → NO_COVERAGE
2. encode : negated conditional → NO_COVERAGE
                ||   c >= 0x7B) {
495 2 1. encode : changed conditional boundary → NO_COVERAGE
2. encode : negated conditional → NO_COVERAGE
		if (i2 > i1) {
496
                    sb.append(str.substring(i1, i2));
497
                }
498
		sb.append("%" + Integer.toString(c) + ";");
499 1 1. encode : Replaced integer addition with subtraction → NO_COVERAGE
		i1 = i2 + 1;
500
	    }
501
	}
502 2 1. encode : changed conditional boundary → NO_COVERAGE
2. encode : negated conditional → NO_COVERAGE
	if (i2 > i1) {
503
            sb.append(str.substring(i1, i2));
504
        }
505
506
	//cat.debug("encode:\n" + str + "\n -> " + sb.toString());
507 1 1. encode : mutated return of Object value for org/argouml/persistence/TodoParser::encode to ( if (x != null) null else throw new RuntimeException ) → NO_COVERAGE
	return sb.toString();
508
    }
509
}

Mutations

119

1.1
Location : readTodoList
Killed by : none
removed call to org/argouml/persistence/TodoParser::parse → NO_COVERAGE

135

1.1
Location : readTodoList
Killed by : none
removed call to org/argouml/persistence/TodoParser::parse → NO_COVERAGE

159

1.1
Location : handleStartElement
Killed by : none
removed call to org/argouml/persistence/TodoParser::handleTodo → NO_COVERAGE

163

1.1
Location : handleStartElement
Killed by : none
removed call to org/argouml/persistence/TodoParser::handleTodoList → NO_COVERAGE

167

1.1
Location : handleStartElement
Killed by : none
removed call to org/argouml/persistence/TodoParser::handleTodoItemStart → NO_COVERAGE

171

1.1
Location : handleStartElement
Killed by : none
removed call to org/argouml/persistence/TodoParser::handleResolvedCritics → NO_COVERAGE

175

1.1
Location : handleStartElement
Killed by : none
removed call to org/argouml/persistence/TodoParser::handleIssueStart → NO_COVERAGE

205

1.1
Location : handleEndElement
Killed by : none
removed call to org/argouml/persistence/TodoParser::handleTodoItemEnd → NO_COVERAGE

209

1.1
Location : handleEndElement
Killed by : none
removed call to org/argouml/persistence/TodoParser::handleHeadline → NO_COVERAGE

213

1.1
Location : handleEndElement
Killed by : none
removed call to org/argouml/persistence/TodoParser::handleDescription → NO_COVERAGE

217

1.1
Location : handleEndElement
Killed by : none
removed call to org/argouml/persistence/TodoParser::handlePriority → NO_COVERAGE

221

1.1
Location : handleEndElement
Killed by : none
removed call to org/argouml/persistence/TodoParser::handleMoreInfoURL → NO_COVERAGE

225

1.1
Location : handleEndElement
Killed by : none
removed call to org/argouml/persistence/TodoParser::handleIssueEnd → NO_COVERAGE

229

1.1
Location : handleEndElement
Killed by : none
removed call to org/argouml/persistence/TodoParser::handlePoster → NO_COVERAGE

233

1.1
Location : handleEndElement
Killed by : none
removed call to org/argouml/persistence/TodoParser::handleOffender → NO_COVERAGE

300

1.1
Location : handleTodoItemEnd
Killed by : none
removed call to org/argouml/cognitive/ToDoList::addElement → NO_COVERAGE

327

1.1
Location : handlePriority
Killed by : none
negated conditional → NO_COVERAGE

329

1.1
Location : handlePriority
Killed by : none
negated conditional → NO_COVERAGE

331

1.1
Location : handlePriority
Killed by : none
negated conditional → NO_COVERAGE

376

1.1
Location : handleIssueEnd
Killed by : none
negated conditional → NO_COVERAGE

400

1.1
Location : handleOffender
Killed by : none
negated conditional → NO_COVERAGE

415

1.1
Location : decode
Killed by : none
negated conditional → NO_COVERAGE

416

1.1
Location : decode
Killed by : none
mutated return of Object value for org/argouml/persistence/TodoParser::decode to ( if (x != null) null else throw new RuntimeException ) → NO_COVERAGE

424

1.1
Location : decode
Killed by : none
changed conditional boundary → NO_COVERAGE

2.2
Location : decode
Killed by : none
Changed increment from 1 to -1 → NO_COVERAGE

3.3
Location : decode
Killed by : none
negated conditional → NO_COVERAGE

426

1.1
Location : decode
Killed by : none
negated conditional → NO_COVERAGE

427

1.1
Location : decode
Killed by : none
changed conditional boundary → NO_COVERAGE

2.2
Location : decode
Killed by : none
negated conditional → NO_COVERAGE

430

1.1
Location : decode
Killed by : none
changed conditional boundary → NO_COVERAGE

2.2
Location : decode
Killed by : none
Changed increment from 1 to -1 → NO_COVERAGE

3.3
Location : decode
Killed by : none
Changed increment from 1 to -1 → NO_COVERAGE

4.4
Location : decode
Killed by : none
negated conditional → NO_COVERAGE

431

1.1
Location : decode
Killed by : none
negated conditional → NO_COVERAGE

435

1.1
Location : decode
Killed by : none
changed conditional boundary → NO_COVERAGE

2.2
Location : decode
Killed by : none
negated conditional → NO_COVERAGE

440

1.1
Location : decode
Killed by : none
changed conditional boundary → NO_COVERAGE

2.2
Location : decode
Killed by : none
negated conditional → NO_COVERAGE

442

1.1
Location : decode
Killed by : none
negated conditional → NO_COVERAGE

452

1.1
Location : decode
Killed by : none
Replaced integer addition with subtraction → NO_COVERAGE

455

1.1
Location : decode
Killed by : none
changed conditional boundary → NO_COVERAGE

2.2
Location : decode
Killed by : none
negated conditional → NO_COVERAGE

458

1.1
Location : decode
Killed by : none
mutated return of Object value for org/argouml/persistence/TodoParser::decode to ( if (x != null) null else throw new RuntimeException ) → NO_COVERAGE

479

1.1
Location : encode
Killed by : none
negated conditional → NO_COVERAGE

480

1.1
Location : encode
Killed by : none
mutated return of Object value for org/argouml/persistence/TodoParser::encode to ( if (x != null) null else throw new RuntimeException ) → NO_COVERAGE

483

1.1
Location : encode
Killed by : none
changed conditional boundary → NO_COVERAGE

2.2
Location : encode
Killed by : none
Changed increment from 1 to -1 → NO_COVERAGE

3.3
Location : encode
Killed by : none
negated conditional → NO_COVERAGE

485

1.1
Location : encode
Killed by : none
negated conditional → NO_COVERAGE

486

1.1
Location : encode
Killed by : none
changed conditional boundary → NO_COVERAGE

2.2
Location : encode
Killed by : none
negated conditional → NO_COVERAGE

490

1.1
Location : encode
Killed by : none
Replaced integer addition with subtraction → NO_COVERAGE

491

1.1
Location : encode
Killed by : none
changed conditional boundary → NO_COVERAGE

2.2
Location : encode
Killed by : none
negated conditional → NO_COVERAGE

492

1.1
Location : encode
Killed by : none
changed conditional boundary → NO_COVERAGE

2.2
Location : encode
Killed by : none
changed conditional boundary → NO_COVERAGE

3.3
Location : encode
Killed by : none
negated conditional → NO_COVERAGE

4.4
Location : encode
Killed by : none
negated conditional → NO_COVERAGE

5.5
Location : encode
Killed by : none
negated conditional → NO_COVERAGE

6.6
Location : encode
Killed by : none
negated conditional → NO_COVERAGE

493

1.1
Location : encode
Killed by : none
changed conditional boundary → NO_COVERAGE

2.2
Location : encode
Killed by : none
changed conditional boundary → NO_COVERAGE

3.3
Location : encode
Killed by : none
negated conditional → NO_COVERAGE

4.4
Location : encode
Killed by : none
negated conditional → NO_COVERAGE

5.5
Location : encode
Killed by : none
negated conditional → NO_COVERAGE

494

1.1
Location : encode
Killed by : none
changed conditional boundary → NO_COVERAGE

2.2
Location : encode
Killed by : none
negated conditional → NO_COVERAGE

495

1.1
Location : encode
Killed by : none
changed conditional boundary → NO_COVERAGE

2.2
Location : encode
Killed by : none
negated conditional → NO_COVERAGE

499

1.1
Location : encode
Killed by : none
Replaced integer addition with subtraction → NO_COVERAGE

502

1.1
Location : encode
Killed by : none
changed conditional boundary → NO_COVERAGE

2.2
Location : encode
Killed by : none
negated conditional → NO_COVERAGE

507

1.1
Location : encode
Killed by : none
mutated return of Object value for org/argouml/persistence/TodoParser::encode to ( if (x != null) null else throw new RuntimeException ) → NO_COVERAGE

Active mutators

Tests examined


Report generated by PIT 0.32