1*b1cdbd2cSJim Jagielski /**************************************************************
2*b1cdbd2cSJim Jagielski  *
3*b1cdbd2cSJim Jagielski  * Licensed to the Apache Software Foundation (ASF) under one
4*b1cdbd2cSJim Jagielski  * or more contributor license agreements.  See the NOTICE file
5*b1cdbd2cSJim Jagielski  * distributed with this work for additional information
6*b1cdbd2cSJim Jagielski  * regarding copyright ownership.  The ASF licenses this file
7*b1cdbd2cSJim Jagielski  * to you under the Apache License, Version 2.0 (the
8*b1cdbd2cSJim Jagielski  * "License"); you may not use this file except in compliance
9*b1cdbd2cSJim Jagielski  * with the License.  You may obtain a copy of the License at
10*b1cdbd2cSJim Jagielski  *
11*b1cdbd2cSJim Jagielski  *   http://www.apache.org/licenses/LICENSE-2.0
12*b1cdbd2cSJim Jagielski  *
13*b1cdbd2cSJim Jagielski  * Unless required by applicable law or agreed to in writing,
14*b1cdbd2cSJim Jagielski  * software distributed under the License is distributed on an
15*b1cdbd2cSJim Jagielski  * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
16*b1cdbd2cSJim Jagielski  * KIND, either express or implied.  See the License for the
17*b1cdbd2cSJim Jagielski  * specific language governing permissions and limitations
18*b1cdbd2cSJim Jagielski  * under the License.
19*b1cdbd2cSJim Jagielski  *
20*b1cdbd2cSJim Jagielski  *************************************************************/
21*b1cdbd2cSJim Jagielski 
22*b1cdbd2cSJim Jagielski 
23*b1cdbd2cSJim Jagielski 
24*b1cdbd2cSJim Jagielski package ifc.datatransfer.clipboard;
25*b1cdbd2cSJim Jagielski 
26*b1cdbd2cSJim Jagielski import lib.MultiMethodTest;
27*b1cdbd2cSJim Jagielski import lib.StatusException;
28*b1cdbd2cSJim Jagielski 
29*b1cdbd2cSJim Jagielski import com.sun.star.datatransfer.DataFlavor;
30*b1cdbd2cSJim Jagielski import com.sun.star.datatransfer.XTransferable;
31*b1cdbd2cSJim Jagielski import com.sun.star.datatransfer.clipboard.ClipboardEvent;
32*b1cdbd2cSJim Jagielski import com.sun.star.datatransfer.clipboard.XClipboard;
33*b1cdbd2cSJim Jagielski import com.sun.star.datatransfer.clipboard.XClipboardListener;
34*b1cdbd2cSJim Jagielski import com.sun.star.datatransfer.clipboard.XClipboardNotifier;
35*b1cdbd2cSJim Jagielski import com.sun.star.datatransfer.clipboard.XClipboardOwner;
36*b1cdbd2cSJim Jagielski import com.sun.star.lang.EventObject;
37*b1cdbd2cSJim Jagielski import com.sun.star.uno.Type;
38*b1cdbd2cSJim Jagielski import com.sun.star.uno.UnoRuntime;
39*b1cdbd2cSJim Jagielski 
40*b1cdbd2cSJim Jagielski /**
41*b1cdbd2cSJim Jagielski * Testing <code>com.sun.star.datatransfer.clipboard.XClipboardNotifier</code>
42*b1cdbd2cSJim Jagielski * interface methods :
43*b1cdbd2cSJim Jagielski * <ul>
44*b1cdbd2cSJim Jagielski *  <li><code> addClipboardListener()</code></li>
45*b1cdbd2cSJim Jagielski *  <li><code> removeClipboardListener()</code></li>
46*b1cdbd2cSJim Jagielski * </ul> <p>
47*b1cdbd2cSJim Jagielski * The object <b>must also implement</b> <code>XClipboard</code>
48*b1cdbd2cSJim Jagielski * interface. <p>
49*b1cdbd2cSJim Jagielski * Test is <b> NOT </b> multithread compilant. <p>
50*b1cdbd2cSJim Jagielski * @see com.sun.star.datatransfer.clipboard.XClipboardNotifier
51*b1cdbd2cSJim Jagielski * @see com.sun.star.datatransfer.clipboard.XClipboard
52*b1cdbd2cSJim Jagielski */
53*b1cdbd2cSJim Jagielski public class _XClipboardNotifier extends MultiMethodTest {
54*b1cdbd2cSJim Jagielski 
55*b1cdbd2cSJim Jagielski     public XClipboardNotifier oObj;
56*b1cdbd2cSJim Jagielski 
57*b1cdbd2cSJim Jagielski     /**
58*b1cdbd2cSJim Jagielski      * <code>XClipboardOwner</code> interface implementation which
59*b1cdbd2cSJim Jagielski      * stores parameters passed to <code>lostOwnership</code> method.
60*b1cdbd2cSJim Jagielski      */
61*b1cdbd2cSJim Jagielski     class MyOwner implements XClipboardOwner {
62*b1cdbd2cSJim Jagielski         XClipboard board;
63*b1cdbd2cSJim Jagielski         XTransferable contents;
64*b1cdbd2cSJim Jagielski 
lostOwnership(XClipboard board, XTransferable contents)65*b1cdbd2cSJim Jagielski         public void lostOwnership(XClipboard board, XTransferable contents) {
66*b1cdbd2cSJim Jagielski             this.board = board;
67*b1cdbd2cSJim Jagielski             this.contents = contents;
68*b1cdbd2cSJim Jagielski         }
69*b1cdbd2cSJim Jagielski     }
70*b1cdbd2cSJim Jagielski 
71*b1cdbd2cSJim Jagielski     /**
72*b1cdbd2cSJim Jagielski      * Simpliest <code>XTransferable</code> interface implementation
73*b1cdbd2cSJim Jagielski      * which supports "text/htmp" data type.
74*b1cdbd2cSJim Jagielski      */
75*b1cdbd2cSJim Jagielski     class MyTransferable implements XTransferable {
76*b1cdbd2cSJim Jagielski         DataFlavor[] supportedFlavors;
77*b1cdbd2cSJim Jagielski 
MyTransferable()78*b1cdbd2cSJim Jagielski         public MyTransferable() {
79*b1cdbd2cSJim Jagielski             supportedFlavors = new DataFlavor[] {
80*b1cdbd2cSJim Jagielski                 new DataFlavor("text/plain", "Plain text", new Type(String.class))
81*b1cdbd2cSJim Jagielski             };
82*b1cdbd2cSJim Jagielski         }
83*b1cdbd2cSJim Jagielski 
getTransferData(DataFlavor dataFlavor)84*b1cdbd2cSJim Jagielski         public Object getTransferData(DataFlavor dataFlavor) {
85*b1cdbd2cSJim Jagielski             return "";
86*b1cdbd2cSJim Jagielski         }
87*b1cdbd2cSJim Jagielski 
getTransferDataFlavors()88*b1cdbd2cSJim Jagielski         public DataFlavor[] getTransferDataFlavors() {
89*b1cdbd2cSJim Jagielski             return supportedFlavors;
90*b1cdbd2cSJim Jagielski         }
91*b1cdbd2cSJim Jagielski 
isDataFlavorSupported(DataFlavor dataFlavor)92*b1cdbd2cSJim Jagielski         public boolean isDataFlavorSupported(DataFlavor dataFlavor) {
93*b1cdbd2cSJim Jagielski             return supportedFlavors[0].MimeType.equals(dataFlavor.MimeType);
94*b1cdbd2cSJim Jagielski         }
95*b1cdbd2cSJim Jagielski     }
96*b1cdbd2cSJim Jagielski 
97*b1cdbd2cSJim Jagielski     /**
98*b1cdbd2cSJim Jagielski      * Implementation of listener which registers its method calls.
99*b1cdbd2cSJim Jagielski      */
100*b1cdbd2cSJim Jagielski     class MyClipboardListener implements XClipboardListener {
101*b1cdbd2cSJim Jagielski         boolean called = false;
102*b1cdbd2cSJim Jagielski 
changedContents(ClipboardEvent evt)103*b1cdbd2cSJim Jagielski         public void changedContents(ClipboardEvent evt) {
104*b1cdbd2cSJim Jagielski             called = true;
105*b1cdbd2cSJim Jagielski         }
106*b1cdbd2cSJim Jagielski 
disposing(EventObject wvt)107*b1cdbd2cSJim Jagielski         public void disposing(EventObject wvt) {
108*b1cdbd2cSJim Jagielski             log.println("");
109*b1cdbd2cSJim Jagielski         }
110*b1cdbd2cSJim Jagielski     }
111*b1cdbd2cSJim Jagielski 
112*b1cdbd2cSJim Jagielski     MyClipboardListener myListener;
113*b1cdbd2cSJim Jagielski 
114*b1cdbd2cSJim Jagielski     /**
115*b1cdbd2cSJim Jagielski     * Adds a listener and put a new contents into clipboard. <p>
116*b1cdbd2cSJim Jagielski     * Has <b> OK </b> status if the listener was called on contents changing.
117*b1cdbd2cSJim Jagielski     */
_addClipboardListener()118*b1cdbd2cSJim Jagielski     public void _addClipboardListener() {
119*b1cdbd2cSJim Jagielski         oObj.addClipboardListener(myListener = new MyClipboardListener());
120*b1cdbd2cSJim Jagielski 
121*b1cdbd2cSJim Jagielski         XClipboard board = (XClipboard)UnoRuntime.queryInterface(
122*b1cdbd2cSJim Jagielski                 XClipboard.class, tEnv.getTestObject());
123*b1cdbd2cSJim Jagielski 
124*b1cdbd2cSJim Jagielski         board.setContents(new MyTransferable(), new MyOwner());
125*b1cdbd2cSJim Jagielski 
126*b1cdbd2cSJim Jagielski         log.println("sleeping for 1 second");
127*b1cdbd2cSJim Jagielski 
128*b1cdbd2cSJim Jagielski         try {
129*b1cdbd2cSJim Jagielski             Thread.sleep(1000);
130*b1cdbd2cSJim Jagielski         } catch (InterruptedException e) {
131*b1cdbd2cSJim Jagielski             log.println("interrupted");
132*b1cdbd2cSJim Jagielski             e.printStackTrace(log);
133*b1cdbd2cSJim Jagielski             throw new StatusException("Operation interrupted", e);
134*b1cdbd2cSJim Jagielski         }
135*b1cdbd2cSJim Jagielski 
136*b1cdbd2cSJim Jagielski         tRes.tested("addClipboardListener()", myListener.called);
137*b1cdbd2cSJim Jagielski     }
138*b1cdbd2cSJim Jagielski 
139*b1cdbd2cSJim Jagielski     /**
140*b1cdbd2cSJim Jagielski     * Removes the listener and put a new contents into clipboard. <p>
141*b1cdbd2cSJim Jagielski     * Has <b> OK </b> status if the listener was not called on contents
142*b1cdbd2cSJim Jagielski     * changing.
143*b1cdbd2cSJim Jagielski     * The following method tests are to be completed successfully before :
144*b1cdbd2cSJim Jagielski     * <ul>
145*b1cdbd2cSJim Jagielski     *  <li> <code>addClipboardListener()</code> </li>
146*b1cdbd2cSJim Jagielski     * </ul>
147*b1cdbd2cSJim Jagielski     */
_removeClipboardListener()148*b1cdbd2cSJim Jagielski     public void _removeClipboardListener() {
149*b1cdbd2cSJim Jagielski         try {
150*b1cdbd2cSJim Jagielski             requiredMethod("addClipboardListener()");
151*b1cdbd2cSJim Jagielski             myListener.called = false;
152*b1cdbd2cSJim Jagielski         } finally {
153*b1cdbd2cSJim Jagielski             oObj.removeClipboardListener(myListener);
154*b1cdbd2cSJim Jagielski         }
155*b1cdbd2cSJim Jagielski 
156*b1cdbd2cSJim Jagielski         XClipboard board = (XClipboard)UnoRuntime.queryInterface(
157*b1cdbd2cSJim Jagielski                 XClipboard.class, oObj);
158*b1cdbd2cSJim Jagielski 
159*b1cdbd2cSJim Jagielski         board.setContents(new MyTransferable(), new MyOwner());
160*b1cdbd2cSJim Jagielski 
161*b1cdbd2cSJim Jagielski         try {
162*b1cdbd2cSJim Jagielski             Thread.sleep(1000);
163*b1cdbd2cSJim Jagielski         } catch (InterruptedException e) {
164*b1cdbd2cSJim Jagielski             log.println("interrupted");
165*b1cdbd2cSJim Jagielski             e.printStackTrace(log);
166*b1cdbd2cSJim Jagielski             throw new StatusException("Operation interrupted", e);
167*b1cdbd2cSJim Jagielski         }
168*b1cdbd2cSJim Jagielski 
169*b1cdbd2cSJim Jagielski         tRes.tested("removeClipboardListener()", !myListener.called);
170*b1cdbd2cSJim Jagielski     }
171*b1cdbd2cSJim Jagielski }
172