Package com.willwinder.universalgcodesender

Source Code of com.willwinder.universalgcodesender.GrblCommunicatorTest

/*
    Copywrite 2013 Will Winder

    This file is part of Universal Gcode Sender (UGS).

    UGS is free software: you can redistribute it and/or modify
    it under the terms of the GNU General Public License as published by
    the Free Software Foundation, either version 3 of the License, or
    (at your option) any later version.

    UGS 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 for more details.

    You should have received a copy of the GNU General Public License
    along with UGS.  If not, see <http://www.gnu.org/licenses/>.
*/
package com.willwinder.universalgcodesender;

import com.willwinder.universalgcodesender.mockobjects.MockConnection;
import com.willwinder.universalgcodesender.mockobjects.MockGrbl;
import com.willwinder.universalgcodesender.types.GcodeCommand;
import com.willwinder.universalgcodesender.AbstractCommunicator;
import java.io.IOException;
import java.util.LinkedList;
import java.util.logging.Level;
import java.util.logging.Logger;
import static org.junit.Assert.*;
import org.junit.Before;
import org.junit.Test;

/**
*
* @author wwinder
*/
public class GrblCommunicatorTest {
    MockGrbl mg;
    LinkedList<String> cb;
    LinkedList<String> asl;
   
    public GrblCommunicatorTest() {
    }

    @Before
    public void setUp() {
        this.mg = new MockGrbl();
        this.cb = new LinkedList<String>();
        this.asl = new LinkedList<String>();
    }

    /**
     * Test of setLineTerminator method, of class GrblCommunicator.
     */
    @Test
    public void testSetLineTerminator() {
        System.out.println("setLineTerminator");
        GrblCommunicator instance = new GrblCommunicator();
       
        //((AbstractCommunicator)instance).addConnectionType(conn);
       
        String defaultTerminator = AbstractCommunicator.DEFAULT_TERMINATOR;
       
        // Initial value.
        assertEquals(defaultTerminator, instance.getLineTerminator());
       
        instance.setLineTerminator("tada");
        assertEquals("tada", instance.getLineTerminator());
       
        instance.setLineTerminator(null);
        assertEquals(defaultTerminator, instance.getLineTerminator());
       
        instance.setLineTerminator("");
        assertEquals(defaultTerminator, instance.getLineTerminator());
    }

    /**
     * Test of openCommPort method, of class GrblCommunicator.
     */
    @Test
    public void testOpenCommPort() throws Exception {
        System.out.println("openCommPort");
        System.out.println("-not testing RXTX.");
    }

    /**
     * Test of closeCommPort method, of class GrblCommunicator.
     */
    @Test
    public void testCloseCommPort() {
        System.out.println("closeCommPort");
        System.out.println("-not testing RXTX.");
    }

    /**
     * Test of queueStringForComm method, of class GrblCommunicator.
     */
    @Test
    public void testQueueStringForComm() throws Exception {
       
        System.out.println("queueStringForComm");
        String input = "someCommand";
        MockConnection mc = new MockConnection(mg.in, mg.out);
        GrblCommunicator instance = new GrblCommunicator(cb, asl, mc);
       
        try {
            instance.queueStringForComm(input);
            // The cb preloads commands so the size represents queued commands.
            assertEquals(1, cb.size());
           
            // Test that instance adds newline to improperly formed command.
            assertEquals(input + "\n", cb.peek());
           
            instance.queueStringForComm(input);
            instance.queueStringForComm(input);
           
            // Test that instance continues to queue inputs.
            assertEquals(3, cb.size());
           
            input = "someCommand\n";
            cb = new LinkedList<String>();
            mc = new MockConnection(mg.in, mg.out);
            instance = new GrblCommunicator(cb, asl, mc);

           
            instance.queueStringForComm(input);
            // Test that instance doesn't add superfluous newlines.
            assertEquals(input, cb.peek());

        } catch (Exception e) {
            fail("queueStringForComm threw an exception: "+e.getMessage());
        }
    }

   
    /**
     * Test of sendStringToComm method, of class GrblCommunicator.
     */
    /* This function is private...
    @Test
    public void testSendStringToComm() {
        System.out.println("sendStringToComm");
        GrblCommunicator instance = new GrblCommunicator(mg.in, mg.out, cb, asl);

       
        String command = "someCommand";
        instance.sendStringToComm(command);
       
        // Make sure the string made it to GRBL.
        assertEquals(command, mg.readStringFromGrblBuffer());
    }
    */
    /**
     * Test of sendByteImmediately method, of class GrblCommunicator.
     */
    @Test
    public void testSendByteImmediately() {
        System.out.println("sendByteImmediately");
        MockConnection mc = new MockConnection(mg.in, mg.out);
        GrblCommunicator instance = new GrblCommunicator(cb, asl, mc);

        // Ctrl-C is a common byte to send immediately.
        byte b = 0x18;
       
        try {
            instance.sendByteImmediately(b);
        } catch (IOException e) {
            fail("sendByteImmediately threw an exception: " + e.getMessage());
        }

        // Make sure the string made it to GRBL.
        assertEquals(b, mg.readByteFromGrblBuffer());

        // Test my readByteFromGrblBuffer command (should be empty).
        assertEquals(0x0, mg.readByteFromGrblBuffer());
       
        try {
            // Buffer multiple bytes
            instance.sendByteImmediately((byte)0x18);
            instance.sendByteImmediately((byte)0x19);
            instance.sendByteImmediately((byte)0x20);
            instance.sendByteImmediately((byte)0x21);
        } catch (IOException e) {
            fail("sendByteImmediately threw an exception: " + e.getMessage());
        }

        assertEquals(0x18, mg.readByteFromGrblBuffer());
        assertEquals(0x19, mg.readByteFromGrblBuffer());
        assertEquals(0x20, mg.readByteFromGrblBuffer());
        assertEquals(0x21, mg.readByteFromGrblBuffer());
       
        // Test my readByteFromGrblBuffer command (should be empty).
        assertEquals(0x0, mg.readByteFromGrblBuffer());
    }

