utf8.RuneScanner.Buffered()
parent
d38de8eb47
commit
6d4d82cd8f
|
@ -29,6 +29,25 @@ func NewRuneScanner(reader io.Reader) *RuneScanner {
|
|||
return &runescanner
|
||||
}
|
||||
|
||||
// Buffered returns the number of bytes the UTF-8 encoding of the current buffered rune takes up, if there is a buffered rune.
|
||||
//
|
||||
// A buffered rune would come from someone calleding .UnreadRune().
|
||||
//
|
||||
// If there is not buffered rune then .Buffered() returns zero (0).
|
||||
//
|
||||
// So, for example, if .UnreadRune() was called for the rune 'A' (U+0041), then .Buffered() would return 1.
|
||||
//
|
||||
// And, for example, if .UnreadRune() was called for the rune '🙂' (U+1F642), then .Buffered() would return 4.
|
||||
//
|
||||
// This method has been made to be semantically the same as bufio.Reader.Buffered()
|
||||
func (receiver *RuneScanner) Buffered() int {
|
||||
if !receiver.peeked {
|
||||
return 0
|
||||
}
|
||||
|
||||
return receiver.prevSize
|
||||
}
|
||||
|
||||
func (receiver *RuneScanner) ReadRune() (rune, int, error) {
|
||||
if nil == receiver {
|
||||
return RuneError, 0, errNilReceiver
|
||||
|
|
|
@ -0,0 +1,206 @@
|
|||
package utf8_test
|
||||
|
||||
import (
|
||||
"testing"
|
||||
|
||||
"io"
|
||||
"strings"
|
||||
"sourcecode.social/reiver/go-utf8"
|
||||
)
|
||||
|
||||
func TestRuneScanner_Buffered(t *testing.T) {
|
||||
|
||||
var s string = "🙂 apple 😈 banana 👾 cherry 🎃"
|
||||
|
||||
var reader io.Reader = strings.NewReader(s)
|
||||
var runescanner utf8.RuneScanner = utf8.WrapRuneScanner(reader)
|
||||
|
||||
{
|
||||
expected := 0
|
||||
actual := runescanner.Buffered()
|
||||
|
||||
if expected != actual {
|
||||
t.Errorf("The actual number of buffered-bytes is not was expected.")
|
||||
t.Logf("EXPECTED: %d", expected)
|
||||
t.Logf("ACTUAL: %d", actual)
|
||||
return
|
||||
}
|
||||
}
|
||||
|
||||
{
|
||||
r, n, err := runescanner.ReadRune()
|
||||
if nil != err {
|
||||
t.Errorf("Did not expect an error when trying to .ReadRune() but actually got one.")
|
||||
t.Logf("ERROR: (%T) %s", err, err)
|
||||
return
|
||||
}
|
||||
|
||||
{
|
||||
expected := '🙂'
|
||||
actual := r
|
||||
|
||||
if expected != actual {
|
||||
t.Errorf("The actual read rune is not what was expected.")
|
||||
t.Logf("EXPECTED: %q (%U)", expected, expected)
|
||||
t.Logf("ACTUAL: %q (%U)", actual, actual)
|
||||
return
|
||||
}
|
||||
}
|
||||
|
||||
{
|
||||
expected := 4
|
||||
actual := n
|
||||
|
||||
if expected != actual {
|
||||
t.Errorf("The actual number of bytes read is not what was expected.")
|
||||
t.Logf("EXPECTED: %d", expected)
|
||||
t.Logf("ACTUAL: %d", actual)
|
||||
return
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
{
|
||||
expected := 0
|
||||
actual := runescanner.Buffered()
|
||||
|
||||
if expected != actual {
|
||||
t.Errorf("The actual number of buffered-bytes is not was expected.")
|
||||
t.Logf("EXPECTED: %d", expected)
|
||||
t.Logf("ACTUAL: %d", actual)
|
||||
return
|
||||
}
|
||||
}
|
||||
|
||||
{
|
||||
err := runescanner.UnreadRune()
|
||||
if nil != err {
|
||||
t.Errorf("Did not expect an error when trying to .UnreadRune() but actually got one.")
|
||||
t.Logf("ERROR: (%T) %s", err, err)
|
||||
return
|
||||
}
|
||||
}
|
||||
|
||||
{
|
||||
expected := 4
|
||||
actual := runescanner.Buffered()
|
||||
|
||||
if expected != actual {
|
||||
t.Errorf("The actual number of buffered-bytes is not was expected.")
|
||||
t.Logf("EXPECTED: %d", expected)
|
||||
t.Logf("ACTUAL: %d", actual)
|
||||
return
|
||||
}
|
||||
}
|
||||
|
||||
{
|
||||
r, n, err := runescanner.ReadRune()
|
||||
if nil != err {
|
||||
t.Errorf("Did not expect an error when trying to .ReadRune() but actually got one.")
|
||||
t.Logf("ERROR: (%T) %s", err, err)
|
||||
return
|
||||
}
|
||||
|
||||
{
|
||||
expected := '🙂'
|
||||
actual := r
|
||||
|
||||
if expected != actual {
|
||||
t.Errorf("The actual read rune is not what was expected.")
|
||||
t.Logf("EXPECTED: %q (%U)", expected, expected)
|
||||
t.Logf("ACTUAL: %q (%U)", actual, actual)
|
||||
return
|
||||
}
|
||||
}
|
||||
|
||||
{
|
||||
expected := 4
|
||||
actual := n
|
||||
|
||||
if expected != actual {
|
||||
t.Errorf("The actual number of bytes read is not what was expected.")
|
||||
t.Logf("EXPECTED: %d", expected)
|
||||
t.Logf("ACTUAL: %d", actual)
|
||||
return
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
{
|
||||
expected := 0
|
||||
actual := runescanner.Buffered()
|
||||
|
||||
if expected != actual {
|
||||
t.Errorf("The actual number of buffered-bytes is not was expected.")
|
||||
t.Logf("EXPECTED: %d", expected)
|
||||
t.Logf("ACTUAL: %d", actual)
|
||||
return
|
||||
}
|
||||
}
|
||||
|
||||
{
|
||||
r, n, err := runescanner.ReadRune()
|
||||
if nil != err {
|
||||
t.Errorf("Did not expect an error when trying to .ReadRune() but actually got one.")
|
||||
t.Logf("ERROR: (%T) %s", err, err)
|
||||
return
|
||||
}
|
||||
|
||||
{
|
||||
expected := ' '
|
||||
actual := r
|
||||
|
||||
if expected != actual {
|
||||
t.Errorf("The actual read rune is not what was expected.")
|
||||
t.Logf("EXPECTED: %q (%U)", expected, expected)
|
||||
t.Logf("ACTUAL: %q (%U)", actual, actual)
|
||||
return
|
||||
}
|
||||
}
|
||||
|
||||
{
|
||||
expected := 1
|
||||
actual := n
|
||||
|
||||
if expected != actual {
|
||||
t.Errorf("The actual number of bytes read is not what was expected.")
|
||||
t.Logf("EXPECTED: %d", expected)
|
||||
t.Logf("ACTUAL: %d", actual)
|
||||
return
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
{
|
||||
expected := 0
|
||||
actual := runescanner.Buffered()
|
||||
|
||||
if expected != actual {
|
||||
t.Errorf("The actual number of buffered-bytes is not was expected.")
|
||||
t.Logf("EXPECTED: %d", expected)
|
||||
t.Logf("ACTUAL: %d", actual)
|
||||
return
|
||||
}
|
||||
}
|
||||
|
||||
{
|
||||
err := runescanner.UnreadRune()
|
||||
if nil != err {
|
||||
t.Errorf("Did not expect an error when trying to .UnreadRune() but actually got one.")
|
||||
t.Logf("ERROR: (%T) %s", err, err)
|
||||
return
|
||||
}
|
||||
}
|
||||
|
||||
{
|
||||
expected := 1
|
||||
actual := runescanner.Buffered()
|
||||
|
||||
if expected != actual {
|
||||
t.Errorf("The actual number of buffered-bytes is not was expected.")
|
||||
t.Logf("EXPECTED: %d", expected)
|
||||
t.Logf("ACTUAL: %d", actual)
|
||||
return
|
||||
}
|
||||
}
|
||||
}
|
Loading…
Reference in New Issue