mirror of
https://github.com/SquidDev-CC/CC-Tweaked
synced 2024-12-12 03:00:30 +00:00
Refactor and add tests for TextBuffer (#738)
This commit is contained in:
parent
66e42e0817
commit
3a147c78a8
@ -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() );
|
||||
}
|
||||
}
|
Loading…
Reference in New Issue
Block a user