mirror of
				https://github.com/SquidDev-CC/CC-Tweaked
				synced 2025-10-30 21:23:00 +00:00 
			
		
		
		
	Refactor and add tests for TextBuffer (#738)
This commit is contained in:
		| @@ -12,46 +12,12 @@ public class TextBuffer | ||||
|     public TextBuffer( char c, int length ) | ||||
|     { | ||||
|         text = new char[length]; | ||||
|         for( int i = 0; i < length; i++ ) | ||||
|         { | ||||
|             text[i] = c; | ||||
|         } | ||||
|         this.fill( c ); | ||||
|     } | ||||
|  | ||||
|     public TextBuffer( String text ) | ||||
|     { | ||||
|         this( text, 1 ); | ||||
|     } | ||||
|  | ||||
|     public TextBuffer( String text, int repetitions ) | ||||
|     { | ||||
|         int textLength = text.length(); | ||||
|         this.text = new char[textLength * repetitions]; | ||||
|         for( int i = 0; i < repetitions; i++ ) | ||||
|         { | ||||
|             for( int j = 0; j < textLength; j++ ) | ||||
|             { | ||||
|                 this.text[j + i * textLength] = text.charAt( j ); | ||||
|             } | ||||
|         } | ||||
|     } | ||||
|  | ||||
|     public TextBuffer( TextBuffer text ) | ||||
|     { | ||||
|         this( text, 1 ); | ||||
|     } | ||||
|  | ||||
|     public TextBuffer( TextBuffer text, int repetitions ) | ||||
|     { | ||||
|         int textLength = text.length(); | ||||
|         this.text = new char[textLength * repetitions]; | ||||
|         for( int i = 0; i < repetitions; i++ ) | ||||
|         { | ||||
|             for( int j = 0; j < textLength; j++ ) | ||||
|             { | ||||
|                 this.text[j + i * textLength] = text.charAt( j ); | ||||
|             } | ||||
|         } | ||||
|         this.text = text.toCharArray(); | ||||
|     } | ||||
|  | ||||
|     public int length() | ||||
| @@ -59,39 +25,16 @@ public class TextBuffer | ||||
|         return text.length; | ||||
|     } | ||||
|  | ||||
|     public String read() | ||||
|     { | ||||
|         return read( 0, text.length ); | ||||
|     } | ||||
|  | ||||
|     public String read( int start ) | ||||
|     { | ||||
|         return read( start, text.length ); | ||||
|     } | ||||
|  | ||||
|     public String read( int start, int end ) | ||||
|     { | ||||
|         start = Math.max( start, 0 ); | ||||
|         end = Math.min( end, text.length ); | ||||
|         int textLength = Math.max( end - start, 0 ); | ||||
|         return new String( text, start, textLength ); | ||||
|     } | ||||
|  | ||||
|     public void write( String text ) | ||||
|     { | ||||
|         write( text, 0, text.length() ); | ||||
|         write( text, 0 ); | ||||
|     } | ||||
|  | ||||
|     public void write( String text, int start ) | ||||
|     { | ||||
|         write( text, start, start + text.length() ); | ||||
|     } | ||||
|  | ||||
|     public void write( String text, int start, int end ) | ||||
|     { | ||||
|         int pos = start; | ||||
|         start = Math.max( start, 0 ); | ||||
|         end = Math.min( end, pos + text.length() ); | ||||
|         int end = Math.min( start + text.length(), pos + text.length() ); | ||||
|         end = Math.min( end, this.text.length ); | ||||
|         for( int i = start; i < end; i++ ) | ||||
|         { | ||||
| @@ -101,23 +44,10 @@ public class TextBuffer | ||||
|  | ||||
|     public void write( TextBuffer text ) | ||||
|     { | ||||
|         write( text, 0, text.length() ); | ||||
|     } | ||||
|  | ||||
|     public void write( TextBuffer text, int start ) | ||||
|     { | ||||
|         write( text, start, start + text.length() ); | ||||
|     } | ||||
|  | ||||
|     public void write( TextBuffer text, int start, int end ) | ||||
|     { | ||||
|         int pos = start; | ||||
|         start = Math.max( start, 0 ); | ||||
|         end = Math.min( end, pos + text.length() ); | ||||
|         end = Math.min( end, this.text.length ); | ||||
|         for( int i = start; i < end; i++ ) | ||||
|         int end = Math.min( text.length(), this.text.length ); | ||||
|         for( int i = 0; i < end; i++ ) | ||||
|         { | ||||
|             this.text[i] = text.charAt( i - pos ); | ||||
|             this.text[i] = text.charAt( i ); | ||||
|         } | ||||
|     } | ||||
|  | ||||
| @@ -126,11 +56,6 @@ public class TextBuffer | ||||
|         fill( c, 0, text.length ); | ||||
|     } | ||||
|  | ||||
|     public void fill( char c, int start ) | ||||
|     { | ||||
|         fill( c, start, text.length ); | ||||
|     } | ||||
|  | ||||
|     public void fill( char c, int start, int end ) | ||||
|     { | ||||
|         start = Math.max( start, 0 ); | ||||
| @@ -141,52 +66,6 @@ public class TextBuffer | ||||
|         } | ||||
|     } | ||||
|  | ||||
|     public void fill( String text ) | ||||
|     { | ||||
|         fill( text, 0, this.text.length ); | ||||
|     } | ||||
|  | ||||
|     public void fill( String text, int start ) | ||||
|     { | ||||
|         fill( text, start, this.text.length ); | ||||
|     } | ||||
|  | ||||
|     public void fill( String text, int start, int end ) | ||||
|     { | ||||
|         int pos = start; | ||||
|         start = Math.max( start, 0 ); | ||||
|         end = Math.min( end, this.text.length ); | ||||
|  | ||||
|         int textLength = text.length(); | ||||
|         for( int i = start; i < end; i++ ) | ||||
|         { | ||||
|             this.text[i] = text.charAt( (i - pos) % textLength ); | ||||
|         } | ||||
|     } | ||||
|  | ||||
|     public void fill( TextBuffer text ) | ||||
|     { | ||||
|         fill( text, 0, this.text.length ); | ||||
|     } | ||||
|  | ||||
|     public void fill( TextBuffer text, int start ) | ||||
|     { | ||||
|         fill( text, start, this.text.length ); | ||||
|     } | ||||
|  | ||||
|     public void fill( TextBuffer text, int start, int end ) | ||||
|     { | ||||
|         int pos = start; | ||||
|         start = Math.max( start, 0 ); | ||||
|         end = Math.min( end, this.text.length ); | ||||
|  | ||||
|         int textLength = text.length(); | ||||
|         for( int i = start; i < end; i++ ) | ||||
|         { | ||||
|             this.text[i] = text.charAt( (i - pos) % textLength ); | ||||
|         } | ||||
|     } | ||||
|  | ||||
|     public char charAt( int i ) | ||||
|     { | ||||
|         return text[i]; | ||||
|   | ||||
| @@ -0,0 +1,150 @@ | ||||
| /* | ||||
|  * This file is part of ComputerCraft - http://www.computercraft.info | ||||
|  * Copyright Daniel Ratcliffe, 2011-2021. Do not distribute without permission. | ||||
|  * Send enquiries to dratcliffe@gmail.com | ||||
|  */ | ||||
| package dan200.computercraft.core.terminal; | ||||
|  | ||||
| import org.junit.jupiter.api.Test; | ||||
|  | ||||
| import static org.junit.jupiter.api.Assertions.*; | ||||
|  | ||||
| class TextBufferTest | ||||
| { | ||||
|     @Test | ||||
|     void testStringConstructor() | ||||
|     { | ||||
|         TextBuffer textBuffer = new TextBuffer( "test" ); | ||||
|         assertEquals( "test", textBuffer.toString() ); | ||||
|     } | ||||
|  | ||||
|     @Test | ||||
|     void testCharRepetitionConstructor() | ||||
|     { | ||||
|         TextBuffer textBuffer = new TextBuffer( 'a', 5 ); | ||||
|         assertEquals( "aaaaa", textBuffer.toString() ); | ||||
|     } | ||||
|  | ||||
|     @Test | ||||
|     void testLength() | ||||
|     { | ||||
|         TextBuffer textBuffer = new TextBuffer( "test" ); | ||||
|         assertEquals( 4, textBuffer.length() ); | ||||
|     } | ||||
|  | ||||
|     @Test | ||||
|     void testWrite() | ||||
|     { | ||||
|         TextBuffer textBuffer = new TextBuffer( ' ', 4 ); | ||||
|         textBuffer.write( "test" ); | ||||
|         assertEquals( "test", textBuffer.toString() ); | ||||
|     } | ||||
|  | ||||
|     @Test | ||||
|     void testWriteTextBuffer() | ||||
|     { | ||||
|         TextBuffer source = new TextBuffer( "test" ); | ||||
|         TextBuffer target = new TextBuffer( "    " ); | ||||
|         target.write( source ); | ||||
|         assertEquals( "test", target.toString() ); | ||||
|     } | ||||
|  | ||||
|     @Test | ||||
|     void testWriteFromPos() | ||||
|     { | ||||
|         TextBuffer textBuffer = new TextBuffer( "test" ); | ||||
|         textBuffer.write( "il", 1 ); | ||||
|         assertEquals( "tilt", textBuffer.toString() ); | ||||
|     } | ||||
|  | ||||
|     @Test | ||||
|     void testWriteOutOfBounds() | ||||
|     { | ||||
|         TextBuffer textBuffer = new TextBuffer( "test" ); | ||||
|         textBuffer.write( "abcdefghijklmnop", -5 ); | ||||
|         assertEquals( "fghi", textBuffer.toString() ); | ||||
|     } | ||||
|  | ||||
|     @Test | ||||
|     void testWriteOutOfBounds2() | ||||
|     { | ||||
|         TextBuffer textBuffer = new TextBuffer( "             " ); | ||||
|         textBuffer.write( "Hello, world!", -3 ); | ||||
|         assertEquals( "lo, world!   ", textBuffer.toString() ); | ||||
|     } | ||||
|  | ||||
|     @Test | ||||
|     void testFill() | ||||
|     { | ||||
|         TextBuffer textBuffer = new TextBuffer( "test" ); | ||||
|         textBuffer.fill( 'c' ); | ||||
|         assertEquals( "cccc", textBuffer.toString() ); | ||||
|     } | ||||
|  | ||||
|     @Test | ||||
|     void testFillSubstring() | ||||
|     { | ||||
|         TextBuffer textBuffer = new TextBuffer( "test" ); | ||||
|         textBuffer.fill( 'c', 1, 3 ); | ||||
|         assertEquals( "tcct", textBuffer.toString() ); | ||||
|     } | ||||
|  | ||||
|     @Test | ||||
|     void testFillOutOfBounds() | ||||
|     { | ||||
|         TextBuffer textBuffer = new TextBuffer( "test" ); | ||||
|         textBuffer.fill( 'c', -5, 5 ); | ||||
|         assertEquals( "cccc", textBuffer.toString() ); | ||||
|     } | ||||
|  | ||||
|     @Test | ||||
|     void testCharAt() | ||||
|     { | ||||
|         TextBuffer textBuffer = new TextBuffer( "test" ); | ||||
|         assertEquals( 'e', textBuffer.charAt( 1 ) ); | ||||
|     } | ||||
|  | ||||
|     @Test | ||||
|     void testSetChar() | ||||
|     { | ||||
|         TextBuffer textBuffer = new TextBuffer( "test" ); | ||||
|         textBuffer.setChar( 2, 'n' ); | ||||
|         assertEquals( "tent", textBuffer.toString() ); | ||||
|     } | ||||
|  | ||||
|     @Test | ||||
|     void testSetCharWithNegativeIndex() | ||||
|     { | ||||
|         TextBuffer textBuffer = new TextBuffer( "test" ); | ||||
|         textBuffer.setChar( -5, 'n' ); | ||||
|         assertEquals( "test", textBuffer.toString(), "Buffer should not change after setting char with negative index." ); | ||||
|     } | ||||
|  | ||||
|     @Test | ||||
|     void testSetCharWithIndexBeyondBufferEnd() | ||||
|     { | ||||
|         TextBuffer textBuffer = new TextBuffer( "test" ); | ||||
|         textBuffer.setChar( 10, 'n' ); | ||||
|         assertEquals( "test", textBuffer.toString(), "Buffer should not change after setting char beyond buffer end." ); | ||||
|     } | ||||
|  | ||||
|     @Test | ||||
|     void testMultipleOperations() | ||||
|     { | ||||
|         TextBuffer textBuffer = new TextBuffer( ' ', 5 ); | ||||
|         textBuffer.setChar( 0, 'H' ); | ||||
|         textBuffer.setChar( 1, 'e' ); | ||||
|         textBuffer.setChar( 2, 'l' ); | ||||
|         textBuffer.write( "lo", 3 ); | ||||
|         assertEquals( "Hello", textBuffer.toString(), "TextBuffer failed to persist over multiple operations." ); | ||||
|     } | ||||
|  | ||||
|     @Test | ||||
|     void testEmptyBuffer() | ||||
|     { | ||||
|         TextBuffer textBuffer = new TextBuffer( "" ); | ||||
|         // exception on writing to empty buffer would fail the test | ||||
|         textBuffer.write( "test" ); | ||||
|         assertEquals( "", textBuffer.toString() ); | ||||
|     } | ||||
| } | ||||
		Reference in New Issue
	
	Block a user
	 Ronan Hanley
					Ronan Hanley