    /**
     * Test of areActiveCommands method, of class GrblCommunicator.
     */
    @Test
    public void testAreActiveCommands() {
        System.out.println("areActiveCommands");
        MockConnection mc = new MockConnection(mg.in, mg.out);
        GrblCommunicator instance = new GrblCommunicator(cb, asl, mc);
       
        boolean expResult = false;
        boolean result = instance.areActiveCommands();
       
        // Empty case.
        assertEquals(expResult, result);
       
        // Add a command and stream it (activate it).
        instance.queueStringForComm("command one");
        instance.streamCommands();
        expResult = true;
        result = instance.areActiveCommands();
        assertEquals(expResult, result);
       
        // Add another command and stream it.
        instance.queueStringForComm("command one");
        instance.streamCommands();
        expResult = true;
        result = instance.areActiveCommands();
        assertEquals(expResult, result);
       
        // Send result to communicator.
        instance.responseMessage("ok");
        instance.responseMessage("ok");
               
        expResult = false;
        result = instance.areActiveCommands();
        assertEquals(expResult, result);
    }

    /**
     * Test of sendStringToComm method, of class GrblCommunicator.
     */
    @Test
    public void testStreamCommands() {
        System.out.println("streamCommands");
        MockConnection mc = new MockConnection(mg.in, mg.out);
        GrblCommunicator instance = new GrblCommunicator(cb, asl, mc);
        String thirtyNineCharString = "thirty-nine character command here.....";

        boolean result;
        boolean expResult;
       
        // Make sure CommUtil is still an overly cautious jerk.
        LinkedList<GcodeCommand> l = new LinkedList<GcodeCommand>();
        l.add(new GcodeCommand("12characters"));
        assertEquals(13, CommUtils.getSizeOfBuffer(l));

        // Make sure GrblUtils hasn't updated RX buffer size.
        assertEquals(123, GrblUtils.GRBL_RX_BUFFER_SIZE);

        // Add a bunch of commands so that the buffer is full.
        // 39*3 + 3 newlines + 3 CommUtils caution  = 123 == buffer size.
        instance.queueStringForComm(thirtyNineCharString);
        instance.queueStringForComm(thirtyNineCharString);
        instance.queueStringForComm(thirtyNineCharString);
       
        // Stream them so that there are active commands.
        instance.streamCommands();
        expResult = true;
        result = instance.areActiveCommands();
        assertEquals(expResult, result);

        // Add another command and stream it so that something is queued.
        instance.queueStringForComm(thirtyNineCharString);
        instance.streamCommands();
        expResult = true;
        result = instance.areActiveCommands();
        assertEquals(expResult, result);

        // Check with MockGrbl to verify the fourth command wasn't sent.
        String output = mg.readStringFromGrblBuffer();
        assertEquals(thirtyNineCharString+"\n"+thirtyNineCharString+"\n"+thirtyNineCharString+"\n",
                        output);
       
        // Make room for the next command.
        mc.sendResponse("ok");
       
        // Send it.
        instance.streamCommands();
       
        // Make sure the queued command was sent.
        output = mg.readStringFromGrblBuffer();
        assertEquals(thirtyNineCharString+"\n", output);
 
        // Wrap up.
        mc.sendResponse("ok");
        mc.sendResponse("ok");
        mc.sendResponse("ok");

        expResult = false;
        result = instance.areActiveCommands();
        assertEquals(expResult, result);
    }
   
