Package com.willwinder.universalgcodesender.pendantui

Source Code of com.willwinder.universalgcodesender.pendantui.PendantUITest$MockMainWindow

package com.willwinder.universalgcodesender.pendantui;

import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertFalse;
import static org.junit.Assert.assertSame;
import static org.junit.Assert.assertTrue;

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.net.URL;
import java.net.URLConnection;
import java.util.Collection;

import org.junit.Before;
import org.junit.Test;

import com.google.gson.Gson;
import com.willwinder.universalgcodesender.AbstractController;
import com.willwinder.universalgcodesender.MainWindow.ControlState;
import com.willwinder.universalgcodesender.MainWindowAPI;
import com.willwinder.universalgcodesender.Settings;
import com.willwinder.universalgcodesender.pendantui.PendantConfigBean.StepSizeOption;

public class PendantUITest {
  private MockMainWindow mainWindow = new MockMainWindow();
  private PendantUI pendantUI = new PendantUI(mainWindow);
  private MockUGSController controller = new MockUGSController();
  private SystemStateBean systemState = new SystemStateBean();
 
  public class MockMainWindow implements MainWindowAPI{
   
            public String commandText;
            @Override
            public void sendGcodeCommand(String commandText) {
                this.commandText = commandText;
                System.out.println(commandText);
            }

            public int dirX, dirY, dirZ;
            public double stepSize;

            @Override
            public void adjustManualLocation(int dirX, int dirY, int dirZ, double stepSize) {
                this.dirX = dirX;
                this.dirY = dirY;
                this.dirZ = dirZ;
                this.stepSize = stepSize;
                System.out.println("dirX: "+dirX+" dirY: "+dirY+" dirZ: "+dirZ+" stepSize: "+stepSize);
            }

            public Settings settings = new Settings();

            @Override
            public Settings getSettings() {
                return settings;
            }

            @Override
            public AbstractController getController() {
                return controller;
            }

            @Override
            public void updateSystemState(SystemStateBean systemStateBean) {

            }

            public boolean sendButtonActionPerformed = false;

            @Override
            public void sendButtonActionPerformed() {
                sendButtonActionPerformed = true;
                System.out.println("sendButtonActionPerformed");
            }

            public boolean pauseButtonActionPerformed = false;

            @Override
            public void pauseButtonActionPerformed() {
                pauseButtonActionPerformed = true;
                System.out.println("pauseButtonActionPerformed");
            }

            public boolean cancelButtonActionPerformed = false;

            @Override
            public void cancelButtonActionPerformed() {
                cancelButtonActionPerformed = true;
                System.out.println("cancelButtonActionPerformed");
            }

            public boolean returnToZeroButtonActionPerformed = false;

            @Override
            public void returnToZeroButtonActionPerformed() {
                returnToZeroButtonActionPerformed = true;
                System.out.println("returnToZeroButtonActionPerformed");
            }

            public boolean resetCoordinatesButtonActionPerformed = false;

            @Override
            public void resetCoordinatesButtonActionPerformed() {
                resetCoordinatesButtonActionPerformed = true;
                System.out.println("resetCoordinatesButtonActionPerformed");
            }

            @Override
            public void resetXCoordinateButtonActionPerformed() {
                throw new UnsupportedOperationException("Not supported yet."); //To change body of generated methods, choose Tools | Templates.
            }

            @Override
            public void resetYCoordinateButtonActionPerformed() {
                throw new UnsupportedOperationException("Not supported yet."); //To change body of generated methods, choose Tools | Templates.
            }

            @Override
            public void resetZCoordinateButtonActionPerformed() {
                throw new UnsupportedOperationException("Not supported yet."); //To change body of generated methods, choose Tools | Templates.
            }
  }
 
  public class MockUGSController extends AbstractController{
            @Override
            protected void statusUpdatesRateValueChanged(int rate) {
            }

            @Override
            protected void statusUpdatesEnabledValueChanged(boolean enabled) {
            }

            @Override
            protected void resumeStreamingEvent() throws IOException {
            }

            @Override
            protected void rawResponseHandler(String response) {
            }

            @Override
            protected void pauseStreamingEvent() throws IOException {
            }

            @Override
            protected void isReadyToStreamFileEvent() throws Exception {
            }

            @Override
            public long getJobLengthEstimate(Collection<String> jobLines) {
                return 0;
            }

            @Override
            protected void closeCommBeforeEvent() {
            }

            @Override
            protected void closeCommAfterEvent() {
            }

            @Override
            protected void cancelSendBeforeEvent() {
            }

            @Override
            protected void cancelSendAfterEvent() {
            }

            public boolean performHomingCycle = false;

            @Override
            public void performHomingCycle() throws Exception {
                performHomingCycle = true;
            }

            public boolean killAlarmLock = false;
            @Override
            public void killAlarmLock() throws Exception {
                killAlarmLock = true;
            }

            public boolean toggleCheckMode = true;
            @Override
            public void toggleCheckMode() throws Exception {
                toggleCheckMode = true;
            }

  }
 
  @Before
  public void setup(){
            pendantUI.setSystemState(systemState);
  }
  @Test
  public void testPendantUI() {
            assertSame(mainWindow, pendantUI.getMainWindow());
  }

