001: /*
002: * Licensed to the Apache Software Foundation (ASF) under one or more
003: * contributor license agreements. See the NOTICE file distributed with
004: * this work for additional information regarding copyright ownership.
005: * The ASF licenses this file to You under the Apache License, Version 2.0
006: * (the "License"); you may not use this file except in compliance with
007: * the License. You may obtain a copy of the License at
008: *
009: * http://www.apache.org/licenses/LICENSE-2.0
010: *
011: * Unless required by applicable law or agreed to in writing, software
012: * distributed under the License is distributed on an "AS IS" BASIS,
013: * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
014: * See the License for the specific language governing permissions and
015: * limitations under the License.
016: */
017: /**
018: * @author Pavel Dolgov
019: * @version $Revision$
020: */package java.awt.dnd;
021:
022: import java.awt.Component;
023: import java.awt.datatransfer.DataFlavor;
024: import java.awt.datatransfer.Transferable;
025: import java.awt.datatransfer.UnsupportedFlavorException;
026: import java.awt.dnd.peer.DropTargetContextPeer;
027: import java.io.IOException;
028:
029: import junit.framework.TestCase;
030:
031: /**
032: * Unit test for class java.awt.dnd.DropTargetContext
033: */
034: public class DropTargetContextTest extends TestCase {
035:
036: static class LocalObject implements Transferable {
037:
038: final Object data;
039: final DataFlavor df;
040:
041: LocalObject(Object data) {
042: this .data = data;
043: df = new DataFlavor(data.getClass(), "Object");
044: }
045:
046: public Object getTransferData(DataFlavor flavor)
047: throws UnsupportedFlavorException, IOException {
048: if (df.equals(flavor)) {
049: return data;
050: }
051: return null;
052: }
053:
054: public boolean isDataFlavorSupported(DataFlavor flavor) {
055: return df.equals(flavor);
056: }
057:
058: public DataFlavor[] getTransferDataFlavors() {
059: try {
060: DataFlavor f = (DataFlavor) df.clone();
061: return new DataFlavor[] { f };
062: } catch (CloneNotSupportedException e) {
063: return null;
064: }
065: }
066:
067: }
068:
069: static class DropTargetContextStub implements DropTargetContextPeer {
070:
071: int actions;
072: DropTarget dt;
073: final LocalObject transferable;
074:
075: public boolean acceptedDrag;
076: public boolean rejectedDrag;
077: public int dragAction;
078:
079: public boolean acceptedDrop;
080: public boolean rejectedDrop;
081: public int dropAction;
082:
083: public boolean dropCompleted;
084: public boolean dropSuccessful;
085:
086: DropTargetContextStub(Object data) {
087: this (data, DnDConstants.ACTION_COPY_OR_MOVE);
088: }
089:
090: DropTargetContextStub(Object data, int actions) {
091: transferable = new LocalObject(data);
092: this .actions = actions;
093: }
094:
095: public int getTargetActions() {
096: return actions;
097: }
098:
099: public void setTargetActions(int actions) {
100: this .actions = actions;
101: }
102:
103: public DropTarget getDropTarget() {
104: return dt;
105: }
106:
107: public DataFlavor[] getTransferDataFlavors() {
108: return transferable.getTransferDataFlavors();
109: }
110:
111: public Transferable getTransferable()
112: throws InvalidDnDOperationException {
113: return transferable;
114: }
115:
116: public boolean isTransferableJVMLocal() {
117: return true;
118: }
119:
120: public void acceptDrag(int dragAction) {
121: acceptedDrag = true;
122: this .dragAction = dragAction;
123: }
124:
125: public void rejectDrag() {
126: rejectedDrag = true;
127: }
128:
129: public void acceptDrop(int dropAction) {
130: acceptedDrop = true;
131: this .dropAction = dropAction;
132: }
133:
134: public void rejectDrop() {
135: rejectedDrop = true;
136: }
137:
138: public void dropComplete(boolean success) {
139: dropCompleted = true;
140: dropSuccessful = success;
141: }
142:
143: }
144:
145: static class NotSerializable {
146: String name;
147: int value;
148:
149: NotSerializable(String n, int v) {
150: name = n;
151: value = v;
152: }
153:
154: @Override
155: public boolean equals(Object obj) {
156: if (obj instanceof NotSerializable) {
157: NotSerializable ns = (NotSerializable) obj;
158: return ((name != null && name.equals(ns.name)) || (name == null && ns.name == null))
159: && (value == ns.value);
160: }
161: return false;
162: }
163:
164: @Override
165: public int hashCode() {
166: int h = (name != null) ? name.hashCode() : 8726345;
167: return (h ^ value);
168: }
169: }
170:
171: DropTarget dt;
172:
173: public static void main(String[] args) {
174: junit.textui.TestRunner.run(DropTargetContextTest.class);
175: }
176:
177: @Override
178: protected void setUp() throws Exception {
179: dt = new DropTarget();
180: super .setUp();
181: }
182:
183: @Override
184: protected void tearDown() throws Exception {
185: super .tearDown();
186: }
187:
188: public void testDropTargetContext() {
189: DropTargetContext c = new DropTargetContext(dt);
190: assertSame(dt, c.getDropTarget());
191: }
192:
193: public void testCreateTransferableProxyNull() {
194: DropTargetContext c = new DropTargetContext(dt);
195: Transferable t = c.createTransferableProxy(null, true);
196: assertNotNull(t);
197: try {
198: t.getTransferDataFlavors();
199: fail("NPE expected");
200: } catch (NullPointerException e) {
201: }
202: try {
203: t.isDataFlavorSupported(DataFlavor.stringFlavor);
204: fail("NPE expected");
205: } catch (NullPointerException e) {
206: }
207: }
208:
209: public void testCreateTransferableProxyLocal() throws Exception {
210: DropTargetContext c = new DropTargetContext(dt);
211: String s = "test";
212: LocalObject obj = new LocalObject(s);
213: Transferable t = c.createTransferableProxy(obj, true);
214: assertTrue(t.getTransferDataFlavors().length > 0);
215:
216: Object data1 = t.getTransferData(DataFlavor.stringFlavor);
217: assertEquals(s, data1);
218: assertNotSame(s, data1);
219:
220: Object data2 = t.getTransferData(new DataFlavor(String.class,
221: "String"));
222: assertEquals(s, data2);
223: assertNotSame(s, data2);
224: }
225:
226: public void testCreateTransferableProxyNotLocal() throws Exception {
227: DropTargetContext c = new DropTargetContext(dt);
228: String s = "test";
229: LocalObject obj = new LocalObject(s);
230: Transferable t = c.createTransferableProxy(obj, false);
231: assertTrue(t.getTransferDataFlavors().length > 0);
232:
233: Object data1 = t.getTransferData(DataFlavor.stringFlavor);
234: assertEquals(s, data1);
235: assertSame(s, data1);
236:
237: Object data2 = t.getTransferData(new DataFlavor(String.class,
238: "String"));
239: assertEquals(s, data2);
240: assertSame(s, data2);
241: }
242:
243: public void testCreateTransferableProxyNotSerializable()
244: throws Exception {
245: DropTargetContext c = new DropTargetContext(dt);
246: NotSerializable ns = new NotSerializable("test", 12);
247: LocalObject obj = new LocalObject(ns);
248: Transferable t = c.createTransferableProxy(obj, true);
249: assertTrue(t.getTransferDataFlavors().length > 0);
250:
251: Object data = t.getTransferData(new DataFlavor(
252: NotSerializable.class, "NotSerializable"));
253: assertEquals(ns, data);
254: assertSame(ns, data);
255: }
256:
257: public void testAddNotify() {
258: NotSerializable ns = new NotSerializable("test", 12);
259: DropTargetContext c = new DropTargetContext(dt);
260: DropTargetContextStub stub = new DropTargetContextStub(ns);
261: c.addNotify(stub);
262: DropTargetContext.TransferableProxy proxy = (DropTargetContext.TransferableProxy) c
263: .getTransferable();
264: assertSame(stub.transferable, proxy.transferable);
265: }
266:
267: public void testRemoveNotify() {
268: NotSerializable ns = new NotSerializable("test", 12);
269: DropTargetContext c = new DropTargetContext(dt);
270: c.removeNotify();
271:
272: DropTargetContextStub stub = new DropTargetContextStub(ns);
273: c.addNotify(stub);
274: assertNotNull(c.getTransferable());
275:
276: c.removeNotify();
277: try {
278: c.getTransferable();
279: fail("InvalidDnDOperationException expected");
280: } catch (InvalidDnDOperationException e) {
281: }
282: }
283:
284: public void testGetDropTarget() {
285: DropTargetContext c = new DropTargetContext(dt);
286: assertSame(dt, c.getDropTarget());
287: }
288:
289: public void testGetTransferable() {
290: NotSerializable ns = new NotSerializable("test", 12);
291: DropTargetContext c = new DropTargetContext(dt);
292: try {
293: c.getTransferable();
294: fail("InvalidDnDOperationException expected");
295: } catch (InvalidDnDOperationException e) {
296: }
297:
298: DropTargetContextStub stub = new DropTargetContextStub(ns);
299: c.addNotify(stub);
300: try {
301: c.getTransferable();
302: } catch (InvalidDnDOperationException e) {
303: fail("InvalidDnDOperationException");
304: }
305:
306: assertTrue(c.getTransferable() instanceof DropTargetContext.TransferableProxy);
307:
308: DropTargetContext.TransferableProxy proxy = (DropTargetContext.TransferableProxy) c
309: .getTransferable();
310: assertSame(stub.transferable, proxy.transferable);
311: }
312:
313: public void testIsDataFlavorSupported() {
314: NotSerializable ns = new NotSerializable("test", 12);
315: LocalObject lo = new LocalObject(ns);
316:
317: DropTargetContext c = new DropTargetContext(dt);
318: assertFalse(c.isDataFlavorSupported(lo.df));
319:
320: DropTargetContextStub stub = new DropTargetContextStub(ns);
321: c.addNotify(stub);
322:
323: assertTrue(c.isDataFlavorSupported(lo.df));
324: assertFalse(c
325: .isDataFlavorSupported(DataFlavor.javaFileListFlavor));
326: }
327:
328: public void testGetCurrentDataFlavors() {
329: DropTargetContext c = new DropTargetContext(dt);
330: assertNotNull(c.getCurrentDataFlavors());
331: assertEquals(0, c.getCurrentDataFlavors().length);
332:
333: NotSerializable ns = new NotSerializable("test", 12);
334: LocalObject lo = new LocalObject(ns);
335: DropTargetContextStub stub = new DropTargetContextStub(ns);
336: c.addNotify(stub);
337:
338: assertNotNull(c.getCurrentDataFlavors());
339: assertEquals(1, c.getCurrentDataFlavors().length);
340: assertEquals(lo.df, c.getCurrentDataFlavors()[0]);
341: assertNotSame(c.getCurrentDataFlavors(), c
342: .getCurrentDataFlavors());
343: assertNotSame(c.getCurrentDataFlavors()[0], c
344: .getCurrentDataFlavors()[0]);
345: }
346:
347: public void testGetCurrentDataFlavorsAsList() {
348: DropTargetContext c = new DropTargetContext(dt);
349: assertNotNull(c.getCurrentDataFlavorsAsList());
350: assertEquals(0, c.getCurrentDataFlavorsAsList().size());
351:
352: NotSerializable ns = new NotSerializable("test", 12);
353: LocalObject lo = new LocalObject(ns);
354: DropTargetContextStub stub = new DropTargetContextStub(ns);
355: c.addNotify(stub);
356:
357: assertNotNull(c.getCurrentDataFlavorsAsList());
358: assertEquals(1, c.getCurrentDataFlavorsAsList().size());
359: assertEquals(lo.df, c.getCurrentDataFlavorsAsList().get(0));
360: assertNotSame(c.getCurrentDataFlavorsAsList(), c
361: .getCurrentDataFlavorsAsList());
362: assertNotSame(c.getCurrentDataFlavorsAsList().get(0), c
363: .getCurrentDataFlavorsAsList().get(0));
364: }
365:
366: @SuppressWarnings("serial")
367: public void testGetComponent() {
368: Component comp = new Component() {
369: };
370: dt.setComponent(comp);
371: DropTargetContext c = new DropTargetContext(dt);
372: assertSame(comp, c.getComponent());
373: }
374:
375: public void testDropComplete() {
376: DropTargetContext c = new DropTargetContext(dt);
377: c.dropComplete(true);
378:
379: NotSerializable ns = new NotSerializable("test", 12);
380: DropTargetContextStub stub = new DropTargetContextStub(ns);
381: c.addNotify(stub);
382:
383: assertFalse(stub.dropCompleted);
384: c.dropComplete(true);
385: assertTrue(stub.dropCompleted);
386: assertTrue(stub.dropSuccessful);
387:
388: stub.dropCompleted = false;
389: c.dropComplete(false);
390: assertTrue(stub.dropCompleted);
391: assertFalse(stub.dropSuccessful);
392: }
393:
394: public void testAcceptDrop() {
395: DropTargetContext c = new DropTargetContext(dt);
396: c.acceptDrop(DnDConstants.ACTION_COPY);
397:
398: NotSerializable ns = new NotSerializable("test", 12);
399: DropTargetContextStub stub = new DropTargetContextStub(ns);
400: c.addNotify(stub);
401:
402: assertFalse(stub.acceptedDrop);
403: c.acceptDrop(DnDConstants.ACTION_COPY_OR_MOVE);
404: assertTrue(stub.acceptedDrop);
405: assertEquals(DnDConstants.ACTION_COPY_OR_MOVE, stub.dropAction);
406:
407: stub.acceptedDrop = false;
408: c.acceptDrop(DnDConstants.ACTION_LINK);
409: assertTrue(stub.acceptedDrop);
410: assertEquals(DnDConstants.ACTION_LINK, stub.dropAction);
411: }
412:
413: public void testAcceptDrag() {
414: DropTargetContext c = new DropTargetContext(dt);
415: c.acceptDrag(DnDConstants.ACTION_COPY);
416:
417: NotSerializable ns = new NotSerializable("test", 12);
418: DropTargetContextStub stub = new DropTargetContextStub(ns);
419: c.addNotify(stub);
420:
421: assertFalse(stub.acceptedDrag);
422: c.acceptDrag(DnDConstants.ACTION_COPY_OR_MOVE);
423: assertTrue(stub.acceptedDrag);
424: assertEquals(DnDConstants.ACTION_COPY_OR_MOVE, stub.dragAction);
425:
426: stub.acceptedDrop = false;
427: c.acceptDrag(DnDConstants.ACTION_LINK);
428: assertTrue(stub.acceptedDrag);
429: assertEquals(DnDConstants.ACTION_LINK, stub.dragAction);
430: }
431:
432: public void testRejectDrop() {
433: DropTargetContext c = new DropTargetContext(dt);
434: c.rejectDrop();
435:
436: NotSerializable ns = new NotSerializable("test", 12);
437: DropTargetContextStub stub = new DropTargetContextStub(ns);
438: c.addNotify(stub);
439:
440: assertFalse(stub.rejectedDrop);
441: c.rejectDrop();
442: assertTrue(stub.rejectedDrop);
443: }
444:
445: public void testRejectDrag() {
446: DropTargetContext c = new DropTargetContext(dt);
447: c.rejectDrag();
448:
449: NotSerializable ns = new NotSerializable("test", 12);
450: DropTargetContextStub stub = new DropTargetContextStub(ns);
451: c.addNotify(stub);
452:
453: assertFalse(stub.rejectedDrag);
454: c.rejectDrag();
455: assertTrue(stub.rejectedDrag);
456: }
457:
458: public void testGetTargetActions() {
459: try {
460: DropTargetContext c = new DropTargetContext(null);
461: c.getTargetActions();
462: fail("NPE expected");
463: } catch (NullPointerException e) {
464: }
465:
466: DropTargetContext c = new DropTargetContext(dt);
467: assertEquals(dt.getDefaultActions(), c.getTargetActions());
468: dt.setDefaultActions(DnDConstants.ACTION_LINK);
469: assertEquals(dt.getDefaultActions(), c.getTargetActions());
470: dt.setDefaultActions(DnDConstants.ACTION_COPY_OR_MOVE);
471: assertEquals(dt.getDefaultActions(), c.getTargetActions());
472:
473: NotSerializable ns = new NotSerializable("test", 12);
474: DropTargetContextStub stub = new DropTargetContextStub(ns);
475: c.addNotify(stub);
476:
477: assertEquals(stub.getTargetActions(), c.getTargetActions());
478: stub.setTargetActions(DnDConstants.ACTION_LINK);
479: assertEquals(stub.getTargetActions(), c.getTargetActions());
480: stub.setTargetActions(DnDConstants.ACTION_NONE);
481: assertEquals(stub.getTargetActions(), c.getTargetActions());
482: }
483:
484: public void testSetTargetActions() {
485: try {
486: DropTargetContext c = new DropTargetContext(null);
487: c.setTargetActions(DnDConstants.ACTION_COPY_OR_MOVE);
488: fail("NPE expected");
489: } catch (NullPointerException e) {
490: }
491:
492: DropTargetContext c = new DropTargetContext(dt);
493: assertEquals(DnDConstants.ACTION_COPY_OR_MOVE, c
494: .getTargetActions());
495: assertEquals(DnDConstants.ACTION_COPY_OR_MOVE, dt
496: .getDefaultActions());
497:
498: c.setTargetActions(DnDConstants.ACTION_NONE);
499: assertEquals(DnDConstants.ACTION_NONE, dt.getDefaultActions());
500: assertEquals(DnDConstants.ACTION_NONE, c.getTargetActions());
501:
502: c.setTargetActions(DnDConstants.ACTION_LINK);
503: assertEquals(DnDConstants.ACTION_LINK, dt.getDefaultActions());
504: assertEquals(DnDConstants.ACTION_LINK, c.getTargetActions());
505:
506: NotSerializable ns = new NotSerializable("test", 12);
507: DropTargetContextStub stub = new DropTargetContextStub(ns);
508:
509: assertEquals(DnDConstants.ACTION_COPY_OR_MOVE, stub
510: .getTargetActions());
511:
512: c.addNotify(stub);
513:
514: assertEquals(DnDConstants.ACTION_COPY_OR_MOVE, stub
515: .getTargetActions());
516: assertEquals(DnDConstants.ACTION_COPY_OR_MOVE, c
517: .getTargetActions());
518: assertEquals(DnDConstants.ACTION_LINK, dt.getDefaultActions());
519:
520: c.setTargetActions(DnDConstants.ACTION_NONE);
521: assertEquals(DnDConstants.ACTION_NONE, dt.getDefaultActions());
522: assertEquals(DnDConstants.ACTION_NONE, c.getTargetActions());
523:
524: c.setTargetActions(DnDConstants.ACTION_LINK);
525: assertEquals(DnDConstants.ACTION_LINK, dt.getDefaultActions());
526: assertEquals(DnDConstants.ACTION_LINK, c.getTargetActions());
527: }
528:
529: }
|