< prev index next >

test/jdk/java/awt/print/RemotePrinterStatusRefresh/RemotePrinterStatusRefresh.java

Print this page




   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 8153732 8212202 8221263 8221412
  27  * @requires (os.family == "Windows")
  28  * @summary Windows remote printer changes do not reflect in lookupPrintServices()
  29  * @run main/manual RemotePrinterStatusRefresh
  30  */
  31 
  32 import java.awt.BorderLayout;
  33 import java.awt.Color;
  34 import java.awt.Component;
  35 import java.awt.GridLayout;
  36 import java.awt.event.ActionEvent;
  37 import java.awt.event.WindowAdapter;
  38 import java.awt.event.WindowEvent;
  39 import java.util.ArrayList;
  40 import java.util.Collections;
  41 import java.util.List;
  42 import java.util.concurrent.CountDownLatch;
  43 import javax.print.PrintService;
  44 import javax.print.PrintServiceLookup;
  45 import javax.swing.AbstractListModel;
  46 import javax.swing.BorderFactory;
  47 import javax.swing.Box;
  48 import javax.swing.BoxLayout;
  49 import javax.swing.DefaultListCellRenderer;
  50 import javax.swing.GroupLayout;
  51 import javax.swing.JButton;
  52 import javax.swing.JFrame;
  53 import javax.swing.JLabel;
  54 import javax.swing.JList;
  55 import javax.swing.JPanel;
  56 import javax.swing.JScrollPane;
  57 import javax.swing.JTextArea;
  58 import javax.swing.JTextField;
  59 import javax.swing.SwingUtilities;
  60 import javax.swing.Timer;
  61 
  62 import static javax.swing.BorderFactory.createTitledBorder;
  63 
  64 public class RemotePrinterStatusRefresh extends WindowAdapter {
  65 



  66     private static final long refreshTime = getRefreshTime();
  67 
  68     private static final long TIMEOUT = refreshTime * 4 + 60;
  69 
  70 
  71     private static final CountDownLatch latch = new CountDownLatch(1);
  72     private static volatile RemotePrinterStatusRefresh test;
  73 
  74     private volatile boolean testResult;
  75     private volatile boolean testTimedOut;
  76 
  77     private final JFrame frame;
  78 
  79     private JButton refreshButton;
  80     private JButton passButton;
  81     private JButton failButton;
  82 
  83     private final ServiceItemListModel beforeList;
  84     private final ServiceItemListModel afterList;
  85 


 164                     component.setForeground(Color.WHITE);
 165                     break;
 166                 case ADDED:
 167                     component.setBackground(Color.GREEN);
 168                     component.setForeground(Color.BLACK);
 169                     break;
 170                 case UNCHANGED:
 171                 default:
 172                     break;
 173             }
 174             return component;
 175         }
 176     }
 177 
 178     private static final String INSTRUCTIONS_TEXT =
 179             "Please follow the steps for this manual test:\n"
 180                     + "Step 0: \"Before\" list is populated with currently "
 181                     +          "configured printers.\n"
 182                     + "Step 1: Add or Remove a network printer using "
 183                     +          "Windows Control Panel.\n"
 184                     + "Step 2: Wait for 4 minutes after adding or removing.\n"
 185                     + "             \"Next printer refresh in\" gives you a "
 186                     +          "rough estimation on when update will happen.\n"
 187                     + "Step 3: Click Refresh."
 188                     +          "\"After\" list is populated with updated list "
 189                     +          "of printers.\n"
 190                     + "Step 4: Compare the list of printers in \"Before\" and "
 191                     +          "\"After\" lists.\n"
 192                     + "              Added printers are highlighted with "
 193                     +               "green color, removed ones \u2014 with "
 194                     +               "red color.\n"
 195                     + "Step 5: Click Pass if the list of printers is correctly "
 196                     +          "updated.\n"
 197                     + "Step 6: If the list is not updated, wait for another "
 198                     +          "4 minutes, and then click Refresh again.\n"
 199                     + "Step 7: If the list does not update, click Fail.\n"
 200                     + "\n"
 201                     + "You have to click Refresh to enable Pass and Fail buttons. "
 202                     + "If no button is pressed,\n"
 203                     + "the test will time out. "
 204                     + "Closing the window also fails the test.";
 205 
 206     public static void main(String[] args) throws Exception {
 207         SwingUtilities.invokeAndWait(RemotePrinterStatusRefresh::createUI);
 208 
 209         latch.await();
 210         if (!test.testResult) {
 211             throw new RuntimeException("Test failed"
 212                 + (test.testTimedOut ? " because of time out" : ""));
 213         }
 214     }
 215 
 216     private static long getRefreshTime() {
 217         String refreshTime =
 218                 System.getProperty("sun.java2d.print.minRefreshTime", "240");

 219         try {
 220             long value = Long.parseLong(refreshTime);
 221             return value < 240L ? 240L : value;
 222         } catch (NumberFormatException e) {
 223             return 240L;
 224         }
 225     }
 226 
 227     private static void createUI() {
 228         test = new RemotePrinterStatusRefresh();
 229     }
 230 
 231     private RemotePrinterStatusRefresh() {
 232         frame = new JFrame("RemotePrinterStatusRefresh");
 233         frame.addWindowListener(this);
 234 
 235 
 236         JPanel northPanel = new JPanel(new BorderLayout());
 237         northPanel.add(createInfoPanel(), BorderLayout.NORTH);
 238         northPanel.add(createInstructionsPanel(), BorderLayout.SOUTH);
 239 
 240 
 241         beforeList = new ServiceItemListModel(
 242                 Collections.unmodifiableList(collectPrinterList()));
 243         afterList = new ServiceItemListModel(new ArrayList<>());




   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 8153732 8212202 8221263 8221412 8222108
  27  * @requires (os.family == "Windows")
  28  * @summary Windows remote printer changes do not reflect in lookupPrintServices()
  29  * @run main/manual/othervm -Dsun.java2d.print.minRefreshTime=120 RemotePrinterStatusRefresh
  30  */
  31 
  32 import java.awt.BorderLayout;
  33 import java.awt.Color;
  34 import java.awt.Component;
  35 import java.awt.GridLayout;
  36 import java.awt.event.ActionEvent;
  37 import java.awt.event.WindowAdapter;
  38 import java.awt.event.WindowEvent;
  39 import java.util.ArrayList;
  40 import java.util.Collections;
  41 import java.util.List;
  42 import java.util.concurrent.CountDownLatch;
  43 import javax.print.PrintService;
  44 import javax.print.PrintServiceLookup;
  45 import javax.swing.AbstractListModel;
  46 import javax.swing.BorderFactory;
  47 import javax.swing.Box;
  48 import javax.swing.BoxLayout;
  49 import javax.swing.DefaultListCellRenderer;
  50 import javax.swing.GroupLayout;
  51 import javax.swing.JButton;
  52 import javax.swing.JFrame;
  53 import javax.swing.JLabel;
  54 import javax.swing.JList;
  55 import javax.swing.JPanel;
  56 import javax.swing.JScrollPane;
  57 import javax.swing.JTextArea;
  58 import javax.swing.JTextField;
  59 import javax.swing.SwingUtilities;
  60 import javax.swing.Timer;
  61 
  62 import static javax.swing.BorderFactory.createTitledBorder;
  63 
  64 public class RemotePrinterStatusRefresh extends WindowAdapter {
  65 
  66     private static final long DEFAULT_REFRESH_TIME = 240L;
  67     private static final long MINIMAL_REFRESH_TIME = 120L;
  68 
  69     private static final long refreshTime = getRefreshTime();
  70 
  71     private static final long TIMEOUT = refreshTime * 4 + 60;
  72 
  73 
  74     private static final CountDownLatch latch = new CountDownLatch(1);
  75     private static volatile RemotePrinterStatusRefresh test;
  76 
  77     private volatile boolean testResult;
  78     private volatile boolean testTimedOut;
  79 
  80     private final JFrame frame;
  81 
  82     private JButton refreshButton;
  83     private JButton passButton;
  84     private JButton failButton;
  85 
  86     private final ServiceItemListModel beforeList;
  87     private final ServiceItemListModel afterList;
  88 


 167                     component.setForeground(Color.WHITE);
 168                     break;
 169                 case ADDED:
 170                     component.setBackground(Color.GREEN);
 171                     component.setForeground(Color.BLACK);
 172                     break;
 173                 case UNCHANGED:
 174                 default:
 175                     break;
 176             }
 177             return component;
 178         }
 179     }
 180 
 181     private static final String INSTRUCTIONS_TEXT =
 182             "Please follow the steps for this manual test:\n"
 183                     + "Step 0: \"Before\" list is populated with currently "
 184                     +          "configured printers.\n"
 185                     + "Step 1: Add or Remove a network printer using "
 186                     +          "Windows Control Panel.\n"
 187                     + "Step 2: Wait for 2\u20134 minutes after adding or removing.\n"
 188                     + "             \"Next printer refresh in\" gives you a "
 189                     +          "rough estimation on when update will happen.\n"
 190                     + "Step 3: Click Refresh."
 191                     +          "\"After\" list is populated with updated list "
 192                     +          "of printers.\n"
 193                     + "Step 4: Compare the list of printers in \"Before\" and "
 194                     +          "\"After\" lists.\n"
 195                     + "              Added printers are highlighted with "
 196                     +               "green color, removed ones \u2014 with "
 197                     +               "red color.\n"
 198                     + "Step 5: Click Pass if the list of printers is correctly "
 199                     +          "updated.\n"
 200                     + "Step 6: If the list is not updated, wait for another "
 201                     +          "2\u20134 minutes, and then click Refresh again.\n"
 202                     + "Step 7: If the list does not update, click Fail.\n"
 203                     + "\n"
 204                     + "You have to click Refresh to enable Pass and Fail buttons. "
 205                     + "If no button is pressed,\n"
 206                     + "the test will time out. "
 207                     + "Closing the window also fails the test.";
 208 
 209     public static void main(String[] args) throws Exception {
 210         SwingUtilities.invokeAndWait(RemotePrinterStatusRefresh::createUI);
 211 
 212         latch.await();
 213         if (!test.testResult) {
 214             throw new RuntimeException("Test failed"
 215                 + (test.testTimedOut ? " because of time out" : ""));
 216         }
 217     }
 218 
 219     private static long getRefreshTime() {
 220         String refreshTime =
 221                 System.getProperty("sun.java2d.print.minRefreshTime",
 222                                    Long.toString(DEFAULT_REFRESH_TIME));
 223         try {
 224             long value = Long.parseLong(refreshTime);
 225             return value < MINIMAL_REFRESH_TIME ? MINIMAL_REFRESH_TIME : value;
 226         } catch (NumberFormatException e) {
 227             return DEFAULT_REFRESH_TIME;
 228         }
 229     }
 230 
 231     private static void createUI() {
 232         test = new RemotePrinterStatusRefresh();
 233     }
 234 
 235     private RemotePrinterStatusRefresh() {
 236         frame = new JFrame("RemotePrinterStatusRefresh");
 237         frame.addWindowListener(this);
 238 
 239 
 240         JPanel northPanel = new JPanel(new BorderLayout());
 241         northPanel.add(createInfoPanel(), BorderLayout.NORTH);
 242         northPanel.add(createInstructionsPanel(), BorderLayout.SOUTH);
 243 
 244 
 245         beforeList = new ServiceItemListModel(
 246                 Collections.unmodifiableList(collectPrinterList()));
 247         afterList = new ServiceItemListModel(new ArrayList<>());


< prev index next >