  @Test
  public void testStart() {
            pendantUI.setPort(23123);
            String url = pendantUI.start().get(0).getUrlString();
   
            systemState.setControlState(ControlState.COMM_IDLE);
   
            // test resource handler
            String indexPage = getResponse(url);
            assertTrue(indexPage.contains("$(function()"));

            // test sendGcode Handler
            getResponse(url+"/sendGcode?gCode=MyGcode");
            assertEquals(mainWindow.commandText, "MyGcode");

            getResponse(url+"/sendGcode?gCode=$H");
            assertTrue(controller.performHomingCycle);

            getResponse(url+"/sendGcode?gCode=$X");
            assertTrue(controller.killAlarmLock);

            getResponse(url+"/sendGcode?gCode=$C");
            assertTrue(controller.toggleCheckMode);

            getResponse(url+"/sendGcode?gCode=SEND_FILE");
            assertTrue(mainWindow.sendButtonActionPerformed);

            // Disabled when idle
            getResponse(url+"/sendGcode?gCode=PAUSE_RESUME_FILE");
            assertFalse(mainWindow.pauseButtonActionPerformed);

            // Disabled when idle
            getResponse(url+"/sendGcode?gCode=CANCEL_FILE");
            assertFalse(mainWindow.cancelButtonActionPerformed);

            systemState.setControlState(ControlState.COMM_SENDING);

            getResponse(url+"/sendGcode?gCode=PAUSE_RESUME_FILE");
            assertTrue(mainWindow.pauseButtonActionPerformed);

            getResponse(url+"/sendGcode?gCode=CANCEL_FILE");
            assertTrue(mainWindow.cancelButtonActionPerformed);

            systemState.setControlState(ControlState.COMM_IDLE);

            // test adjust manual location handler
            String adjustManualLocationResponse = getResponse(url+"/adjustManualLocation?dirX=1&dirY=2&dirZ=3&stepSize=4.0");
            assertEquals(ControlState.COMM_IDLE.name(), adjustManualLocationResponse);
            assertEquals(1,mainWindow.dirX);
            assertEquals(2,mainWindow.dirY);
            assertEquals(3,mainWindow.dirZ);
            assertEquals(4.0,mainWindow.stepSize,0);

            // test get system state handler
            SystemStateBean systemStateTest = new Gson().fromJson(getResponse(url+"/getSystemState"), SystemStateBean.class);
            assertEquals(ControlState.COMM_IDLE, systemStateTest.getControlState());

            systemState.setControlState(ControlState.COMM_SENDING);
            systemStateTest = new Gson().fromJson(getResponse(url+"/getSystemState"), SystemStateBean.class);
            assertEquals(ControlState.COMM_SENDING, systemStateTest.getControlState());

           
            // test config handler
            String configResponse = getResponse(url+"/config");
            assertTrue(configResponse.contains("shortCutButtonList"));

            pendantUI.getMainWindow().getSettings().getPendantConfig().getStepSizeList().add(new StepSizeOption("newStepSizeOptionValue", "newStepSizeOptionLabel", false));

            configResponse = getResponse(url+"/config");
            assertTrue(configResponse.contains("newStepSizeOptionValue"));

            pendantUI.stop();

            assertTrue(pendantUI.getServer().isStopped());
  }
 
  private String getResponse(String urlStr){
            StringBuilder out = new StringBuilder();

            try {
                URL url = new URL(urlStr);
                URLConnection conn = url.openConnection();
                BufferedReader reader = new BufferedReader(new InputStreamReader(conn.getInputStream()));
                String line;
                while ((line = reader.readLine()) != null) {
                    out.append(line);
                 }
                 reader.close();
            } catch (Exception e) {
                throw new RuntimeException(e);
            }       
            return out.toString();
  }

  @Test
  public void testGetUrl() {
            String test = pendantUI.getUrlList().get(0).getUrlString();

            assertTrue(test.startsWith("http://"));
            assertTrue(test.contains("8080"));
  }

  @Test
  public void testGetPort() {
            pendantUI.setPort(999);
            assertEquals(999, pendantUI.getPort());
  }

  @Test
  public void testSetPort() {
            pendantUI.setPort(999);
            assertEquals(999, pendantUI.getPort());
  }

  @Test
  public void testIsManualControlEnabled() {

            systemState.setControlState(ControlState.COMM_DISCONNECTED);
            assertFalse(pendantUI.isManualControlEnabled());

            systemState.setControlState(ControlState.COMM_IDLE);
            assertTrue(pendantUI.isManualControlEnabled());

            systemState.setControlState(ControlState.COMM_SENDING);
            assertFalse(pendantUI.isManualControlEnabled());

            systemState.setControlState(ControlState.COMM_SENDING_PAUSED);
            assertTrue(pendantUI.isManualControlEnabled());

            systemState.setControlState(ControlState.FILE_SELECTED);
            assertTrue(pendantUI.isManualControlEnabled());

  }
 
  @Test
  public void testSystemStateSetFileName(){
            String fileSeparator = System.getProperty("file.separator");

            String testFileName = fileSeparator+"folder1"+fileSeparator+"folder2"+fileSeparator+"fileName.nc";

            systemState.setFileName(testFileName);

            assertEquals("fileName.nc", systemState.getFileName());

  }
}
TOP

Related Classes of com.willwinder.universalgcodesender.pendantui.PendantUITest$MockMainWindow

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.