Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
PojavLauncherTeam
GitHub Repository: PojavLauncherTeam/mobile
Path: blob/master/test/jdk/javax/imageio/plugins/tiff/TIFFFieldTest.java
41153 views
1
/*
2
* Copyright (c) 2016, Oracle and/or its affiliates. All rights reserved.
3
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
4
*
5
* This code is free software; you can redistribute it and/or modify it
6
* under the terms of the GNU General Public License version 2 only, as
7
* published by the Free Software Foundation.
8
*
9
* This code is distributed in the hope that it will be useful, but WITHOUT
10
* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
11
* FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
12
* version 2 for more details (a copy is included in the LICENSE file that
13
* accompanied this code).
14
*
15
* You should have received a copy of the GNU General Public License version
16
* 2 along with this work; if not, write to the Free Software Foundation,
17
* Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
18
*
19
* Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
20
* or visit www.oracle.com if you need additional information or have any
21
* questions.
22
*/
23
24
/**
25
* @test
26
* @bug 8152183 8149562 8169725 8169728
27
* @author a.stepanov
28
* @summary Some checks for TIFFField methods
29
* @run main TIFFFieldTest
30
*/
31
32
import java.util.List;
33
import java.util.ArrayList;
34
import javax.imageio.metadata.IIOMetadataNode;
35
import javax.imageio.plugins.tiff.*;
36
import org.w3c.dom.NamedNodeMap;
37
import org.w3c.dom.Node;
38
39
public class TIFFFieldTest {
40
41
private final static String NAME = "tag"; // tag name
42
private final static int NUM = 12345; // tag number
43
private final static int MIN_TYPE = TIFFTag.MIN_DATATYPE;
44
private final static int MAX_TYPE = TIFFTag.MAX_DATATYPE;
45
private final static String CONSTRUCT = "can construct TIFFField with ";
46
47
private void check(boolean ok, String msg) {
48
if (!ok) { throw new RuntimeException(msg); }
49
}
50
51
private void testConstructors() {
52
53
// test constructors
54
55
TIFFTag tag = new TIFFTag(
56
NAME, NUM, 1 << TIFFTag.TIFF_SHORT | 1 << TIFFTag.TIFF_LONG);
57
TIFFField f;
58
59
// constructor: TIFFField(tag, value)
60
boolean ok = false;
61
try { new TIFFField(null, 0); }
62
catch (NullPointerException e) { ok = true; }
63
check(ok, CONSTRUCT + "null tag");
64
65
ok = false;
66
try { new TIFFField(tag, -1); }
67
catch (IllegalArgumentException e) { ok = true; }
68
check(ok, CONSTRUCT + "negative value");
69
70
ok = false;
71
try { new TIFFField(tag, 1L << 32); }
72
catch (IllegalArgumentException e) { ok = true; }
73
check(ok, CONSTRUCT + "value > 0xffffffff");
74
75
ok = false;
76
try {
77
TIFFTag t = new TIFFTag(NAME, NUM, 1 << TIFFTag.TIFF_SHORT);
78
new TIFFField(t, 0x10000);
79
} catch (IllegalArgumentException e) { ok = true; }
80
check(ok, CONSTRUCT + "value 0x10000 incompatible with TIFF_SHORT");
81
82
ok = false;
83
try {
84
TIFFTag t = new TIFFTag(NAME, NUM, 1 << TIFFTag.TIFF_LONG);
85
new TIFFField(t, 0xffff);
86
} catch (IllegalArgumentException e) { ok = true; }
87
check(ok, CONSTRUCT + "value 0xffff incompatible with TIFF_LONG");
88
89
// check value type recognition
90
int v = 1 << 16;
91
f = new TIFFField(tag, v - 1);
92
check(f.getType() == TIFFTag.TIFF_SHORT, "must be treated as short");
93
check(f.isIntegral(), "must be integral");
94
f = new TIFFField(tag, v);
95
check(f.getType() == TIFFTag.TIFF_LONG, "must be treated as long");
96
97
// other checks
98
check(f.getAsLongs().length == 1, "invalid long[] size");
99
check(f.isIntegral(), "must be integral");
100
check((f.getDirectory() == null) && !f.hasDirectory(),
101
"must not have directory");
102
check(f.getValueAsString(0).equals(String.valueOf(v)),
103
"invalid string representation of value");
104
check(f.getTag().getNumber() == f.getTagNumber(),
105
"invalid tag number");
106
check(f.getCount() == 1, "invalid count");
107
check(f.getTagNumber() == NUM, "invalid tag number");
108
109
// constructor: TIFFField(tag, type, count)
110
int type = TIFFTag.TIFF_SHORT;
111
112
ok = false;
113
try { new TIFFField(null, type, 1); }
114
catch (NullPointerException e) { ok = true; }
115
check(ok, CONSTRUCT + "null tag");
116
117
ok = false;
118
try { new TIFFField(tag, MAX_TYPE + 1, 1); }
119
catch (IllegalArgumentException e) { ok = true; }
120
check(ok, CONSTRUCT + "invalid type tag");
121
122
// check that count == 1 for TIFF_IFD_POINTER
123
ok = false;
124
try { new TIFFField(tag, TIFFTag.TIFF_IFD_POINTER, 0); }
125
catch (IllegalArgumentException e) { ok = true; }
126
check(ok, "only count = 1 should be allowed for IFDPointer");
127
128
ok = false;
129
try { new TIFFField(tag, TIFFTag.TIFF_IFD_POINTER, 2); }
130
catch (IllegalArgumentException e) { ok = true; }
131
check(ok, "only count = 1 should be allowed for IFDPointer");
132
133
// check that count == 0 is not allowed for TIFF_RATIONAL, TIFF_SRATIONAL
134
// (see fix for JDK-8149120)
135
ok = false;
136
try { new TIFFField(tag, TIFFTag.TIFF_RATIONAL, 0); }
137
catch (IllegalArgumentException e) { ok = true; }
138
check(ok, "count = 0 should not be allowed for Rational");
139
140
ok = false;
141
try { new TIFFField(tag, TIFFTag.TIFF_SRATIONAL, 0); }
142
catch (IllegalArgumentException e) { ok = true; }
143
check(ok, "count = 0 should not be allowed for SRational");
144
145
ok = false;
146
try { new TIFFField(tag, type, -1); }
147
catch (IllegalArgumentException e) { ok = true; }
148
check(ok, CONSTRUCT + "with invalid data count");
149
150
f = new TIFFField(tag, type, 0);
151
check(f.getCount() == 0, "invalid count");
152
check(!f.hasDirectory(), "must not have directory");
153
154
// constructor: TIFFField(tag, type, count, data)
155
double a[] = {0.1, 0.2, 0.3};
156
ok = false;
157
try { new TIFFField(null, TIFFTag.TIFF_DOUBLE, a.length, a); }
158
catch (NullPointerException e) { ok = true; }
159
check(ok, CONSTRUCT + "null tag");
160
161
ok = false;
162
try { new TIFFField(tag, type, a.length - 1, a); }
163
catch (IllegalArgumentException e) { ok = true; }
164
check(ok, CONSTRUCT + "invalid data count");
165
166
String a2[] = {"one", "two"};
167
ok = false;
168
try { new TIFFField(tag, type, 2, a2); }
169
catch (IllegalArgumentException e) { ok = true; }
170
check(ok, CONSTRUCT + "invalid data type");
171
check((f.getDirectory() == null) && !f.hasDirectory(),
172
"must not have directory");
173
174
ok = false;
175
try {
176
TIFFTag t = new TIFFTag(NAME, NUM, 1 << TIFFTag.TIFF_RATIONAL);
177
long[][] tiffRationals = new long[6][3];
178
new TIFFField(t, TIFFTag.TIFF_RATIONAL, tiffRationals.length,
179
tiffRationals);
180
} catch (IllegalArgumentException e) {
181
ok = true;
182
}
183
184
ok = false;
185
try {
186
TIFFTag t = new TIFFTag(NAME, NUM, 1 << TIFFTag.TIFF_SRATIONAL);
187
int[][] tiffSRationals = new int[6][3];
188
new TIFFField(t, TIFFTag.TIFF_SRATIONAL, tiffSRationals.length,
189
tiffSRationals);
190
} catch (IllegalArgumentException e) {
191
ok = true;
192
}
193
194
ok = false;
195
try {
196
TIFFTag t = new TIFFTag(NAME, NUM, 1 << TIFFTag.TIFF_LONG);
197
long[] tiffLongs = new long[] {0, -7, 10};
198
new TIFFField(t, TIFFTag.TIFF_LONG, tiffLongs.length,
199
tiffLongs);
200
} catch (IllegalArgumentException e) {
201
ok = true;
202
}
203
204
ok = false;
205
try {
206
TIFFTag t = new TIFFTag(NAME, NUM, 1 << TIFFTag.TIFF_LONG);
207
long[] tiffLongs = new long[] {0, 7, 0x100000000L};
208
new TIFFField(t, TIFFTag.TIFF_LONG, tiffLongs.length,
209
tiffLongs);
210
} catch (IllegalArgumentException e) {
211
ok = true;
212
}
213
214
ok = false;
215
try {
216
TIFFTag t = new TIFFTag(NAME, NUM, 1 << TIFFTag.TIFF_IFD_POINTER);
217
long[] tiffLongs = new long[] {-7};
218
new TIFFField(t, TIFFTag.TIFF_IFD_POINTER, tiffLongs.length,
219
tiffLongs);
220
} catch (IllegalArgumentException e) {
221
ok = true;
222
}
223
224
ok = false;
225
try {
226
TIFFTag t = new TIFFTag(NAME, NUM, 1 << TIFFTag.TIFF_IFD_POINTER);
227
long[] tiffLongs = new long[] {0x100000000L};
228
new TIFFField(t, TIFFTag.TIFF_IFD_POINTER, tiffLongs.length,
229
tiffLongs);
230
} catch (IllegalArgumentException e) {
231
ok = true;
232
}
233
234
ok = false;
235
try {
236
TIFFTag t = new TIFFTag(NAME, NUM, 1 << TIFFTag.TIFF_RATIONAL);
237
long[][] tiffRationals = new long[][] {
238
{10, 2},
239
{1, -3},
240
{4, 7}
241
};
242
new TIFFField(t, TIFFTag.TIFF_RATIONAL, tiffRationals.length,
243
tiffRationals);
244
} catch (IllegalArgumentException e) {
245
ok = true;
246
}
247
248
ok = false;
249
try {
250
TIFFTag t = new TIFFTag(NAME, NUM, 1 << TIFFTag.TIFF_RATIONAL);
251
long[][] tiffRationals = new long[][] {
252
{10, 2},
253
{0x100000000L, 3},
254
{4, 7}
255
};
256
new TIFFField(t, TIFFTag.TIFF_RATIONAL, tiffRationals.length,
257
tiffRationals);
258
} catch (IllegalArgumentException e) {
259
ok = true;
260
}
261
262
// constructor: TIFFField(tag, type, offset, dir)
263
List<TIFFTag> tags = new ArrayList<>();
264
tags.add(tag);
265
TIFFTagSet sets[] = {new TIFFTagSet(tags)};
266
TIFFDirectory dir = new TIFFDirectory(sets, null);
267
268
ok = false;
269
try { new TIFFField(null, type, 4L, dir); }
270
catch (NullPointerException e) { ok = true; }
271
check(ok, CONSTRUCT + "null tag");
272
273
ok = false;
274
try { new TIFFField(tag, type, 0L, dir); }
275
catch (IllegalArgumentException e) { ok = true; }
276
check(ok, CONSTRUCT + "non-positive offset");
277
278
long offset = 4;
279
280
for (int t = MIN_TYPE; t <= MAX_TYPE; t++) {
281
282
tag = new TIFFTag(NAME, NUM, 1 << t);
283
284
// only TIFF_LONG and TIFF_IFD_POINTER types are allowed
285
if (t == TIFFTag.TIFF_LONG || t == TIFFTag.TIFF_IFD_POINTER) {
286
287
f = new TIFFField(tag, t, offset, dir);
288
check(f.hasDirectory(), "must have directory");
289
290
check(f.getDirectory().getTag(NUM).getName().equals(NAME),
291
"invalid tag name");
292
293
check(f.getCount() == 1, "invalid count");
294
check(f.getAsLong(0) == offset, "invalid offset");
295
} else {
296
ok = false;
297
try { new TIFFField(tag, t, offset, dir); }
298
catch (IllegalArgumentException e) { ok = true; }
299
check(ok, CONSTRUCT + "invalid data type");
300
}
301
}
302
303
type = TIFFTag.TIFF_IFD_POINTER;
304
tag = new TIFFTag(NAME, NUM, 1 << type);
305
ok = false;
306
try { new TIFFField(tag, type, offset, null); }
307
catch (NullPointerException e) { ok = true; }
308
check(ok, CONSTRUCT + "null TIFFDirectory");
309
310
type = TIFFTag.TIFF_LONG;
311
tag = new TIFFTag(NAME, NUM, 1 << type);
312
ok = false;
313
try { new TIFFField(tag, type, offset, null); }
314
catch (NullPointerException e) { ok = true; }
315
check(ok, CONSTRUCT + "null TIFFDirectory");
316
}
317
318
private void testTypes() {
319
320
// test getTypeName(), getTypeByName() methods
321
322
boolean ok = false;
323
try { TIFFField.getTypeName(MIN_TYPE - 1); }
324
catch (IllegalArgumentException e) { ok = true; }
325
check(ok, "invalid data type number used");
326
327
ok = false;
328
try { TIFFField.getTypeName(MAX_TYPE + 1); }
329
catch (IllegalArgumentException e) { ok = true; }
330
check(ok, "invalid data type number used");
331
332
for (int type = MIN_TYPE; type <= MAX_TYPE; type++) {
333
String name = TIFFField.getTypeName(type);
334
check(TIFFField.getTypeByName(name) == type, "invalid type");
335
}
336
337
for (int type = MIN_TYPE; type <= MAX_TYPE; type++) {
338
339
TIFFTag tag = new TIFFTag(NAME, NUM, 1 << type);
340
TIFFField f = new TIFFField(tag, type, 1);
341
check(f.getType() == type, "invalid type");
342
343
// check that invalid data types can not be used
344
for (int type2 = MIN_TYPE; type2 <= MAX_TYPE; ++type2) {
345
if (type2 != type) {
346
ok = false;
347
try { new TIFFField(tag, type2, 1); } // invalid type
348
catch (IllegalArgumentException e) { ok = true; }
349
check(ok, "invalid type was successfully set");
350
}
351
}
352
}
353
}
354
355
private void testGetAs() {
356
357
// test getAs...() methods
358
359
int type = TIFFTag.TIFF_SHORT;
360
TIFFTag tag = new TIFFTag(NAME, NUM, 1 << TIFFTag.TIFF_SHORT);
361
362
short v = 123;
363
TIFFField f = new TIFFField(tag, v);
364
365
check(f.getAsInt(0) == (int) v, "invalid int value");
366
check(f.getAsLong(0) == (long) v, "invalid long value");
367
check(f.getAsFloat(0) == (float) v, "invalid float value");
368
check(f.getAsDouble(0) == (double) v, "invalid double value");
369
check(f.getValueAsString(0).equals(Short.toString(v)),
370
"invalid string representation");
371
372
check(f.getAsInts().length == 1, "inavlid array size");
373
check((int) v == f.getAsInts()[0], "invalid int value");
374
375
float fa[] = {0.01f, 1.01f};
376
type = TIFFTag.TIFF_FLOAT;
377
f = new TIFFField(
378
new TIFFTag(NAME, NUM, 1 << type), type, fa.length, fa);
379
check(f.getCount() == fa.length, "invalid count");
380
float fa2[] = f.getAsFloats();
381
check(fa2.length == fa.length, "invalid array size");
382
383
for (int i = 0; i < fa.length; i++) {
384
check(fa2[i] == fa[i], "invalid value");
385
check(f.getAsDouble(i) == fa[i], "invalid value");
386
check(f.getAsInt(i) == (int) fa[i], "invalid value"); // cast to int
387
check(f.getValueAsString(i).equals(Float.toString(fa[i])),
388
"invalid string representation");
389
}
390
391
byte ba[] = {-1, -10, -100};
392
type = TIFFTag.TIFF_BYTE;
393
f = new TIFFField(
394
new TIFFTag(NAME, NUM, 1 << type), type, ba.length, ba);
395
check(f.getCount() == ba.length, "invalid count");
396
byte ba2[] = f.getAsBytes();
397
check(ba2.length == ba.length, "invalid count");
398
399
for (int i = 0; i < ba.length; i++) {
400
check(ba[i] == ba2[i], "invalid value");
401
check(ba[i] == (byte) f.getAsDouble(i), "invalid value");
402
check(ba[i] == (byte) f.getAsLong(i), "invalid value");
403
404
int unsigned = ba[i] & 0xff;
405
check(f.getAsInt(i) == unsigned, "must be treated as unsigned");
406
}
407
408
char ca[] = {'a', 'z', 0xffff};
409
type = TIFFTag.TIFF_SHORT;
410
f = new TIFFField(
411
new TIFFTag(NAME, NUM, 1 << type), type, ca.length, ca);
412
check(f.getCount() == ca.length, "invalid count");
413
char ca2[] = f.getAsChars();
414
check(ba2.length == ba.length, "invalid count");
415
416
for (int i = 0; i < ca.length; i++) {
417
check(ca[i] == ca2[i], "invalid value");
418
check(ca[i] == (char) f.getAsDouble(i), "invalid value");
419
check(ca[i] == (char) f.getAsLong(i), "invalid value");
420
check(ca[i] == (char) f.getAsInt(i), "invalid value");
421
}
422
423
type = TIFFTag.TIFF_DOUBLE;
424
double da[] = {0.1, 0.2, 0.3};
425
f = new TIFFField(
426
new TIFFTag(NAME, NUM, 1 << type), type, da.length, da);
427
check(!f.isIntegral(), "isIntegral must be false");
428
429
double da2[] = f.getAsDoubles();
430
check(f.getData() instanceof double[], "invalid data type");
431
double da3[] = (double[]) f.getData();
432
check((da.length == da2.length) &&
433
(da.length == da2.length) &&
434
(da.length == f.getCount()),
435
"invalid data count");
436
for (int i = 0; i < da.length; ++i) {
437
check(da[i] == da2[i], "invalid data");
438
check(da[i] == da3[i], "invalid data");
439
}
440
441
boolean ok = false;
442
try { f.getAsShorts(); }
443
catch (ClassCastException e) { ok = true; }
444
check(ok, "invalid data cast");
445
446
ok = false;
447
try { f.getAsRationals(); }
448
catch (ClassCastException e) { ok = true; }
449
check(ok, "invalid data cast");
450
451
ok = false;
452
try { TIFFField.createArrayForType(TIFFTag.MIN_DATATYPE - 1, 1); }
453
catch (IllegalArgumentException e) { ok = true; }
454
check(ok, "can create array with invalid datatype");
455
456
ok = false;
457
try { TIFFField.createArrayForType(TIFFTag.MAX_DATATYPE + 1, 1); }
458
catch (IllegalArgumentException e) { ok = true; }
459
check(ok, "can create array with invalid datatype");
460
461
ok = false;
462
try { TIFFField.createArrayForType(TIFFTag.TIFF_FLOAT, -1); }
463
catch (IllegalArgumentException e) { ok = true; }
464
check(ok, "can create array with negative count");
465
466
int n = 3;
467
Object
468
RA = TIFFField.createArrayForType(TIFFTag.TIFF_RATIONAL, n),
469
SRA = TIFFField.createArrayForType(TIFFTag.TIFF_SRATIONAL, n);
470
check(RA instanceof long[][], "invalid data type");
471
check(SRA instanceof int[][], "invalid data type");
472
473
long ra[][] = (long[][]) RA;
474
int sra[][] = (int[][]) SRA;
475
check((ra.length == n) && (sra.length == n), "invalid data size");
476
for (int i = 0; i < n; i++) {
477
check((ra[i].length == 2) && (sra[i].length == 2),
478
"invalid data size");
479
ra[i][0] = 1; ra[i][1] = 5 + i;
480
sra[i][0] = -1; sra[i][1] = 5 + i;
481
}
482
483
type = TIFFTag.TIFF_RATIONAL;
484
TIFFField f1 = new TIFFField(
485
new TIFFTag(NAME, NUM, 1 << type), type, n, ra);
486
type = TIFFTag.TIFF_SRATIONAL;
487
TIFFField f2 = new TIFFField(
488
new TIFFTag(NAME, NUM, 1 << type), type, n, sra);
489
490
check((f1.getCount() == ra.length) && (f2.getCount() == sra.length),
491
"invalid data count");
492
493
check(f1.getAsRationals().length == n, "invalid data count");
494
check(f2.getAsSRationals().length == n, "invalid data count");
495
for (int i = 0; i < n; i++) {
496
long r[] = f1.getAsRational(i);
497
check(r.length == 2, "invalid data format");
498
check((r[0] == 1) && (r[1] == i + 5), "invalid data");
499
500
int sr[] = f2.getAsSRational(i);
501
check(sr.length == 2, "invalid data format");
502
check((sr[0] == -1) && (sr[1] == i + 5), "invalid data");
503
504
// check string representation
505
String s = Long.toString(r[0]) + "/" + Long.toString(r[1]);
506
check(s.equals(f1.getValueAsString(i)),
507
"invalid string representation");
508
509
s = Integer.toString(sr[0]) + "/" + Integer.toString(sr[1]);
510
check(s.equals(f2.getValueAsString(i)),
511
"invalid string representation");
512
513
// see the documentation for getAsInt:
514
// TIFF_SRATIONAL or TIFF_RATIONAL format are evaluated
515
// by dividing the numerator into the denominator using
516
// double-precision arithmetic and then casting to int
517
check(f1.getAsInt(i) == (int)(r[0] / r[1]),
518
"invalid result for getAsInt");
519
check(f2.getAsInt(i) == (int)(r[0] / r[1]),
520
"invalid result for getAsInt");
521
}
522
523
ok = false;
524
try { f1.getAsRational(ra.length); }
525
catch (ArrayIndexOutOfBoundsException e) { ok = true; }
526
check(ok, "invalid index");
527
528
String sa[] = {"-1.e-25", "22", "-1.23E5"};
529
type = TIFFTag.TIFF_ASCII;
530
f = new TIFFField(
531
new TIFFTag(NAME, NUM, 1 << type), type, sa.length, sa);
532
533
// test clone() method
534
TIFFField cloned = null;
535
try { cloned = f.clone(); } catch (CloneNotSupportedException e) {
536
throw new RuntimeException(e);
537
}
538
539
check(f.getCount() == cloned.getCount(), "invalid cloned field count");
540
541
check(f.getCount() == sa.length, "invalid data count");
542
for (int i = 0; i < sa.length; i++) {
543
check(sa[i].equals(f.getAsString(i)), "invalid data");
544
// see docs: "data in TIFF_ASCII format will be parsed as by
545
// the Double.parseDouble method, with the result cast to int"
546
check(f.getAsInt(i) ==
547
(int) Double.parseDouble(sa[i]), "invalid data");
548
check(f.getAsDouble(i) == Double.parseDouble(sa[i]), "invalid data");
549
550
check(sa[i].equals(cloned.getAsString(i)), "invalid cloned data");
551
}
552
}
553
554
private void testCreateFromNode() {
555
556
int type = TIFFTag.TIFF_LONG;
557
558
List<TIFFTag> tags = new ArrayList<>();
559
int v = 1234567;
560
TIFFTag tag = new TIFFTag(NAME, NUM, 1 << type);
561
tags.add(tag);
562
TIFFTagSet ts = new TIFFTagSet(tags);
563
564
boolean ok = false;
565
try {
566
TIFFField.createFromMetadataNode(ts, null);
567
} catch (IllegalArgumentException e) {
568
// createFromMetadataNode() formerly threw a NullPointerException
569
// if its Node parameter was null, but the specification has been
570
// modified to allow only IllegalArgumentExceptions, perhaps with
571
// a cause set. In the present invocation the cause would be set
572
// to a NullPointerException but this is not explicitly specified
573
// hence not verified here.
574
ok = true;
575
}
576
check(ok, "can create TIFFField from a null node");
577
578
TIFFField f = new TIFFField(tag, v);
579
Node node = f.getAsNativeNode();
580
check(node.getNodeName().equals(f.getClass().getSimpleName()),
581
"invalid node name");
582
583
NamedNodeMap attrs = node.getAttributes();
584
for (int i = 0; i < attrs.getLength(); i++) {
585
String an = attrs.item(i).getNodeName().toLowerCase();
586
String av = attrs.item(i).getNodeValue();
587
if (an.contains("name")) {
588
check(av.equals(NAME), "invalid tag name");
589
} else if (an.contains("number")) {
590
check(av.equals(Integer.toString(NUM)), "invalid tag number");
591
}
592
}
593
594
// invalid node
595
IIOMetadataNode nok = new IIOMetadataNode("NOK");
596
597
ok = false;
598
try { TIFFField.createFromMetadataNode(ts, nok); }
599
catch (IllegalArgumentException e) { ok = true; }
600
check(ok, CONSTRUCT + "invalid node name");
601
602
TIFFField f2 = TIFFField.createFromMetadataNode(ts, node);
603
check(f2.getType() == type, "invalid type");
604
check(f2.getTagNumber() == NUM, "invalid tag number");
605
check(f2.getTag().getName().equals(NAME), "invalid tag name");
606
check(f2.getCount() == 1, "invalid count");
607
check(f2.getAsInt(0) == v, "invalid value");
608
}
609
610
public static void main(String[] args) {
611
612
TIFFFieldTest test = new TIFFFieldTest();
613
test.testConstructors();
614
test.testCreateFromNode();
615
test.testTypes();
616
test.testGetAs();
617
}
618
}
619
620