Adds an error element to the specified test case. @param ex exception @param testcase testcase element @param code error code (can be null)
(final QueryException ex, final FBuilder testcase, final QNm code)
| 213 | * @param code error code (can be {@code null}) |
| 214 | */ |
| 215 | private void addError(final QueryException ex, final FBuilder testcase, final QNm code) { |
| 216 | final QNm name = ex.qname(); |
| 217 | if(code == null || !code.eq(name)) { |
| 218 | final FBuilder error; |
| 219 | final boolean fail = UNIT_FAIL.eq(name); |
| 220 | if(fail) { |
| 221 | failures++; |
| 222 | error = FElem.build(Q_FAILURE); |
| 223 | } else { |
| 224 | errors++; |
| 225 | error = FElem.build(Q_ERROR); |
| 226 | } |
| 227 | error.attr(Q_LINE, ex.line()).attr(Q_COLUMN, ex.column()); |
| 228 | final String url = IO.get(ex.path()).url(); |
| 229 | if(!file.url().equals(url)) error.attr(Q_URI, url); |
| 230 | |
| 231 | if(ex instanceof final UnitException ue) { |
| 232 | // unit exception: add expected and returned values |
| 233 | error.node(element(ue.returned, Q_RETURNED, ue.count)); |
| 234 | error.node(element(ue.expected, Q_EXPECTED, ue.count)); |
| 235 | } else if(!fail) { |
| 236 | // exception other than failure: add type |
| 237 | error.attr(Q_TYPE, ex.qname().prefixId(QueryText.ERROR_URI)); |
| 238 | } |
| 239 | |
| 240 | // add info |
| 241 | final Value value = ex.value(); |
| 242 | if(value != null && value.size() == 1) { |
| 243 | error.node(element((Item) value, Q_INFO, -1)); |
| 244 | } else { |
| 245 | // otherwise, add error message |
| 246 | error.node(FElem.build(Q_INFO).text(ex.getLocalizedMessage())); |
| 247 | } |
| 248 | testcase.node(error); |
| 249 | } |
| 250 | } |
| 251 | |
| 252 | /** |
| 253 | * Creates a new element. |