Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
openanolis
dragonwell8_jdk
提交
ac3cfb46
D
dragonwell8_jdk
项目概览
openanolis
/
dragonwell8_jdk
通知
4
Star
2
Fork
0
代码
文件
提交
分支
Tags
贡献者
分支图
Diff
Issue
0
列表
看板
标记
里程碑
合并请求
0
Wiki
0
Wiki
分析
仓库
DevOps
项目成员
Pages
D
dragonwell8_jdk
项目概览
项目概览
详情
发布
仓库
仓库
文件
提交
分支
标签
贡献者
分支图
比较
Issue
0
Issue
0
列表
看板
标记
里程碑
合并请求
0
合并请求
0
Pages
分析
分析
仓库分析
DevOps
Wiki
0
Wiki
成员
成员
收起侧边栏
关闭侧边栏
动态
分支图
创建新Issue
提交
Issue看板
体验新版 GitCode,发现更多精彩内容 >>
提交
ac3cfb46
编写于
4月 15, 2008
作者:
D
dav
浏览文件
操作
浏览文件
下载
差异文件
Merge
上级
390da87f
fc376c98
变更
11
隐藏空白更改
内联
并排
Showing
11 changed file
with
1745 addition
and
126 deletion
+1745
-126
src/solaris/classes/sun/awt/X11/XListPeer.java
src/solaris/classes/sun/awt/X11/XListPeer.java
+100
-126
test/java/awt/Insets/WindowWithWarningTest/WindowWithWarningTest.html
...t/Insets/WindowWithWarningTest/WindowWithWarningTest.html
+20
-0
test/java/awt/Insets/WindowWithWarningTest/WindowWithWarningTest.java
...t/Insets/WindowWithWarningTest/WindowWithWarningTest.java
+315
-0
test/java/awt/List/ListFlickers/ListFlickers.java
test/java/awt/List/ListFlickers/ListFlickers.java
+402
-0
test/java/awt/TextField/ScrollSelectionTest/ScrollSelectionTest.html
...wt/TextField/ScrollSelectionTest/ScrollSelectionTest.html
+20
-0
test/java/awt/TextField/ScrollSelectionTest/ScrollSelectionTest.java
...wt/TextField/ScrollSelectionTest/ScrollSelectionTest.java
+213
-0
test/java/awt/xembed/server/JavaClient.java
test/java/awt/xembed/server/JavaClient.java
+126
-0
test/java/awt/xembed/server/RunTestXEmbed.java
test/java/awt/xembed/server/RunTestXEmbed.java
+176
-0
test/java/awt/xembed/server/TestXEmbedServer.java
test/java/awt/xembed/server/TestXEmbedServer.java
+228
-0
test/java/awt/xembed/server/TestXEmbedServerJava.java
test/java/awt/xembed/server/TestXEmbedServerJava.java
+86
-0
test/java/awt/xembed/server/TesterClient.java
test/java/awt/xembed/server/TesterClient.java
+59
-0
未找到文件。
src/solaris/classes/sun/awt/X11/XListPeer.java
浏览文件 @
ac3cfb46
/*
* Copyright 2003-200
7
Sun Microsystems, Inc. All Rights Reserved.
* Copyright 2003-200
8
Sun Microsystems, Inc. All Rights Reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
*
* This code is free software; you can redistribute it and/or modify it
...
...
@@ -55,14 +55,15 @@ class XListPeer extends XComponentPeer implements ListPeer, XScrollbarClient {
public
final
static
int
DEFAULT_VISIBLE_ROWS
=
4
;
// From java.awt.List,
public
final
static
int
HORIZ_SCROLL_AMT
=
10
;
final
static
int
PAINT_VSCROLL
=
2
,
PAINT_HSCROLL
=
4
,
PAINT_ITEMS
=
8
,
PAINT_FOCUS
=
16
,
PAINT_BACKGROUND
=
32
,
PAINT_HIDEFOCUS
=
64
,
PAINT_ALL
=
PAINT_VSCROLL
|
PAINT_HSCROLL
|
PAINT_ITEMS
|
PAINT_FOCUS
|
PAINT_BACKGROUND
;
private
final
static
int
PAINT_VSCROLL
=
2
;
private
final
static
int
PAINT_HSCROLL
=
4
;
private
final
static
int
PAINT_ITEMS
=
8
;
private
final
static
int
PAINT_FOCUS
=
16
;
private
final
static
int
PAINT_BACKGROUND
=
32
;
private
final
static
int
PAINT_HIDEFOCUS
=
64
;
private
final
static
int
PAINT_ALL
=
PAINT_VSCROLL
|
PAINT_HSCROLL
|
PAINT_ITEMS
|
PAINT_FOCUS
|
PAINT_BACKGROUND
;
private
final
static
int
COPY_AREA
=
128
;
XVerticalScrollbar
vsb
;
XHorizontalScrollbar
hsb
;
...
...
@@ -363,35 +364,6 @@ class XListPeer extends XComponentPeer implements ListPeer, XScrollbarClient {
}
}
Area
getItemsArea
(
int
firstItem
,
int
lastItem
)
{
firstItem
=
Math
.
max
(
getFirstVisibleItem
(),
firstItem
);
lastItem
=
Math
.
min
(
lastItem
,
getLastVisibleItem
());
if
(
lastItem
<
getFirstVisibleItem
())
{
return
new
Area
();
}
if
(
firstItem
<=
lastItem
)
{
int
startY
=
getItemY
(
firstItem
);
int
endY
=
getItemY
(
lastItem
)
+
getItemHeight
();
// Account for focus rectangle, instead should be called twice - before change
// of focusIndex and after
startY
-=
2
;
endY
+=
2
;
// x is 0 since we need to account for focus rectangle,
// the same with width
return
new
Area
(
new
Rectangle
(
0
,
startY
,
getItemWidth
()
+
3
,
endY
-
startY
+
1
));
}
else
{
return
new
Area
();
}
}
Rectangle
getItemRect
(
int
item
)
{
return
new
Rectangle
(
MARGIN
,
getItemY
(
item
),
getItemWidth
(),
getItemHeight
());
}
Area
getItemArea
(
int
item
)
{
return
new
Area
(
getItemRect
(
item
));
}
public
void
repaintScrollbarRequest
(
XScrollbar
scrollbar
)
{
Graphics
g
=
getGraphics
();
if
(
scrollbar
==
hsb
)
{
...
...
@@ -411,14 +383,36 @@ class XListPeer extends XComponentPeer implements ListPeer, XScrollbarClient {
repaint
(
getFirstVisibleItem
(),
getLastVisibleItem
(),
PAINT_ALL
);
}
p
ublic
void
repaint
(
int
options
)
{
p
rivate
void
repaint
(
int
options
)
{
repaint
(
getFirstVisibleItem
(),
getLastVisibleItem
(),
options
);
}
public
void
repaint
(
int
firstItem
,
int
lastItem
,
int
options
)
{
private
void
repaint
(
int
firstItem
,
int
lastItem
,
int
options
)
{
repaint
(
firstItem
,
lastItem
,
options
,
null
,
null
);
}
/**
* In most cases the entire area of the component doesn't have
* to be repainted. The method repaints the particular areas of
* the component. The areas to repaint is specified by the option
* parameter. The possible values of the option parameter are:
* PAINT_VSCROLL, PAINT_HSCROLL, PAINT_ITEMS, PAINT_FOCUS,
* PAINT_HIDEFOCUS, PAINT_BACKGROUND, PAINT_ALL, COPY_AREA.
*
* Note that the COPY_AREA value initiates copy of a source area
* of the component by a distance by means of the copyArea method
* of the Graphics class.
*
* @param firstItem the position of the first item of the range to repaint
* @param lastItem the position of the last item of the range to repaint
* @param options specifies the particular area of the component to repaint
* @param source the area of the component to copy
* @param distance the distance to copy the source area
*/
private
void
repaint
(
int
firstItem
,
int
lastItem
,
int
options
,
Rectangle
source
,
Point
distance
)
{
Graphics
g
=
getGraphics
();
try
{
painter
.
paint
(
g
,
firstItem
,
lastItem
,
options
);
painter
.
paint
(
g
,
firstItem
,
lastItem
,
options
,
source
,
distance
);
}
finally
{
g
.
dispose
();
}
...
...
@@ -1449,35 +1443,29 @@ class XListPeer extends XComponentPeer implements ListPeer, XScrollbarClient {
}
vsb
.
setValue
(
vsb
.
getValue
()
+
y
);
Rectangle
source
=
null
;
Point
distance
=
null
;
int
firstItem
=
0
,
lastItem
=
0
;
int
options
=
PAINT_HIDEFOCUS
|
PAINT_ITEMS
|
PAINT_VSCROLL
|
PAINT_FOCUS
;
if
(
y
>
0
)
{
// Fixed 6308295: XAWTduplicate list item is displayed
// Window resizing leads to the buffer flushing
// That's why the repainting with the PAINT_HIDEFOCUS option is the repainting with PAINT_ALL option
// So we should do only the repainting instead of the copy area
if
(
y
<
itemsInWin
&&
painter
.
isBuffer
())
{
if
(
log
.
isLoggable
(
Level
.
FINEST
))
{
log
.
finest
(
"Copying "
+
""
+
MARGIN
+
","
+
(
MARGIN
+
pixelsToScroll
)
+
","
+
(
width
-
SCROLLBAR_AREA
)
+
","
+
(
h
*
(
itemsInWin
-
y
)-
1
)
+
","
+
0
+
","
+
(-
pixelsToScroll
));
}
// Unpaint focus before copying
repaint
(
PAINT_HIDEFOCUS
);
painter
.
copyArea
(
MARGIN
,
MARGIN
+
pixelsToScroll
,
width
-
SCROLLBAR_AREA
,
h
*
(
itemsInWin
-
y
-
1
)-
1
,
0
,
-
pixelsToScroll
);
if
(
y
<
itemsInWin
)
{
source
=
new
Rectangle
(
MARGIN
,
MARGIN
+
pixelsToScroll
,
width
-
SCROLLBAR_AREA
,
h
*
(
itemsInWin
-
y
-
1
)-
1
);
distance
=
new
Point
(
0
,
-
pixelsToScroll
);
options
|=
COPY_AREA
;
}
repaint
(
vsb
.
getValue
()
+
(
itemsInWin
-
y
)-
1
,
(
vsb
.
getValue
()
+
itemsInWin
)
-
1
,
PAINT_ITEMS
|
PAINT_VSCROLL
|
PAINT_FOCUS
);
}
else
if
(
y
<
0
&&
painter
.
isBuffer
())
{
firstItem
=
vsb
.
getValue
()
+
itemsInWin
-
y
-
1
;
lastItem
=
vsb
.
getValue
()
+
itemsInWin
-
1
;
}
else
if
(
y
<
0
)
{
if
(
y
+
itemsInWindow
()
>
0
)
{
if
(
log
.
isLoggable
(
Level
.
FINEST
))
{
log
.
finest
(
"Copying "
+
MARGIN
+
","
+
MARGIN
+
","
+
(
width
-
SCROLLBAR_AREA
)
+
","
+
(
h
*
(
itemsInWin
+
y
))
+
","
+
"0"
+
","
+(-
pixelsToScroll
));
}
repaint
(
PAINT_HIDEFOCUS
);
painter
.
copyArea
(
MARGIN
,
MARGIN
,
width
-
SCROLLBAR_AREA
,
h
*
(
itemsInWin
+
y
),
0
,
-
pixelsToScroll
);
source
=
new
Rectangle
(
MARGIN
,
MARGIN
,
width
-
SCROLLBAR_AREA
,
h
*
(
itemsInWin
+
y
));
distance
=
new
Point
(
0
,
-
pixelsToScroll
);
options
|=
COPY_AREA
;
}
int
e
=
Math
.
min
(
getLastVisibleItem
(),
vsb
.
getValue
()
+
-
y
);
repaint
(
vsb
.
getValue
(),
e
,
PAINT_ITEMS
|
PAINT_VSCROLL
|
PAINT_FOCUS
);
firstItem
=
vsb
.
getValue
(
);
lastItem
=
Math
.
min
(
getLastVisibleItem
(),
vsb
.
getValue
()
+
-
y
);
}
repaint
(
firstItem
,
lastItem
,
options
,
source
,
distance
);
}
/**
...
...
@@ -1491,12 +1479,17 @@ class XListPeer extends XComponentPeer implements ListPeer, XScrollbarClient {
int
h
=
height
-
(
SCROLLBAR_AREA
+
(
2
*
MARGIN
));
hsb
.
setValue
(
hsb
.
getValue
()
+
x
);
if
(
x
<
0
&&
painter
.
isBuffer
())
{
painter
.
copyArea
(
MARGIN
+
SPACE
,
MARGIN
,
w
+
x
,
h
,
-
x
,
0
);
}
else
if
(
x
>
0
&&
painter
.
isBuffer
())
{
painter
.
copyArea
(
MARGIN
+
SPACE
+
x
,
MARGIN
,
w
-
x
,
h
,
-
x
,
0
);
Rectangle
source
=
null
;
Point
distance
=
null
;
if
(
x
<
0
)
{
source
=
new
Rectangle
(
MARGIN
+
SPACE
,
MARGIN
,
w
+
x
,
h
);
distance
=
new
Point
(-
x
,
0
);
}
else
if
(
x
>
0
)
{
source
=
new
Rectangle
(
MARGIN
+
SPACE
+
x
,
MARGIN
,
w
-
x
,
h
);
distance
=
new
Point
(-
x
,
0
);
}
repaint
(
vsb
.
getValue
(),
lastItemDisplayed
(),
PAINT_ITEMS
|
PAINT_HSCROLL
);
int
options
=
COPY_AREA
|
PAINT_ITEMS
|
PAINT_HSCROLL
;
repaint
(
vsb
.
getValue
(),
lastItemDisplayed
(),
options
,
source
,
distance
);
}
/**
...
...
@@ -1677,7 +1670,6 @@ class XListPeer extends XComponentPeer implements ListPeer, XScrollbarClient {
* Since we can't guarantee the sequence, use awtLock.
*/
class
ListPainter
{
// TODO: use VolatileImage
VolatileImage
buffer
;
Color
[]
colors
;
...
...
@@ -1746,6 +1738,11 @@ class XListPeer extends XComponentPeer implements ListPeer, XScrollbarClient {
}
private
void
paint
(
Graphics
listG
,
int
firstItem
,
int
lastItem
,
int
options
)
{
paint
(
listG
,
firstItem
,
lastItem
,
options
,
null
,
null
);
}
private
void
paint
(
Graphics
listG
,
int
firstItem
,
int
lastItem
,
int
options
,
Rectangle
source
,
Point
distance
)
{
if
(
log
.
isLoggable
(
Level
.
FINER
))
log
.
finer
(
"Repaint from "
+
firstItem
+
" to "
+
lastItem
+
" options "
+
options
);
if
(
firstItem
>
lastItem
)
{
int
t
=
lastItem
;
...
...
@@ -1773,17 +1770,34 @@ class XListPeer extends XComponentPeer implements ListPeer, XScrollbarClient {
invalidate
();
options
=
PAINT_ALL
;
continue
;
case
VolatileImage
.
IMAGE_RESTORED
:
options
=
PAINT_ALL
;
}
Graphics
g
=
localBuffer
.
createGraphics
();
// Note that the order of the following painting operations
// should not be modified
try
{
g
.
setFont
(
getFont
());
// hiding the focus rectangle must be done prior to copying
// area and so this is the first action to be performed
if
((
options
&
(
PAINT_HIDEFOCUS
))
!=
0
)
{
paintFocus
(
g
,
PAINT_HIDEFOCUS
);
}
/*
* The shift of the component contents occurs while someone
* scrolls the component, the only purpose of the shift is to
* increase the painting performance. The shift should be done
* prior to painting any area (except hiding focus) and actually
* it should never be done jointly with erase background.
*/
if
((
options
&
COPY_AREA
)
!=
0
)
{
g
.
copyArea
(
source
.
x
,
source
.
y
,
source
.
width
,
source
.
height
,
distance
.
x
,
distance
.
y
);
}
if
((
options
&
PAINT_BACKGROUND
)
!=
0
)
{
g
.
setColor
(
SystemColor
.
window
);
g
.
fillRect
(
0
,
0
,
width
,
height
);
g
.
setColor
(
getListBackground
());
g
.
fillRect
(
0
,
0
,
listWidth
,
listHeight
);
draw3DRect
(
g
,
getSystemColors
(),
0
,
0
,
listWidth
-
1
,
listHeight
-
1
,
false
);
paintBackground
(
g
);
// Since we made full erase update items
firstItem
=
getFirstVisibleItem
();
lastItem
=
getLastVisibleItem
();
...
...
@@ -1799,8 +1813,8 @@ class XListPeer extends XComponentPeer implements ListPeer, XScrollbarClient {
g
.
setClip
(
getHScrollBarRec
());
paintHorScrollbar
(
g
,
true
);
}
if
((
options
&
(
PAINT_FOCUS
|
PAINT_HIDEFOCUS
))
!=
0
)
{
paintFocus
(
g
,
options
);
if
((
options
&
(
PAINT_FOCUS
))
!=
0
)
{
paintFocus
(
g
,
PAINT_FOCUS
);
}
}
finally
{
g
.
dispose
();
...
...
@@ -1809,6 +1823,14 @@ class XListPeer extends XComponentPeer implements ListPeer, XScrollbarClient {
listG
.
drawImage
(
localBuffer
,
0
,
0
,
null
);
}
private
void
paintBackground
(
Graphics
g
)
{
g
.
setColor
(
SystemColor
.
window
);
g
.
fillRect
(
0
,
0
,
width
,
height
);
g
.
setColor
(
getListBackground
());
g
.
fillRect
(
0
,
0
,
listWidth
,
listHeight
);
draw3DRect
(
g
,
getSystemColors
(),
0
,
0
,
listWidth
-
1
,
listHeight
-
1
,
false
);
}
private
void
paintItems
(
Graphics
g
,
int
firstItem
,
int
lastItem
,
int
options
)
{
if
(
log
.
isLoggable
(
Level
.
FINER
))
log
.
finer
(
"Painting items from "
+
firstItem
+
" to "
+
lastItem
+
", focused "
+
focusIndex
+
", first "
+
getFirstVisibleItem
()
+
", last "
+
getLastVisibleItem
());
...
...
@@ -1932,53 +1954,5 @@ class XListPeer extends XComponentPeer implements ListPeer, XScrollbarClient {
}
g
.
setClip
(
clip
);
}
public
void
copyArea
(
int
x
,
int
y
,
int
width
,
int
height
,
int
dx
,
int
dy
)
{
if
(
log
.
isLoggable
(
Level
.
FINER
))
log
.
finer
(
"Copying area "
+
x
+
", "
+
y
+
" "
+
width
+
"x"
+
height
+
", ("
+
dx
+
","
+
dy
+
")"
);
VolatileImage
localBuffer
=
null
;
do
{
XToolkit
.
awtLock
();
try
{
if
(
createBuffer
())
{
// Newly created buffer should be painted over at full
repaint
(
PAINT_ALL
);
return
;
}
localBuffer
=
buffer
;
}
finally
{
XToolkit
.
awtUnlock
();
}
switch
(
localBuffer
.
validate
(
getGraphicsConfiguration
()))
{
case
VolatileImage
.
IMAGE_INCOMPATIBLE
:
invalidate
();
case
VolatileImage
.
IMAGE_RESTORED
:
// Since we've lost the content we can't just scroll - we should paint again
repaint
(
PAINT_ALL
);
return
;
}
Graphics
g
=
localBuffer
.
createGraphics
();
try
{
g
.
copyArea
(
x
,
y
,
width
,
height
,
dx
,
dy
);
}
finally
{
g
.
dispose
();
}
}
while
(
localBuffer
.
contentsLost
());
Graphics
listG
=
getGraphics
();
listG
.
setClip
(
x
,
y
,
width
,
height
);
listG
.
drawImage
(
localBuffer
,
0
,
0
,
null
);
listG
.
dispose
();
}
public
boolean
isBuffer
()
{
boolean
isBuffer
;
XToolkit
.
awtLock
();
try
{
isBuffer
=
(
buffer
!=
null
);
}
finally
{
XToolkit
.
awtUnlock
();
}
return
isBuffer
;
}
}
}
test/java/awt/Insets/WindowWithWarningTest/WindowWithWarningTest.html
0 → 100644
浏览文件 @
ac3cfb46
<html>
<!--
@test
@bug 6391770
@summary Content of the Window should be laid out in the area left after WarningWindow was added.
@author Yuri Nesterenko
@run applet WindowWithWarningTest.html
-->
<head>
<title>
WindowWithWarningTest
</title>
</head>
<pre>
This test will run automatically.
</pre>
<body>
<applet
code=
"WindowWithWarningTest.class"
width=
350
height=
300
></applet>
</body>
</html>
test/java/awt/Insets/WindowWithWarningTest/WindowWithWarningTest.java
0 → 100644
浏览文件 @
ac3cfb46
/*
* Copyright 2006-2008 Sun Microsystems, Inc. All Rights Reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
*
* This code is free software; you can redistribute it and/or modify it
* under the terms of the GNU General Public License version 2 only, as
* published by the Free Software Foundation.
*
* This code is distributed in the hope that it will be useful, but WITHOUT
* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
* FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
* version 2 for more details (a copy is included in the LICENSE file that
* accompanied this code).
*
* You should have received a copy of the GNU General Public License version
* 2 along with this work; if not, write to the Free Software Foundation,
* Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
*
* Please contact Sun Microsystems, Inc., 4150 Network Circle, Santa Clara,
* CA 95054 USA or visit www.sun.com if you need additional information or
* have any questions.
*/
/*
test
@bug 6391770
@summary Content of the Window should be laid out in the area left after WarningWindow was added.
@author yuri nesterenko: area=
@run applet WindowWithWarningTest.html
*/
// Note there is no @ in front of test above. This is so that the
// harness will not mistake this file as a test file. It should
// only see the html file as a test file. (the harness runs all
// valid test files, so it would run this test twice if this file
// were valid as well as the html file.)
// Also, note the area= after Your Name in the author tag. Here, you
// should put which functional area the test falls in. See the
// AWT-core home page -> test areas and/or -> AWT team for a list of
// areas.
// Note also the 'AutomaticAppletTest.html' in the run tag. This should
// be changed to the name of the test.
/**
* WindowWithWarningTest.java
*
* summary:
*/
import
java.applet.Applet
;
import
java.awt.*
;
import
java.awt.event.*
;
import
javax.swing.*
;
//Automated tests should run as applet tests if possible because they
// get their environments cleaned up, including AWT threads, any
// test created threads, and any system resources used by the test
// such as file descriptors. (This is normally not a problem as
// main tests usually run in a separate VM, however on some platforms
// such as the Mac, separate VMs are not possible and non-applet
// tests will cause problems). Also, you don't have to worry about
// synchronisation stuff in Applet tests they way you do in main
// tests...
public
class
WindowWithWarningTest
extends
Applet
{
//Declare things used in the test, like buttons and labels here
boolean
buttonClicked
=
false
;
public
static
final
int
MAX_COUNT
=
100
;
public
void
init
()
{
//Create instructions for the user here, as well as set up
// the environment -- set the layout manager, add buttons,
// etc.
this
.
setLayout
(
new
BorderLayout
());
String
[]
instructions
=
{
"This is an AUTOMATIC test"
,
"simply wait until it is done"
};
//Sysout.createDialog( );
//Sysout.printInstructions( instructions );
}
//End init()
public
void
start
()
{
//Get things going. Request focus, set size, et cetera
System
.
setSecurityManager
(
new
SecurityManager
()
{
// deny AWTPermission("showWindowWithoutWarningBanner")
public
boolean
checkTopLevelWindow
(
Object
window
)
{
return
false
;
}
});
JFrame
frame
=
new
JFrame
(
"Window Test"
);
frame
.
setBounds
(
50
,
50
,
200
,
200
);
frame
.
show
();
JWindow
window
=
new
JWindow
(
frame
);
JButton
jbutton1
=
new
JButton
(
"First"
);
jbutton1
.
addMouseListener
(
new
MouseAdapter
()
{
public
void
mousePressed
(
MouseEvent
me
)
{
buttonClicked
=
true
;
}
});
JButton
jbutton2
=
new
JButton
(
"Second"
);
window
.
setLocation
(
300
,
300
);
window
.
add
(
"North"
,
jbutton1
);
window
.
add
(
"South"
,
jbutton2
);
window
.
pack
();
window
.
show
();
//wait for frame to show:
getLocation
(
frame
);
window
.
toFront
();
Dimension
size0
=
window
.
getSize
();
Dimension
size1
=
null
;
try
{
Robot
robot
=
new
Robot
();
robot
.
delay
(
500
);
window
.
pack
();
robot
.
delay
(
500
);
window
.
pack
();
// size1 must be the same as size0
size1
=
window
.
getSize
();
robot
.
delay
(
500
);
Point
pt
=
jbutton1
.
getLocationOnScreen
();
robot
.
mouseMove
((
int
)
jbutton1
.
getLocationOnScreen
().
x
+
jbutton1
.
getWidth
()
/
2
,
(
int
)
jbutton1
.
getLocationOnScreen
().
y
+
jbutton1
.
getHeight
()
/
2
);
robot
.
delay
(
500
);
robot
.
mousePress
(
MouseEvent
.
BUTTON1_MASK
);
robot
.
delay
(
100
);
robot
.
mouseRelease
(
MouseEvent
.
BUTTON1_MASK
);
robot
.
delay
(
2000
);
}
catch
(
Exception
e
)
{
throw
new
RuntimeException
(
"Exception "
+
e
);
}
if
(
!
size0
.
equals
(
size1
)
)
{
throw
new
RuntimeException
(
"Wrong Window size after multiple pack()s"
);
}
if
(
!
buttonClicked
)
{
throw
new
RuntimeException
(
"Button was not clicked"
);
}
window
.
dispose
();
frame
.
dispose
();
System
.
out
.
println
(
"Test Passed."
);
}
// start()
public
static
Point
getLocation
(
Component
co
)
throws
RuntimeException
{
Point
pt
=
null
;
boolean
bFound
=
false
;
int
count
=
0
;
while
(
!
bFound
)
{
try
{
pt
=
co
.
getLocationOnScreen
();
bFound
=
true
;
}
catch
(
Exception
ex
)
{
bFound
=
false
;
count
++;
}
if
(
!
bFound
&&
count
>
MAX_COUNT
)
{
throw
new
RuntimeException
(
"don't see a component to get location"
);
}
}
return
pt
;
}
}
// class AutomaticAppletTest
/****************************************************
Standard Test Machinery
DO NOT modify anything below -- it's a standard
chunk of code whose purpose is to make user
interaction uniform, and thereby make it simpler
to read and understand someone else's test.
****************************************************/
/**
This is part of the standard test machinery.
It creates a dialog (with the instructions), and is the interface
for sending text messages to the user.
To print the instructions, send an array of strings to Sysout.createDialog
WithInstructions method. Put one line of instructions per array entry.
To display a message for the tester to see, simply call Sysout.println
with the string to be displayed.
This mimics System.out.println but works within the test harness as well
as standalone.
*/
class
Sysout
{
private
static
TestDialog
dialog
;
public
static
void
createDialogWithInstructions
(
String
[]
instructions
)
{
dialog
=
new
TestDialog
(
new
Frame
(),
"Instructions"
);
dialog
.
printInstructions
(
instructions
);
dialog
.
setVisible
(
true
);
println
(
"Any messages for the tester will display here."
);
}
public
static
void
createDialog
(
)
{
dialog
=
new
TestDialog
(
new
Frame
(),
"Instructions"
);
String
[]
defInstr
=
{
"Instructions will appear here. "
,
""
}
;
dialog
.
printInstructions
(
defInstr
);
dialog
.
setVisible
(
true
);
println
(
"Any messages for the tester will display here."
);
}
public
static
void
printInstructions
(
String
[]
instructions
)
{
dialog
.
printInstructions
(
instructions
);
}
public
static
void
println
(
String
messageIn
)
{
dialog
.
displayMessage
(
messageIn
);
}
}
// Sysout class
/**
This is part of the standard test machinery. It provides a place for the
test instructions to be displayed, and a place for interactive messages
to the user to be displayed.
To have the test instructions displayed, see Sysout.
To have a message to the user be displayed, see Sysout.
Do not call anything in this dialog directly.
*/
class
TestDialog
extends
Dialog
{
TextArea
instructionsText
;
TextArea
messageText
;
int
maxStringLength
=
80
;
//DO NOT call this directly, go through Sysout
public
TestDialog
(
Frame
frame
,
String
name
)
{
super
(
frame
,
name
);
int
scrollBoth
=
TextArea
.
SCROLLBARS_BOTH
;
instructionsText
=
new
TextArea
(
""
,
15
,
maxStringLength
,
scrollBoth
);
add
(
"North"
,
instructionsText
);
messageText
=
new
TextArea
(
""
,
5
,
maxStringLength
,
scrollBoth
);
add
(
"Center"
,
messageText
);
pack
();
show
();
}
// TestDialog()
//DO NOT call this directly, go through Sysout
public
void
printInstructions
(
String
[]
instructions
)
{
//Clear out any current instructions
instructionsText
.
setText
(
""
);
//Go down array of instruction strings
String
printStr
,
remainingStr
;
for
(
int
i
=
0
;
i
<
instructions
.
length
;
i
++
)
{
//chop up each into pieces maxSringLength long
remainingStr
=
instructions
[
i
];
while
(
remainingStr
.
length
()
>
0
)
{
//if longer than max then chop off first max chars to print
if
(
remainingStr
.
length
()
>=
maxStringLength
)
{
//Try to chop on a word boundary
int
posOfSpace
=
remainingStr
.
lastIndexOf
(
' '
,
maxStringLength
-
1
);
if
(
posOfSpace
<=
0
)
posOfSpace
=
maxStringLength
-
1
;
printStr
=
remainingStr
.
substring
(
0
,
posOfSpace
+
1
);
remainingStr
=
remainingStr
.
substring
(
posOfSpace
+
1
);
}
//else just print
else
{
printStr
=
remainingStr
;
remainingStr
=
""
;
}
instructionsText
.
append
(
printStr
+
"\n"
);
}
// while
}
// for
}
//printInstructions()
//DO NOT call this directly, go through Sysout
public
void
displayMessage
(
String
messageIn
)
{
messageText
.
append
(
messageIn
+
"\n"
);
System
.
out
.
println
(
messageIn
);
}
}
// TestDialog class
test/java/awt/List/ListFlickers/ListFlickers.java
0 → 100644
浏览文件 @
ac3cfb46
/*
* Copyright 2008 Sun Microsystems, Inc. All Rights Reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
*
* This code is free software; you can redistribute it and/or modify it
* under the terms of the GNU General Public License version 2 only, as
* published by the Free Software Foundation.
*
* This code is distributed in the hope that it will be useful, but WITHOUT
* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
* FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
* version 2 for more details (a copy is included in the LICENSE file that
* accompanied this code).
*
* You should have received a copy of the GNU General Public License version
* 2 along with this work; if not, write to the Free Software Foundation,
* Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
*
* Please contact Sun Microsystems, Inc., 4150 Network Circle, Santa Clara,
* CA 95054 USA or visit www.sun.com if you need additional information or
* have any questions.
*/
/*
@test
@bug 6471693
@summary Moving the vertical scroll bar of List leads flickering.
@author Dmitry Cherepanov area=awt.list
@run main/manual ListFlickers
*/
import
java.awt.*
;
import
java.awt.event.*
;
public
class
ListFlickers
{
//*** test-writer defined static variables go here ***
private
static
void
init
()
{
//*** Create instructions for the user here ***
String
[]
instructions
=
{
"drag the scrollbar of the list up and down,"
,
"if the list flickers then the test fails,"
,
"otherwise it passes."
};
Sysout
.
createDialog
(
);
Sysout
.
printInstructions
(
instructions
);
Frame
f
=
new
Frame
();
List
list
=
new
List
(
10
,
false
);
for
(
int
i
=
0
;
i
<
100
;
i
++)
{
list
.
add
(
" item "
+
i
);
}
f
.
add
(
list
);
f
.
setBounds
(
100
,
100
,
300
,
300
);
f
.
setVisible
(
true
);
}
//End init()
/*****************************************************
* Standard Test Machinery Section
* DO NOT modify anything in this section -- it's a
* standard chunk of code which has all of the
* synchronisation necessary for the test harness.
* By keeping it the same in all tests, it is easier
* to read and understand someone else's test, as
* well as insuring that all tests behave correctly
* with the test harness.
* There is a section following this for test-defined
* classes
******************************************************/
private
static
boolean
theTestPassed
=
false
;
private
static
boolean
testGeneratedInterrupt
=
false
;
private
static
String
failureMessage
=
""
;
private
static
Thread
mainThread
=
null
;
private
static
int
sleepTime
=
300000
;
public
static
void
main
(
String
args
[]
)
throws
InterruptedException
{
mainThread
=
Thread
.
currentThread
();
try
{
init
();
}
catch
(
TestPassedException
e
)
{
//The test passed, so just return from main and harness will
// interepret this return as a pass
return
;
}
//At this point, neither test passed nor test failed has been
// called -- either would have thrown an exception and ended the
// test, so we know we have multiple threads.
//Test involves other threads, so sleep and wait for them to
// called pass() or fail()
try
{
Thread
.
sleep
(
sleepTime
);
//Timed out, so fail the test
throw
new
RuntimeException
(
"Timed out after "
+
sleepTime
/
1000
+
" seconds"
);
}
catch
(
InterruptedException
e
)
{
if
(
!
testGeneratedInterrupt
)
throw
e
;
//reset flag in case hit this code more than once for some reason (just safety)
testGeneratedInterrupt
=
false
;
if
(
theTestPassed
==
false
)
{
throw
new
RuntimeException
(
failureMessage
);
}
}
}
//main
public
static
synchronized
void
setTimeoutTo
(
int
seconds
)
{
sleepTime
=
seconds
*
1000
;
}
public
static
synchronized
void
pass
()
{
Sysout
.
println
(
"The test passed."
);
Sysout
.
println
(
"The test is over, hit Ctl-C to stop Java VM"
);
//first check if this is executing in main thread
if
(
mainThread
==
Thread
.
currentThread
()
)
{
//Still in the main thread, so set the flag just for kicks,
// and throw a test passed exception which will be caught
// and end the test.
theTestPassed
=
true
;
throw
new
TestPassedException
();
}
//pass was called from a different thread, so set the flag and interrupt
// the main thead.
theTestPassed
=
true
;
testGeneratedInterrupt
=
true
;
if
(
mainThread
!=
null
){
mainThread
.
interrupt
();
}
}
//pass()
public
static
synchronized
void
fail
()
{
//test writer didn't specify why test failed, so give generic
fail
(
"it just plain failed! :-)"
);
}
public
static
synchronized
void
fail
(
String
whyFailed
)
{
Sysout
.
println
(
"The test failed: "
+
whyFailed
);
Sysout
.
println
(
"The test is over, hit Ctl-C to stop Java VM"
);
//check if this called from main thread
if
(
mainThread
==
Thread
.
currentThread
()
)
{
//If main thread, fail now 'cause not sleeping
throw
new
RuntimeException
(
whyFailed
);
}
theTestPassed
=
false
;
testGeneratedInterrupt
=
true
;
failureMessage
=
whyFailed
;
mainThread
.
interrupt
();
}
//fail()
}
// class ManualMainTest
//This exception is used to exit from any level of call nesting
// when it's determined that the test has passed, and immediately
// end the test.
class
TestPassedException
extends
RuntimeException
{
}
//*********** End Standard Test Machinery Section **********
//************ Begin classes defined for the test ****************
// make listeners in a class defined here, and instantiate them in init()
/* Example of a class which may be written as part of a test
class NewClass implements anInterface
{
static int newVar = 0;
public void eventDispatched(AWTEvent e)
{
//Counting events to see if we get enough
eventCount++;
if( eventCount == 20 )
{
//got enough events, so pass
ManualMainTest.pass();
}
else if( tries == 20 )
{
//tried too many times without getting enough events so fail
ManualMainTest.fail();
}
}// eventDispatched()
}// NewClass class
*/
//************** End classes defined for the test *******************
/****************************************************
Standard Test Machinery
DO NOT modify anything below -- it's a standard
chunk of code whose purpose is to make user
interaction uniform, and thereby make it simpler
to read and understand someone else's test.
****************************************************/
/**
This is part of the standard test machinery.
It creates a dialog (with the instructions), and is the interface
for sending text messages to the user.
To print the instructions, send an array of strings to Sysout.createDialog
WithInstructions method. Put one line of instructions per array entry.
To display a message for the tester to see, simply call Sysout.println
with the string to be displayed.
This mimics System.out.println but works within the test harness as well
as standalone.
*/
class
Sysout
{
private
static
TestDialog
dialog
;
private
static
boolean
numbering
=
false
;
private
static
int
messageNumber
=
0
;
public
static
void
createDialogWithInstructions
(
String
[]
instructions
)
{
dialog
=
new
TestDialog
(
new
Frame
(),
"Instructions"
);
dialog
.
printInstructions
(
instructions
);
dialog
.
setVisible
(
true
);
println
(
"Any messages for the tester will display here."
);
}
public
static
void
createDialog
(
)
{
dialog
=
new
TestDialog
(
new
Frame
(),
"Instructions"
);
String
[]
defInstr
=
{
"Instructions will appear here. "
,
""
}
;
dialog
.
printInstructions
(
defInstr
);
dialog
.
setVisible
(
true
);
println
(
"Any messages for the tester will display here."
);
}
/* Enables message counting for the tester. */
public
static
void
enableNumbering
(
boolean
enable
){
numbering
=
enable
;
}
public
static
void
printInstructions
(
String
[]
instructions
)
{
dialog
.
printInstructions
(
instructions
);
}
public
static
void
println
(
String
messageIn
)
{
if
(
numbering
)
{
messageIn
=
""
+
messageNumber
+
" "
+
messageIn
;
messageNumber
++;
}
dialog
.
displayMessage
(
messageIn
);
}
}
// Sysout class
/**
This is part of the standard test machinery. It provides a place for the
test instructions to be displayed, and a place for interactive messages
to the user to be displayed.
To have the test instructions displayed, see Sysout.
To have a message to the user be displayed, see Sysout.
Do not call anything in this dialog directly.
*/
class
TestDialog
extends
Dialog
implements
ActionListener
{
TextArea
instructionsText
;
TextArea
messageText
;
int
maxStringLength
=
80
;
Panel
buttonP
=
new
Panel
();
Button
passB
=
new
Button
(
"pass"
);
Button
failB
=
new
Button
(
"fail"
);
//DO NOT call this directly, go through Sysout
public
TestDialog
(
Frame
frame
,
String
name
)
{
super
(
frame
,
name
);
int
scrollBoth
=
TextArea
.
SCROLLBARS_BOTH
;
instructionsText
=
new
TextArea
(
""
,
15
,
maxStringLength
,
scrollBoth
);
add
(
"North"
,
instructionsText
);
messageText
=
new
TextArea
(
""
,
5
,
maxStringLength
,
scrollBoth
);
add
(
"Center"
,
messageText
);
passB
=
new
Button
(
"pass"
);
passB
.
setActionCommand
(
"pass"
);
passB
.
addActionListener
(
this
);
buttonP
.
add
(
"East"
,
passB
);
failB
=
new
Button
(
"fail"
);
failB
.
setActionCommand
(
"fail"
);
failB
.
addActionListener
(
this
);
buttonP
.
add
(
"West"
,
failB
);
add
(
"South"
,
buttonP
);
pack
();
setVisible
(
true
);
}
// TestDialog()
//DO NOT call this directly, go through Sysout
public
void
printInstructions
(
String
[]
instructions
)
{
//Clear out any current instructions
instructionsText
.
setText
(
""
);
//Go down array of instruction strings
String
printStr
,
remainingStr
;
for
(
int
i
=
0
;
i
<
instructions
.
length
;
i
++
)
{
//chop up each into pieces maxSringLength long
remainingStr
=
instructions
[
i
];
while
(
remainingStr
.
length
()
>
0
)
{
//if longer than max then chop off first max chars to print
if
(
remainingStr
.
length
()
>=
maxStringLength
)
{
//Try to chop on a word boundary
int
posOfSpace
=
remainingStr
.
lastIndexOf
(
' '
,
maxStringLength
-
1
);
if
(
posOfSpace
<=
0
)
posOfSpace
=
maxStringLength
-
1
;
printStr
=
remainingStr
.
substring
(
0
,
posOfSpace
+
1
);
remainingStr
=
remainingStr
.
substring
(
posOfSpace
+
1
);
}
//else just print
else
{
printStr
=
remainingStr
;
remainingStr
=
""
;
}
instructionsText
.
append
(
printStr
+
"\n"
);
}
// while
}
// for
}
//printInstructions()
//DO NOT call this directly, go through Sysout
public
void
displayMessage
(
String
messageIn
)
{
messageText
.
append
(
messageIn
+
"\n"
);
System
.
out
.
println
(
messageIn
);
}
//catch presses of the passed and failed buttons.
//simply call the standard pass() or fail() static methods of
//ManualMainTest
public
void
actionPerformed
(
ActionEvent
e
)
{
if
(
e
.
getActionCommand
()
==
"pass"
)
{
ListFlickers
.
pass
();
}
else
{
ListFlickers
.
fail
();
}
}
}
// TestDialog class
test/java/awt/TextField/ScrollSelectionTest/ScrollSelectionTest.html
0 → 100644
浏览文件 @
ac3cfb46
<html>
<!--
@test
@bug 4118621
@summary tests that selected text isn't scrolled if there is enough room.
@author prs: area=TextField
@run applet/manual=yesno ScrollSelectionTest.html
-->
<head>
<title>
ScrollSelectionTest
</title>
</head>
<body>
<h1>
ScrollSelectionTest
<br>
4118621:
</h1>
<p>
See the dialog box (usually in upper left corner) for instructions
</p>
<APPLET
CODE=
"ScrollSelectionTest.class"
WIDTH=
300
HEIGHT=
300
></APPLET>
</body>
</html>
test/java/awt/TextField/ScrollSelectionTest/ScrollSelectionTest.java
0 → 100644
浏览文件 @
ac3cfb46
/*
* Copyright 1999-2008 Sun Microsystems, Inc. All Rights Reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
*
* This code is free software; you can redistribute it and/or modify it
* under the terms of the GNU General Public License version 2 only, as
* published by the Free Software Foundation.
*
* This code is distributed in the hope that it will be useful, but WITHOUT
* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
* FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
* version 2 for more details (a copy is included in the LICENSE file that
* accompanied this code).
*
* You should have received a copy of the GNU General Public License version
* 2 along with this work; if not, write to the Free Software Foundation,
* Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
*
* Please contact Sun Microsystems, Inc., 4150 Network Circle, Santa Clara,
* CA 95054 USA or visit www.sun.com if you need additional information or
* have any questions.
*/
/*
test
@bug 4118621
@summary tests that selected text isn't scrolled when there is enough room.
@author prs: area=TextField
@run applet/manual=yesno ScrollSelectionTest.html
*/
/**
* ScrollSelectionTest.java
*
* summary: tests that selected text isn't scrolled when there is enough room.
*/
import
java.applet.Applet
;
import
java.awt.Dialog
;
import
java.awt.Frame
;
import
java.awt.TextField
;
import
java.awt.TextArea
;
public
class
ScrollSelectionTest
extends
Applet
{
Frame
frame
=
new
Frame
(
"ScrollSelectionTest frame"
);
TextField
tf
=
new
TextField
(
40
);
public
void
init
()
{
tf
.
setText
(
"abcdefghijklmnopqrstuvwxyz"
);
frame
.
add
(
tf
);
tf
.
select
(
0
,
20
);
String
[]
instructions
=
{
"INSTRUCTIONS:"
,
"This is a test for a win32 specific problem"
,
"If you see all the letters from 'a' to 'z' and"
,
"letters from 'a' to 't' are selected then test passes"
};
Sysout
.
createDialogWithInstructions
(
instructions
);
}
// init()
public
void
start
()
{
setSize
(
300
,
300
);
setVisible
(
true
);
frame
.
setVisible
(
true
);
frame
.
setBounds
(
400
,
0
,
300
,
300
);
}
// start()
}
// class ScrollSelectionTest
/****************************************************
Standard Test Machinery
DO NOT modify anything below -- it's a standard
chunk of code whose purpose is to make user
interaction uniform, and thereby make it simpler
to read and understand someone else's test.
****************************************************/
/**
This is part of the standard test machinery.
It creates a dialog (with the instructions), and is the interface
for sending text messages to the user.
To print the instructions, send an array of strings to Sysout.createDialog
WithInstructions method. Put one line of instructions per array entry.
To display a message for the tester to see, simply call Sysout.println
with the string to be displayed.
This mimics System.out.println but works within the test harness as well
as standalone.
*/
class
Sysout
{
private
static
TestDialog
dialog
;
public
static
void
createDialogWithInstructions
(
String
[]
instructions
)
{
dialog
=
new
TestDialog
(
new
Frame
(),
"Instructions"
);
dialog
.
printInstructions
(
instructions
);
dialog
.
show
();
println
(
"Any messages for the tester will display here."
);
}
public
static
void
createDialog
(
)
{
dialog
=
new
TestDialog
(
new
Frame
(),
"Instructions"
);
String
[]
defInstr
=
{
"Instructions will appear here. "
,
""
}
;
dialog
.
printInstructions
(
defInstr
);
dialog
.
show
();
println
(
"Any messages for the tester will display here."
);
}
public
static
void
printInstructions
(
String
[]
instructions
)
{
dialog
.
printInstructions
(
instructions
);
}
public
static
void
println
(
String
messageIn
)
{
dialog
.
displayMessage
(
messageIn
);
}
}
// Sysout class
/**
This is part of the standard test machinery. It provides a place for the
test instructions to be displayed, and a place for interactive messages
to the user to be displayed.
To have the test instructions displayed, see Sysout.
To have a message to the user be displayed, see Sysout.
Do not call anything in this dialog directly.
*/
class
TestDialog
extends
Dialog
{
TextArea
instructionsText
;
TextArea
messageText
;
int
maxStringLength
=
80
;
//DO NOT call this directly, go through Sysout
public
TestDialog
(
Frame
frame
,
String
name
)
{
super
(
frame
,
name
);
int
scrollBoth
=
TextArea
.
SCROLLBARS_BOTH
;
instructionsText
=
new
TextArea
(
""
,
15
,
maxStringLength
,
scrollBoth
);
add
(
"North"
,
instructionsText
);
messageText
=
new
TextArea
(
""
,
5
,
maxStringLength
,
scrollBoth
);
add
(
"South"
,
messageText
);
pack
();
show
();
}
// TestDialog()
//DO NOT call this directly, go through Sysout
public
void
printInstructions
(
String
[]
instructions
)
{
//Clear out any current instructions
instructionsText
.
setText
(
""
);
//Go down array of instruction strings
String
printStr
,
remainingStr
;
for
(
int
i
=
0
;
i
<
instructions
.
length
;
i
++
)
{
//chop up each into pieces maxSringLength long
remainingStr
=
instructions
[
i
];
while
(
remainingStr
.
length
()
>
0
)
{
//if longer than max then chop off first max chars to print
if
(
remainingStr
.
length
()
>=
maxStringLength
)
{
//Try to chop on a word boundary
int
posOfSpace
=
remainingStr
.
lastIndexOf
(
' '
,
maxStringLength
-
1
);
if
(
posOfSpace
<=
0
)
posOfSpace
=
maxStringLength
-
1
;
printStr
=
remainingStr
.
substring
(
0
,
posOfSpace
+
1
);
remainingStr
=
remainingStr
.
substring
(
posOfSpace
+
1
);
}
//else just print
else
{
printStr
=
remainingStr
;
remainingStr
=
""
;
}
instructionsText
.
append
(
printStr
+
"\n"
);
}
// while
}
// for
}
//printInstructions()
//DO NOT call this directly, go through Sysout
public
void
displayMessage
(
String
messageIn
)
{
messageText
.
append
(
messageIn
+
"\n"
);
}
}
// TestDialog class
test/java/awt/xembed/server/JavaClient.java
0 → 100644
浏览文件 @
ac3cfb46
/*
* Copyright 2004-2008 Sun Microsystems, Inc. All Rights Reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
*
* This code is free software; you can redistribute it and/or modify it
* under the terms of the GNU General Public License version 2 only, as
* published by the Free Software Foundation.
*
* This code is distributed in the hope that it will be useful, but WITHOUT
* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
* FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
* version 2 for more details (a copy is included in the LICENSE file that
* accompanied this code).
*
* You should have received a copy of the GNU General Public License version
* 2 along with this work; if not, write to the Free Software Foundation,
* Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
*
* Please contact Sun Microsystems, Inc., 4150 Network Circle, Santa Clara,
* CA 95054 USA or visit www.sun.com if you need additional information or
* have any questions.
*/
import
java.awt.*
;
import
sun.awt.*
;
import
java.awt.event.*
;
import
java.lang.reflect.*
;
import
java.awt.dnd.*
;
import
java.awt.datatransfer.*
;
public
class
JavaClient
{
ClientContainer
cont
;
public
static
void
main
(
String
[]
args
)
{
if
(
System
.
getProperty
(
"os.name"
).
toLowerCase
().
startsWith
(
"win"
))
{
return
;
}
// Enable testing extensions in XEmbed server
System
.
setProperty
(
"sun.awt.xembed.testing"
,
"true"
);
boolean
xtoolkit
=
"sun.awt.X11.XToolkit"
.
equals
(
Toolkit
.
getDefaultToolkit
().
getClass
().
getName
());
final
EmbeddedFrame
ef
=
createEmbeddedFrame
(
xtoolkit
,
Long
.
parseLong
(
args
[
0
]));
ef
.
setBackground
(
new
Color
(
100
,
100
,
200
));
ef
.
setLayout
(
new
BorderLayout
());
ef
.
add
(
new
ClientContainer
(
ef
),
BorderLayout
.
CENTER
);
ef
.
pack
();
ef
.
registerListeners
();
ef
.
setVisible
(
true
);
}
private
static
EmbeddedFrame
createEmbeddedFrame
(
boolean
xtoolkit
,
long
window
)
{
try
{
Class
cl
=
(
xtoolkit
?
Class
.
forName
(
"sun.awt.X11.XEmbeddedFrame"
):
Class
.
forName
(
"sun.awt.motif.MEmbeddedFrame"
));
Constructor
cons
=
cl
.
getConstructor
(
new
Class
[]{
Long
.
TYPE
,
Boolean
.
TYPE
});
return
(
EmbeddedFrame
)
cons
.
newInstance
(
new
Object
[]
{
window
,
true
});
}
catch
(
Exception
e
)
{
e
.
printStackTrace
();
throw
new
RuntimeException
(
"Can't create embedded frame"
);
}
}
}
class
ClientContainer
extends
Container
{
Window
parent
;
int
width
,
height
;
public
ClientContainer
(
Window
w
)
{
parent
=
w
;
width
=
500
;
height
=
50
;
final
TextField
tf
=
new
TextField
(
30
);
DragSource
ds
=
new
DragSource
();
final
DragSourceListener
dsl
=
new
DragSourceAdapter
()
{
public
void
dragDropEnd
(
DragSourceDropEvent
dsde
)
{
}
};
final
DragGestureListener
dgl
=
new
DragGestureListener
()
{
public
void
dragGestureRecognized
(
DragGestureEvent
dge
)
{
dge
.
startDrag
(
null
,
new
StringSelection
(
tf
.
getText
()),
dsl
);
}
};
ds
.
createDefaultDragGestureRecognizer
(
tf
,
DnDConstants
.
ACTION_COPY
,
dgl
);
final
DropTargetListener
dtl
=
new
DropTargetAdapter
()
{
public
void
drop
(
DropTargetDropEvent
dtde
)
{
dtde
.
acceptDrop
(
DnDConstants
.
ACTION_COPY
);
try
{
tf
.
setText
(
tf
.
getText
()
+
(
String
)
dtde
.
getTransferable
().
getTransferData
(
DataFlavor
.
stringFlavor
));
}
catch
(
Exception
e
)
{
}
}
};
final
DropTarget
dt
=
new
DropTarget
(
tf
,
dtl
);
setLayout
(
new
FlowLayout
());
add
(
tf
);
Button
close
=
new
Button
(
"Close"
);
close
.
addActionListener
(
new
ActionListener
()
{
public
void
actionPerformed
(
ActionEvent
e
)
{
parent
.
dispose
();
}
});
Button
inc
=
new
Button
(
"Increase size"
);
inc
.
addActionListener
(
new
ActionListener
()
{
public
void
actionPerformed
(
ActionEvent
e
)
{
changeSize
(
10
);
}
});
Button
dec
=
new
Button
(
"Decrease size"
);
dec
.
addActionListener
(
new
ActionListener
()
{
public
void
actionPerformed
(
ActionEvent
e
)
{
changeSize
(-
10
);
}
});
add
(
close
);
add
(
inc
);
add
(
dec
);
}
void
changeSize
(
int
step
)
{
width
+=
step
;
height
+=
step
;
parent
.
pack
();
}
public
Dimension
getPreferredSize
()
{
return
new
Dimension
(
width
,
height
);
}
}
test/java/awt/xembed/server/RunTestXEmbed.java
0 → 100644
浏览文件 @
ac3cfb46
/*
* Copyright 2004-2008 Sun Microsystems, Inc. All Rights Reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
*
* This code is free software; you can redistribute it and/or modify it
* under the terms of the GNU General Public License version 2 only, as
* published by the Free Software Foundation.
*
* This code is distributed in the hope that it will be useful, but WITHOUT
* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
* FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
* version 2 for more details (a copy is included in the LICENSE file that
* accompanied this code).
*
* You should have received a copy of the GNU General Public License version
* 2 along with this work; if not, write to the Free Software Foundation,
* Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
*
* Please contact Sun Microsystems, Inc., 4150 Network Circle, Santa Clara,
* CA 95054 USA or visit www.sun.com if you need additional information or
* have any questions.
*/
/**
* @test
* @bug 4931668
* @summary Tests XEmbed server/client functionality
* @author Denis Mikhalkin: area=awt.xembed
* @compile JavaClient.java TesterClient.java TestXEmbedServer.java
* @run main/timeout=6000 RunTestXEmbed
*/
import
java.awt.Rectangle
;
import
java.lang.reflect.Method
;
import
java.util.logging.*
;
import
java.util.*
;
import
java.io.*
;
public
class
RunTestXEmbed
extends
TestXEmbedServer
{
private
static
final
Logger
log
=
Logger
.
getLogger
(
"test.xembed"
);
private
Method
test
;
private
boolean
passed
=
false
;
public
RunTestXEmbed
(
Method
test
)
{
super
(
false
);
this
.
test
=
test
;
}
public
Process
startClient
(
Rectangle
bounds
[],
long
window
)
{
try
{
String
java_home
=
System
.
getProperty
(
"java.home"
);
StringBuilder
buf
=
new
StringBuilder
();
for
(
int
i
=
0
;
i
<
bounds
.
length
;
i
++)
{
buf
.
append
(
" "
+
bounds
[
i
].
x
);
buf
.
append
(
" "
+
bounds
[
i
].
y
);
buf
.
append
(
" "
+
bounds
[
i
].
width
);
buf
.
append
(
" "
+
bounds
[
i
].
height
);
}
Map
envs
=
System
.
getenv
();
String
enva
[]
=
new
String
[
envs
.
size
()];
int
ind
=
0
;
Iterator
iter
=
envs
.
entrySet
().
iterator
();
while
(
iter
.
hasNext
())
{
Map
.
Entry
entry
=
(
Map
.
Entry
)
iter
.
next
();
if
(!
"AWT_TOOLKIT"
.
equals
(
entry
.
getKey
()))
{
enva
[
ind
++]
=
entry
.
getKey
()
+
"="
+
entry
.
getValue
();
}
else
{
enva
[
ind
++]
=
"AWT_TOOLKIT=sun.awt.X11.XToolkit"
;
}
}
Process
proc
=
Runtime
.
getRuntime
().
exec
(
java_home
+
"/bin/java -Dawt.toolkit=sun.awt.X11.XToolkit TesterClient "
+
test
.
getName
()
+
" "
+
window
+
buf
,
enva
);
System
.
err
.
println
(
"Test for "
+
test
.
getName
()
+
" has started."
);
log
.
fine
(
"Test for "
+
test
.
getName
()
+
" has started."
);
new
InputReader
(
proc
.
getInputStream
());
new
InputReader
(
proc
.
getErrorStream
());
try
{
passed
=
(
proc
.
waitFor
()
==
0
);
}
catch
(
InterruptedException
ie
)
{
}
log
.
fine
(
"Test for "
+
test
.
getName
()
+
" has finished."
);
File
logFile
=
new
File
(
"java3.txt"
);
if
(
logFile
.
exists
())
{
logFile
.
renameTo
(
new
File
(
test
.
getName
()
+
".txt"
));
}
return
proc
;
}
catch
(
IOException
ex1
)
{
ex1
.
printStackTrace
();
}
return
null
;
}
public
static
void
main
(
String
[]
args
)
throws
Throwable
{
if
(
System
.
getProperty
(
"os.name"
).
toLowerCase
().
startsWith
(
"win"
))
{
return
;
}
// Enabled XEmbed
System
.
setProperty
(
"sun.awt.xembedserver"
,
"true"
);
if
(
args
.
length
==
1
)
{
Class
cl
=
Class
.
forName
(
"sun.awt.X11.XEmbedServerTester"
);
Method
meth
=
cl
.
getMethod
(
args
[
0
],
new
Class
[
0
]);
System
.
err
.
println
(
"Performing single test "
+
args
[
0
]);
boolean
res
=
performTest
(
meth
);
if
(!
res
)
{
System
.
err
.
println
(
"Test "
+
args
[
0
]
+
" has failed"
);
}
else
{
System
.
err
.
println
(
"Test "
+
args
[
0
]
+
" has passed"
);
}
}
else
{
Class
cl
=
Class
.
forName
(
"sun.awt.X11.XEmbedServerTester"
);
Method
[]
meths
=
cl
.
getMethods
();
LinkedList
failed
=
new
LinkedList
();
for
(
int
i
=
0
;
i
<
meths
.
length
;
i
++)
{
Method
meth
=
meths
[
i
];
if
(
meth
.
getReturnType
()
==
Void
.
TYPE
&&
meth
.
getName
().
startsWith
(
"test"
)
&&
meth
.
getParameterTypes
().
length
==
0
)
{
System
.
err
.
println
(
"Performing "
+
meth
.
getName
());
boolean
res
=
performTest
(
meth
);
if
(!
res
)
{
failed
.
add
(
meth
);
}
}
}
log
.
info
(
"Testing finished."
);
if
(
failed
.
size
()
!=
0
)
{
System
.
err
.
println
(
"Some tests have failed:"
);
Iterator
iter
=
failed
.
iterator
();
while
(
iter
.
hasNext
())
{
Method
meth
=
(
Method
)
iter
.
next
();
System
.
err
.
println
(
meth
.
getName
());
}
throw
new
RuntimeException
(
"TestFAILED: some of the testcases are failed"
);
}
else
{
System
.
err
.
println
(
"All PASSED"
);
}
}
}
private
static
boolean
performTest
(
Method
meth
)
{
RunTestXEmbed
test
=
new
RunTestXEmbed
(
meth
);
test
.
addClient
();
test
.
dispose
();
return
test
.
isPassed
();
}
public
boolean
isPassed
()
{
return
passed
;
}
}
class
InputReader
extends
Thread
{
private
InputStream
stream
;
public
InputReader
(
InputStream
stream
)
{
this
.
stream
=
stream
;
start
();
}
public
void
run
()
{
while
(!
interrupted
())
{
try
{
int
inp
=
stream
.
read
();
if
(
inp
!=
-
1
)
{
System
.
out
.
write
(
inp
);
}
else
{
try
{
Thread
.
sleep
(
100
);
}
catch
(
Exception
iie
)
{
}
}
}
catch
(
IOException
ie
)
{
break
;
}
}
}
}
test/java/awt/xembed/server/TestXEmbedServer.java
0 → 100644
浏览文件 @
ac3cfb46
/*
* Copyright 2004-2008 Sun Microsystems, Inc. All Rights Reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
*
* This code is free software; you can redistribute it and/or modify it
* under the terms of the GNU General Public License version 2 only, as
* published by the Free Software Foundation.
*
* This code is distributed in the hope that it will be useful, but WITHOUT
* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
* FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
* version 2 for more details (a copy is included in the LICENSE file that
* accompanied this code).
*
* You should have received a copy of the GNU General Public License version
* 2 along with this work; if not, write to the Free Software Foundation,
* Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
*
* Please contact Sun Microsystems, Inc., 4150 Network Circle, Santa Clara,
* CA 95054 USA or visit www.sun.com if you need additional information or
* have any questions.
*/
import
java.awt.*
;
import
java.awt.event.*
;
import
javax.swing.*
;
import
java.io.*
;
import
java.util.logging.*
;
import
sun.awt.WindowIDProvider
;
import
java.awt.dnd.*
;
import
java.awt.datatransfer.*
;
public
abstract
class
TestXEmbedServer
{
private
static
final
Logger
log
=
Logger
.
getLogger
(
"test.xembed"
);
Frame
f
;
Canvas
client
;
Button
toFocus
;
Button
b_modal
;
JButton
b_close
;
JDialog
modal_d
;
JFrame
dummy
;
Container
clientCont
;
boolean
passed
;
public
boolean
isPassed
()
{
return
passed
;
}
public
TestXEmbedServer
(
boolean
manual
)
{
// Enable testing extensions in XEmbed server
System
.
setProperty
(
"sun.awt.xembed.testing"
,
"true"
);
f
=
new
Frame
(
"Main frame"
);
f
.
addWindowListener
(
new
WindowAdapter
()
{
public
void
windowClosing
(
WindowEvent
e
)
{
synchronized
(
TestXEmbedServer
.
this
)
{
TestXEmbedServer
.
this
.
notifyAll
();
}
dummy
.
dispose
();
f
.
dispose
();
}
});
f
.
setLayout
(
new
BorderLayout
());
Container
bcont
=
new
Container
();
toFocus
=
new
Button
(
"Click to focus server"
);
final
TextField
tf
=
new
TextField
(
20
);
tf
.
setName
(
"0"
);
DragSource
ds
=
new
DragSource
();
final
DragSourceListener
dsl
=
new
DragSourceAdapter
()
{
public
void
dragDropEnd
(
DragSourceDropEvent
dsde
)
{
}
};
final
DragGestureListener
dgl
=
new
DragGestureListener
()
{
public
void
dragGestureRecognized
(
DragGestureEvent
dge
)
{
dge
.
startDrag
(
null
,
new
StringSelection
(
tf
.
getText
()),
dsl
);
}
};
ds
.
createDefaultDragGestureRecognizer
(
tf
,
DnDConstants
.
ACTION_COPY
,
dgl
);
final
DropTargetListener
dtl
=
new
DropTargetAdapter
()
{
public
void
drop
(
DropTargetDropEvent
dtde
)
{
dtde
.
acceptDrop
(
DnDConstants
.
ACTION_COPY
);
try
{
tf
.
setText
(
tf
.
getText
()
+
(
String
)
dtde
.
getTransferable
().
getTransferData
(
DataFlavor
.
stringFlavor
));
}
catch
(
Exception
e
)
{
}
}
};
final
DropTarget
dt
=
new
DropTarget
(
tf
,
dtl
);
Button
b_add
=
new
Button
(
"Add client"
);
b_add
.
addActionListener
(
new
ActionListener
()
{
public
void
actionPerformed
(
ActionEvent
e
)
{
addClient
();
}
});
Button
b_remove
=
new
Button
(
"Remove client"
);
b_remove
.
addActionListener
(
new
ActionListener
()
{
public
void
actionPerformed
(
ActionEvent
e
)
{
if
(
clientCont
.
getComponentCount
()
!=
0
)
{
clientCont
.
remove
(
clientCont
.
getComponentCount
()-
1
);
}
}
});
b_close
=
new
JButton
(
"Close modal dialog"
);
b_close
.
addActionListener
(
new
ActionListener
()
{
public
void
actionPerformed
(
ActionEvent
e
)
{
modal_d
.
dispose
();
}
});
b_modal
=
new
Button
(
"Show modal dialog"
);
b_modal
.
addActionListener
(
new
ActionListener
()
{
public
void
actionPerformed
(
ActionEvent
e
)
{
modal_d
=
new
JDialog
(
f
,
"Modal dialog"
,
true
);
modal_d
.
setDefaultCloseOperation
(
WindowConstants
.
DISPOSE_ON_CLOSE
);
modal_d
.
setBounds
(
0
,
100
,
200
,
50
);
modal_d
.
getContentPane
().
add
(
b_close
);
modal_d
.
validate
();
modal_d
.
show
();
}
});
bcont
.
add
(
tf
);
bcont
.
add
(
toFocus
);
bcont
.
add
(
b_add
);
bcont
.
add
(
b_remove
);
bcont
.
add
(
b_modal
);
if
(
manual
)
{
Button
pass
=
new
Button
(
"Pass"
);
pass
.
addActionListener
(
new
ActionListener
()
{
public
void
actionPerformed
(
ActionEvent
e
)
{
passed
=
true
;
synchronized
(
TestXEmbedServer
.
this
)
{
TestXEmbedServer
.
this
.
notifyAll
();
}
}
});
bcont
.
add
(
pass
);
Button
fail
=
new
Button
(
"Fail"
);
fail
.
addActionListener
(
new
ActionListener
()
{
public
void
actionPerformed
(
ActionEvent
e
)
{
passed
=
false
;
synchronized
(
TestXEmbedServer
.
this
)
{
TestXEmbedServer
.
this
.
notifyAll
();
}
}
});
bcont
.
add
(
fail
);
}
b_modal
.
setName
(
"2"
);
bcont
.
setLayout
(
new
FlowLayout
());
f
.
add
(
bcont
,
BorderLayout
.
NORTH
);
clientCont
=
Box
.
createVerticalBox
();
f
.
add
(
clientCont
,
BorderLayout
.
CENTER
);
dummy
=
new
JFrame
(
"Dummy"
);
dummy
.
getContentPane
().
add
(
new
JButton
(
"Button"
));
dummy
.
setDefaultCloseOperation
(
WindowConstants
.
DISPOSE_ON_CLOSE
);
dummy
.
setBounds
(
0
,
0
,
100
,
100
);
dummy
.
setVisible
(
true
);
f
.
setBounds
(
300
,
0
,
800
,
300
);
f
.
setVisible
(
true
);
}
public
abstract
Process
startClient
(
Rectangle
bounds
[],
long
window
);
public
void
addClient
()
{
client
=
new
Canvas
()
{
public
void
paint
(
Graphics
g
)
{
super
.
paint
(
g
);
}
};
client
.
setBackground
(
new
Color
(
30
,
220
,
40
));
clientCont
.
add
(
client
);
clientCont
.
validate
();
WindowIDProvider
pid
=
(
WindowIDProvider
)
client
.
getPeer
();
log
.
fine
(
"Added XEmbed server(Canvas) with X window ID "
+
pid
.
getWindow
());
Rectangle
toFocusBounds
=
toFocus
.
getBounds
();
toFocusBounds
.
setLocation
(
toFocus
.
getLocationOnScreen
());
f
.
validate
();
// KDE doesn't accept clicks on title as activation - click below title
Rectangle
fbounds
=
f
.
getBounds
();
fbounds
.
y
+=
f
.
getInsets
().
top
;
fbounds
.
height
-=
f
.
getInsets
().
top
;
Process
proc
=
startClient
(
new
Rectangle
[]
{
fbounds
,
dummy
.
getBounds
(),
toFocusBounds
,
new
Rectangle
(
b_modal
.
getLocationOnScreen
(),
b_modal
.
getSize
()),
new
Rectangle
(
10
,
130
,
20
,
20
)},
pid
.
getWindow
());
new
ClientWatcher
(
client
,
proc
,
clientCont
).
start
();
}
public
void
dispose
()
{
f
.
dispose
();
f
=
null
;
dummy
.
dispose
();
dummy
=
null
;
if
(
modal_d
!=
null
)
{
modal_d
.
dispose
();
modal_d
=
null
;
}
}
}
class
ClientWatcher
extends
Thread
{
private
Process
clientProcess
;
private
Canvas
client
;
private
Container
parent
;
public
ClientWatcher
(
Canvas
client
,
Process
proc
,
Container
parent
)
{
this
.
client
=
client
;
this
.
clientProcess
=
proc
;
this
.
parent
=
parent
;
}
public
void
run
()
{
try
{
clientProcess
.
waitFor
();
}
catch
(
InterruptedException
ie
)
{
}
parent
.
remove
(
client
);
}
}
test/java/awt/xembed/server/TestXEmbedServerJava.java
0 → 100644
浏览文件 @
ac3cfb46
/*
* Copyright 2004-2008 Sun Microsystems, Inc. All Rights Reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
*
* This code is free software; you can redistribute it and/or modify it
* under the terms of the GNU General Public License version 2 only, as
* published by the Free Software Foundation.
*
* This code is distributed in the hope that it will be useful, but WITHOUT
* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
* FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
* version 2 for more details (a copy is included in the LICENSE file that
* accompanied this code).
*
* You should have received a copy of the GNU General Public License version
* 2 along with this work; if not, write to the Free Software Foundation,
* Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
*
* Please contact Sun Microsystems, Inc., 4150 Network Circle, Santa Clara,
* CA 95054 USA or visit www.sun.com if you need additional information or
* have any questions.
*/
/**
* @test
* @bug 4931668
* @summary Tests XEmbed server/client functionality
* @author denis mikhalkin: area=awt.xembed
* @compile JavaClient.java TesterClient.java TestXEmbedServer.java
* @run main/manual TestXEmbedServerJava
*/
import
java.awt.*
;
import
java.awt.event.*
;
import
javax.swing.*
;
import
java.io.*
;
public
class
TestXEmbedServerJava
extends
TestXEmbedServer
{
public
static
void
main
(
String
[]
args
)
{
if
(
System
.
getProperty
(
"os.name"
).
toLowerCase
().
startsWith
(
"win"
))
{
return
;
}
// Enabled XEmbed
System
.
setProperty
(
"sun.awt.xembedserver"
,
"true"
);
String
instruction
=
"This is a manual test for XEmbed server functionality. \n"
+
"You may start XEmbed client by pressing 'Add client' button.\n"
+
"Check that focus transfer with mouse works, that focus traversal with Tab/Shift-Tab works.\n"
+
"Check that XEmbed server client's growing and shrinking.\n"
+
"Check that Drag&Drop works in all combinations.\n"
+
"Check the keyboard input works in both text fields.\n"
;
Frame
f
=
new
Frame
(
"Instructions"
);
f
.
setLayout
(
new
BorderLayout
());
f
.
add
(
new
TextArea
(
instruction
),
BorderLayout
.
CENTER
);
f
.
pack
();
f
.
setLocation
(
0
,
400
);
f
.
setVisible
(
true
);
TestXEmbedServerJava
lock
=
new
TestXEmbedServerJava
();
try
{
synchronized
(
lock
)
{
lock
.
wait
();
}
}
catch
(
InterruptedException
e
)
{
}
if
(!
lock
.
isPassed
())
{
throw
new
RuntimeException
(
"Test failed"
);
}
}
public
TestXEmbedServerJava
()
{
super
(
true
);
}
public
Process
startClient
(
Rectangle
[]
bounds
,
long
window
)
{
try
{
String
java_home
=
System
.
getProperty
(
"java.home"
);
return
Runtime
.
getRuntime
().
exec
(
java_home
+
"/bin/java JavaClient "
+
window
);
}
catch
(
IOException
ex1
)
{
ex1
.
printStackTrace
();
}
return
null
;
}
}
test/java/awt/xembed/server/TesterClient.java
0 → 100644
浏览文件 @
ac3cfb46
/*
* Copyright 2004-2008 Sun Microsystems, Inc. All Rights Reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
*
* This code is free software; you can redistribute it and/or modify it
* under the terms of the GNU General Public License version 2 only, as
* published by the Free Software Foundation.
*
* This code is distributed in the hope that it will be useful, but WITHOUT
* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
* FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
* version 2 for more details (a copy is included in the LICENSE file that
* accompanied this code).
*
* You should have received a copy of the GNU General Public License version
* 2 along with this work; if not, write to the Free Software Foundation,
* Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
*
* Please contact Sun Microsystems, Inc., 4150 Network Circle, Santa Clara,
* CA 95054 USA or visit www.sun.com if you need additional information or
* have any questions.
*/
import
java.lang.reflect.*
;
import
java.awt.Rectangle
;
import
java.util.logging.*
;
public
class
TesterClient
{
private
static
final
Logger
log
=
Logger
.
getLogger
(
"test.xembed.TesterClient"
);
private
static
Method
test
;
private
static
boolean
passed
=
false
;
public
static
void
main
(
String
[]
args
)
throws
Throwable
{
// First parameter is the name of the test, second is the window, the rest are rectangles
Class
cl
=
Class
.
forName
(
"sun.awt.X11.XEmbedServerTester"
);
test
=
cl
.
getMethod
(
args
[
0
],
new
Class
[
0
]);
long
window
=
Long
.
parseLong
(
args
[
1
]);
Rectangle
r
[]
=
new
Rectangle
[(
args
.
length
-
2
)/
4
];
for
(
int
i
=
0
;
i
<
r
.
length
;
i
++)
{
r
[
i
]
=
new
Rectangle
(
Integer
.
parseInt
(
args
[
2
+
i
*
4
]),
Integer
.
parseInt
(
args
[
2
+
i
*
4
+
1
]),
Integer
.
parseInt
(
args
[
2
+
i
*
4
+
2
]),
Integer
.
parseInt
(
args
[
2
+
i
*
4
+
3
]));
}
startClient
(
r
,
window
);
}
public
static
void
startClient
(
Rectangle
bounds
[],
long
window
)
throws
Throwable
{
Method
m_getTester
=
Class
.
forName
(
"sun.awt.X11.XEmbedServerTester"
).
getMethod
(
"getTester"
,
new
Class
[]
{
bounds
.
getClass
(),
Long
.
TYPE
});
final
Object
tester
=
m_getTester
.
invoke
(
null
,
new
Object
[]
{
bounds
,
window
});
try
{
log
.
info
(
"Starting test "
+
test
.
getName
());
test
.
invoke
(
tester
,
(
Object
[])
null
);
log
.
info
(
"Test "
+
test
.
getName
()
+
" PASSED."
);
passed
=
true
;
}
catch
(
Exception
e
)
{
log
.
log
(
Level
.
WARNING
,
"Test "
+
test
.
getName
()
+
" FAILED."
,
e
);
}
System
.
exit
(
passed
?
0
:
1
);
}
}
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录