    /**
     * Test of pauseSend method, of class GrblCommunicator.
     */
    @Test
    public void testPauseSendAndResumeSend() {
        System.out.println("pauseSend");
        MockConnection mc = new MockConnection(mg.in, mg.out);
        GrblCommunicator instance = new GrblCommunicator(cb, asl, mc);
        String twentyCharString = "twenty characters...";
        String grblReceiveString;
        String arr[];
        int expectedInt;
       
        // Queue a bunch of commands
        for (int i=0; i < 30; i++) {
            instance.queueStringForComm(twentyCharString);
        }
       
        // Fill initial buffer, then pause.
        instance.streamCommands();
        instance.pauseSend();

        // Check that the correct number of commands were buffered (even though
        // that isn't pause/resume).
        grblReceiveString = mg.readStringFromGrblBuffer();
        arr = grblReceiveString.split("\n");
        expectedInt = GrblUtils.GRBL_RX_BUFFER_SIZE / (twentyCharString.length()+1);
        assertEquals(expectedInt, arr.length);

        // Process 'ok' messages.
        for (int i=0; i <arr.length; i++) {
            mc.sendResponse("ok");
        }

        // Make sure we don't stream anymore.
        instance.streamCommands();
        grblReceiveString = mg.readStringFromGrblBuffer();
        expectedInt = 0;
        assertEquals(expectedInt, grblReceiveString.length());

        instance.resumeSend();
       
        // Make sure streaming continued after resuming.
        instance.streamCommands();
        grblReceiveString = mg.readStringFromGrblBuffer();
        arr = grblReceiveString.split("\n");
        expectedInt = GrblUtils.GRBL_RX_BUFFER_SIZE / (twentyCharString.length()+1);
        assertEquals(expectedInt, arr.length);
    }

    /**
     * Test of cancelSend method, of class GrblCommunicator.
     */
    @Test
    public void testCancelSend() {
        System.out.println("cancelSend");
        MockConnection mc = new MockConnection(mg.in, mg.out);
        GrblCommunicator instance = new GrblCommunicator(cb, asl, mc);
        String twentyCharString = "twenty characters...";
        String grblReceiveString;
        String arr[];
        int expectedInt;
        Boolean expectedBool;
       
        // 1.
        // Queue some commands, but cancel before sending them.
        for (int i=0; i < 30; i++) {
            instance.queueStringForComm(twentyCharString);
        }
        instance.cancelSend();

        // try streaming them and make sure nothing is received.
        instance.streamCommands();
        grblReceiveString = mg.readStringFromGrblBuffer();
        expectedInt = 0;
        assertEquals(expectedInt, grblReceiveString.length());
       
        // 2.
        // We can't un-send things to GRBL, so make sure we still acknowledge
        // that there are active commands.
        for (int i=0; i < 30; i++) {
            instance.queueStringForComm(twentyCharString);
        }
        instance.streamCommands();
        instance.cancelSend();
        // Verify that there are several active commands.
        expectedBool = true;
        assertEquals(expectedBool, instance.areActiveCommands());
       
        grblReceiveString = mg.readStringFromGrblBuffer();
        arr = grblReceiveString.split("\n");
        expectedInt = GrblUtils.GRBL_RX_BUFFER_SIZE / (twentyCharString.length()+1);
        assertEquals(expectedInt, arr.length);

        // Wrap up the active commands.
        for (int i=0; i <arr.length; i++) {
            mc.sendResponse("ok");
        }
           
        // Make sure canceled commands are not sent.
        instance.streamCommands();
        grblReceiveString = mg.readStringFromGrblBuffer();
        expectedInt = 0;
        assertEquals(expectedInt, grblReceiveString.length());
    }

    /**
     * Test of softReset method, of class GrblCommunicator.
     */
    @Test
    public void testSoftReset() {
        System.out.println("softReset");
        MockConnection mc = new MockConnection(mg.in, mg.out);
        GrblCommunicator instance = new GrblCommunicator(cb, asl, mc);
        String twentyCharString = "twenty characters...";
        String grblReceiveString;
        String arr[];
        int expectedInt;
        Boolean expectedBool;
       
        // This is essentially a cancel that "un sends" commands.
        // Send some commands, make them active, then soft-reset to reset them.
        for (int i=0; i < 30; i++) {
            instance.queueStringForComm(twentyCharString);
        }
        instance.streamCommands();
        instance.softReset();
        // Verify that there are several active commands.
        expectedBool = false;
        assertEquals(expectedBool, instance.areActiveCommands());
    }
}
TOP

Related Classes of com.willwinder.universalgcodesender.GrblCommunicatorTest

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.