|
30 | 30 | import static org.junit.jupiter.api.Assertions.assertThrows; |
31 | 31 | import static org.junit.jupiter.api.Assertions.assertTrue; |
32 | 32 | import java.util.List; |
| 33 | +import java.util.Set; |
33 | 34 | import javafx.css.CssMetaData; |
34 | 35 | import javafx.css.Styleable; |
35 | 36 | import javafx.scene.Scene; |
| 37 | +import javafx.scene.input.Clipboard; |
| 38 | +import javafx.scene.input.DataFormat; |
| 39 | +import javafx.scene.paint.Color; |
36 | 40 | import javafx.scene.text.Font; |
37 | 41 | import org.junit.jupiter.api.AfterEach; |
38 | 42 | import org.junit.jupiter.api.BeforeEach; |
39 | 43 | import org.junit.jupiter.api.Test; |
40 | 44 | import jfx.incubator.scene.control.richtext.CodeArea; |
41 | 45 | import jfx.incubator.scene.control.richtext.RichTextArea; |
| 46 | +import jfx.incubator.scene.control.richtext.SyntaxDecorator; |
| 47 | +import jfx.incubator.scene.control.richtext.TextPos; |
42 | 48 | import jfx.incubator.scene.control.richtext.model.CodeTextModel; |
| 49 | +import jfx.incubator.scene.control.richtext.model.RichParagraph; |
43 | 50 | import jfx.incubator.scene.control.richtext.model.RichTextModel; |
| 51 | +import jfx.incubator.scene.control.richtext.model.StyleAttributeMap; |
44 | 52 | import jfx.incubator.scene.control.richtext.skin.CodeAreaSkin; |
| 53 | +import test.jfx.incubator.scene.control.richtext.support.RTUtil; |
45 | 54 | import test.jfx.incubator.scene.util.TUtil; |
46 | 55 |
|
47 | 56 | /** |
@@ -143,6 +152,62 @@ public void testPropertyBinding() { |
143 | 152 |
|
144 | 153 | // functional API tests |
145 | 154 |
|
| 155 | + @Test |
| 156 | + public void copy() { |
| 157 | + RTUtil.copyToClipboard("yo"); |
| 158 | + control.appendText("123"); |
| 159 | + control.selectAll(); |
| 160 | + control.copy(); |
| 161 | + assertEquals("123", Clipboard.getSystemClipboard().getString()); |
| 162 | + |
| 163 | + control.select(TextPos.ZERO, TextPos.ofLeading(0, 1)); |
| 164 | + control.copy(); |
| 165 | + assertEquals("1", Clipboard.getSystemClipboard().getString()); |
| 166 | + |
| 167 | + control.select(TextPos.ofLeading(0, 1), TextPos.ofLeading(0, 2)); |
| 168 | + control.copy(); |
| 169 | + assertEquals("2", Clipboard.getSystemClipboard().getString()); |
| 170 | + |
| 171 | + control.select(TextPos.ofLeading(0, 2), TextPos.ofLeading(0, 3)); |
| 172 | + control.copy(); |
| 173 | + assertEquals("3", Clipboard.getSystemClipboard().getString()); |
| 174 | + |
| 175 | + control.appendText("\n4"); |
| 176 | + control.select(new TextPos(0, 3, 2, false), control.getDocumentEnd()); |
| 177 | + control.copy(); |
| 178 | + String nl = System.getProperty("line.separator"); |
| 179 | + assertEquals(nl + "4", Clipboard.getSystemClipboard().getString()); |
| 180 | + } |
| 181 | + |
| 182 | + @Test |
| 183 | + public void copyWithSyntaxDecorator() { |
| 184 | + control.appendText("123"); |
| 185 | + control.setSyntaxDecorator(new SyntaxDecorator() { |
| 186 | + private static final StyleAttributeMap DIGITS = StyleAttributeMap.builder().setTextColor(Color.MAGENTA).build(); |
| 187 | + |
| 188 | + @Override |
| 189 | + public RichParagraph createRichParagraph(CodeTextModel model, int index) { |
| 190 | + String text = model.getPlainText(index); |
| 191 | + RichParagraph.Builder b = RichParagraph.builder(); |
| 192 | + int len = text.length(); |
| 193 | + b.addSegment(text, 0, 1, null); |
| 194 | + b.addSegment(text, 1, 2, DIGITS); |
| 195 | + b.addSegment(text, 2, len, null); |
| 196 | + return b.build(); |
| 197 | + } |
| 198 | + |
| 199 | + @Override |
| 200 | + public void handleChange(CodeTextModel m, TextPos start, TextPos end, int charsTop, int linesAdded, int charsBottom) { |
| 201 | + } |
| 202 | + }); |
| 203 | + control.select(TextPos.ZERO); |
| 204 | + control.selectParagraph(); |
| 205 | + control.copy(); |
| 206 | + Clipboard cb = Clipboard.getSystemClipboard(); |
| 207 | + assertEquals("123", cb.getString()); |
| 208 | + assertEquals(Set.of(DataFormat.PLAIN_TEXT, DataFormat.HTML, DataFormat.RTF), cb.getContentTypes()); |
| 209 | + } |
| 210 | + |
146 | 211 | @Test |
147 | 212 | public void getControlCssMetaData() { |
148 | 213 | List<CssMetaData<? extends Styleable, ?>> md = control.getControlCssMetaData(); |
|
0 commit comments