1 /** 2 * @test 3 * @bug 6430607 4 * @summary Test that we throw an exception for incorrect display modes 5 * @author Dmitri.Trembovetski@Sun.COM area=FullScreen 6 * @run main/othervm NonExistentDisplayModeTest 7 * @run main/othervm -Dsun.java2d.noddraw=true NonExistentDisplayModeTest 8 * @run main/othervm -Dsun.java2d.opengl=true NonExistentDisplayModeTest 9 */ 10 11 import java.awt.DisplayMode; 12 import java.awt.Frame; 13 import java.awt.GraphicsDevice; 14 import java.util.ArrayList; 15 import java.util.Random; 16 17 public class NonExistentDisplayModeTest { 18 19 public static void main(String[] args) { 20 new NonExistentDisplayModeTest().start(); 21 } 22 23 private void start() { 24 Frame f = new Frame("Testing, please wait.."); 25 f.pack(); 26 GraphicsDevice gd = f.getGraphicsConfiguration().getDevice(); 27 if (!gd.isFullScreenSupported()) { 28 System.out.println("Exclusive FS mode not supported, test passed."); 29 f.dispose(); 30 return; 31 } 32 33 gd.setFullScreenWindow(f); 34 if (!gd.isDisplayChangeSupported()) { 35 System.out.println("DisplayMode change not supported, test passed."); 36 return; 37 } 38 39 DisplayMode dms[] = gd.getDisplayModes(); 40 ArrayList<DisplayMode> dmList = new ArrayList<DisplayMode>(dms.length); 41 for (DisplayMode dm : dms) { 42 dmList.add(dm); 43 } 44 45 ArrayList<DisplayMode> nonExistentDms = createNonExistentDMList(dmList); 46 47 for (DisplayMode dm : nonExistentDms) { 48 boolean exThrown = false; 49 try { 50 System.out.printf("Testing mode: (%4dx%4d) depth=%3d rate=%d\n", 51 dm.getWidth(), dm.getHeight(), 52 dm.getBitDepth(), dm.getRefreshRate()); 53 gd.setDisplayMode(dm); 54 } catch (IllegalArgumentException e) { 55 exThrown = true; 56 } 57 if (!exThrown) { 58 gd.setFullScreenWindow(null); 59 f.dispose(); 60 throw new 61 RuntimeException("Failed: No exception thrown for dm "+dm); 62 } 63 } 64 gd.setFullScreenWindow(null); 65 f.dispose(); 66 System.out.println("Test passed."); 67 } 68 69 private static final Random rnd = new Random(); 70 private ArrayList<DisplayMode> 71 createNonExistentDMList(ArrayList<DisplayMode> dmList) 72 { 73 ArrayList<DisplayMode> newList = 74 new ArrayList<DisplayMode>(dmList.size()); 75 // vary one parameter at a time 76 int param = 0; 77 for (DisplayMode dm : dmList) { 78 param = ++param % 3; 79 switch (param) { 80 case 0: { 81 DisplayMode newDM = deriveSize(dm); 82 if (!dmList.contains(newDM)) { 83 newList.add(newDM); 84 } 85 break; 86 } 87 case 1: { 88 DisplayMode newDM = deriveDepth(dm); 89 if (!dmList.contains(newDM)) { 90 newList.add(newDM); 91 } 92 break; 93 } 94 case 2: { 95 DisplayMode newDM = deriveRR(dm); 96 if (!dmList.contains(newDM)) { 97 newList.add(newDM); 98 } 99 break; 100 } 101 } 102 } 103 return newList; 104 } 105 106 private static DisplayMode deriveSize(DisplayMode dm) { 107 int w = dm.getWidth() / 7; 108 int h = dm.getHeight() / 3; 109 return new DisplayMode(w, h, dm.getBitDepth(), dm.getRefreshRate()); 110 } 111 private static DisplayMode deriveRR(DisplayMode dm) { 112 return new DisplayMode(dm.getWidth(), dm.getHeight(), 113 dm.getBitDepth(), 777); 114 } 115 private static DisplayMode deriveDepth(DisplayMode dm) { 116 int depth; 117 if (dm.getBitDepth() == DisplayMode.BIT_DEPTH_MULTI) { 118 depth = 77; 119 } else { 120 depth = DisplayMode.BIT_DEPTH_MULTI; 121 } 122 return new DisplayMode(dm.getWidth(), dm.getHeight(), 123 depth, dm.getRefreshRate()); 124 } 125 }