diff --git a/jme3-materialeditor/src/com/jme3/gde/materials/multiview/widgets/TexturePanel.java b/jme3-materialeditor/src/com/jme3/gde/materials/multiview/widgets/TexturePanel.java index 5b4debe0..be51af30 100644 --- a/jme3-materialeditor/src/com/jme3/gde/materials/multiview/widgets/TexturePanel.java +++ b/jme3-materialeditor/src/com/jme3/gde/materials/multiview/widgets/TexturePanel.java @@ -3,7 +3,7 @@ * and open the template in the editor. */ -/* + /* * SelectionPanel.java * * Created on 14.06.2010, 16:52:22 @@ -25,20 +25,31 @@ import java.util.logging.Logger; /** - * The TexturePanel is a row in the material editor representing a special texture + * The TexturePanel is a row in the material editor representing a special + * texture + * * @author normenhansen */ public class TexturePanel extends MaterialPropertyWidget { - private final TexturePropertyEditor editor; - private final ProjectAssetManager manager; + private TexturePropertyEditor editor; + private ProjectAssetManager manager; private boolean flip = false; private boolean repeat = false; protected String textureName = null; // always enclosed with "" private TexturePreview texPreview; private final ScheduledThreadPoolExecutor exec = new ScheduledThreadPoolExecutor(1); - /** Creates new form SelectionPanel */ + /** + * Used by tests + */ + protected TexturePanel() { + + } + + /** + * Creates new form SelectionPanel + */ public TexturePanel(ProjectAssetManager manager) { this.manager = manager; editor = new TexturePropertyEditor(manager); @@ -50,12 +61,11 @@ private void displayPreview() { exec.execute(new Runnable() { @Override public void run() { - try{ + try { if (texPreview == null) { texPreview = new TexturePreview(manager); } - final String[] textureNameComponents = textureName.split(" "); - texPreview.requestPreview(stripQuotes(textureNameComponents[textureNameComponents.length - 1]), "", 80, 25, texturePreview, null); + texPreview.requestPreview(extractTextureName(textureName), "", 80, 25, texturePreview, null); } catch (AssetNotFoundException a) { Logger.getLogger(MaterialEditorTopComponent.class.getName()).log(Level.WARNING, "Could not load texture {0}", textureName); } @@ -63,12 +73,15 @@ public void run() { }); } } - - private String stripQuotes(String s) { - return s.substring(1, s.length() - 1); + + // visible for tests + protected String extractTextureName(String textureName) { + final String[] textureNameComponents = textureName.split("\""); + return textureNameComponents[textureNameComponents.length - 1]; } - private void updateFlipRepeat() { + // visible for tests + protected void updateFlipRepeat() { String propertyValue = property.getValue(); propertyValue = propertyValue.replaceFirst(textureName, ""); if (flip && !propertyValue.contains("Flip ")) { @@ -104,10 +117,10 @@ private static BufferedImage resizeImage(BufferedImage originalImage) { return resizedImage; } - /** This method is called from within the constructor to - * initialize the form. - * WARNING: Do NOT modify this code. The content of this method is - * always regenerated by the Form Editor. + /** + * This method is called from within the constructor to initialize the form. + * WARNING: Do NOT modify this code. The content of this method is always + * regenerated by the Form Editor. */ @SuppressWarnings("unchecked") // //GEN-BEGIN:initComponents @@ -263,6 +276,7 @@ private void jCheckBox2ActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FI private void texturePreviewMouseClicked(java.awt.event.MouseEvent evt) {//GEN-FIRST:event_texturePreviewMouseClicked Component view = editor.getCustomEditor(); + property.setValue(""); view.setVisible(true); if (editor.getValue() != null) { textureName = "\"" + editor.getAsText() + "\""; @@ -273,7 +287,6 @@ private void texturePreviewMouseClicked(java.awt.event.MouseEvent evt) {//GEN-FI textureName = "\"\""; texturePreview.setIcon(null); texturePreview.setToolTipText(""); - property.setValue(""); fireChanged(); } }//GEN-LAST:event_texturePreviewMouseClicked diff --git a/jme3-materialeditor/test/unit/src/com/jme3/gde/materials/multiview/widgets/TexturePanelTest.java b/jme3-materialeditor/test/unit/src/com/jme3/gde/materials/multiview/widgets/TexturePanelTest.java new file mode 100644 index 00000000..2e5cc8b5 --- /dev/null +++ b/jme3-materialeditor/test/unit/src/com/jme3/gde/materials/multiview/widgets/TexturePanelTest.java @@ -0,0 +1,74 @@ +/* + * Copyright (c) 2009-2023 jMonkeyEngine + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are + * met: + * + * * Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * + * * Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * + * * Neither the name of 'jMonkeyEngine' nor the names of its contributors + * may be used to endorse or promote products derived from this software + * without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED + * TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR + * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR + * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, + * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, + * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR + * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF + * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING + * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS + * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ +package com.jme3.gde.materials.multiview.widgets; + +import static org.junit.jupiter.api.Assertions.assertEquals; +import org.junit.jupiter.api.Test; + + +/** + * + * @author rickard + */ +public class TexturePanelTest { + + public TexturePanelTest() { + } + + @Test + public void testExtractTextureName() { + TexturePanel texturePanel = new TexturePanel(); + String textureName = "\"simple_name.jpg\""; + String extractedName = texturePanel.extractTextureName(textureName); + assertEquals("simple_name.jpg", extractedName); + + String textureNameWithModifier = "Flip Repeat \"simple_name.jpg\""; + extractedName = texturePanel.extractTextureName(textureNameWithModifier); + assertEquals("simple_name.jpg", extractedName); + + String textureNameWithSpaces = "\"texture name with spaces.jpg\""; + extractedName = texturePanel.extractTextureName(textureNameWithSpaces); + assertEquals("texture name with spaces.jpg", extractedName); + + String textureNameWithSpaceAndModifier = "Flip Repeat \"texture name with spaces.jpg\""; + extractedName = texturePanel.extractTextureName(textureNameWithSpaceAndModifier); + assertEquals("texture name with spaces.jpg", extractedName); + } + + /** + * Test of updateFlipRepeat method, of class TexturePanel. + */ + @org.junit.Test + public void testUpdateFlipRepeat() { + } + +}