fixed bug in textstyleparser + added unittests

This commit is contained in:
Bernhard B
2023-08-21 20:04:28 +02:00
parent a332215a9e
commit 759ba197a1
2 changed files with 61 additions and 24 deletions

View File

@@ -12,17 +12,18 @@ const (
const (
None int = 0
BoldBegin = 1
BoldEnd = 2
ItalicBegin = 3
ItalicEnd1 = 4
ItalicEnd2 = 5
ItalicBegin = 1
ItalicEnd = 2
BoldBegin = 3
BoldEnd1 = 4
BoldEnd2 = 5
)
func ParseMarkdownMessage(message string) (string, []string) {
textFormat := Normal
textFormatBegin := 0
textFormatEnd := 0
textFormatLength := 0
numOfAsterisks := 0
state := None
signalCliFormatStrings := []string{}
fullString := ""
@@ -31,34 +32,36 @@ func ParseMarkdownMessage(message string) (string, []string) {
for i, v := range runes { //iterate through rune
if v == '*' {
if state == BoldBegin {
if state == ItalicBegin {
if i-1 == textFormatBegin {
state = ItalicBegin
textFormat = Italic
textFormatBegin = i
} else {
state = BoldEnd
textFormatEnd = i - 1
}
} else if state == None {
state = BoldBegin
textFormat = Bold
textFormatBegin = i
} else if state == ItalicBegin {
state = ItalicEnd1
textFormatEnd = i - 1
} else if state == ItalicEnd1 {
state = ItalicEnd2
}
textFormatBegin = i - numOfAsterisks
textFormatLength = 0
} else {
state = ItalicEnd
}
} else if state == None {
state = ItalicBegin
textFormat = Italic
textFormatBegin = i - numOfAsterisks
textFormatLength = 0
} else if state == BoldBegin {
state = BoldEnd1
} else if state == BoldEnd1 {
state = BoldEnd2
}
numOfAsterisks += 1
} else {
textFormatLength += 1
fullString += string(v)
}
if state == BoldEnd || state == ItalicEnd2 {
signalCliFormatStrings = append(signalCliFormatStrings, strconv.Itoa(textFormatBegin)+":"+strconv.Itoa(textFormatEnd-textFormatBegin)+":"+textFormat)
if state == ItalicEnd || state == BoldEnd2 {
signalCliFormatStrings = append(signalCliFormatStrings, strconv.Itoa(textFormatBegin)+":"+strconv.Itoa(textFormatLength)+":"+textFormat)
state = None
textFormatBegin = 0
textFormatEnd = 0
textFormatLength = 0
textFormat = Normal
}
}

View File

@@ -0,0 +1,34 @@
package utils
import "testing"
import "reflect"
func expectMessageEqual(t *testing.T, message1 string, message2 string) {
if message1 != message2 {
t.Errorf("got %q, wanted %q", message1, message2)
}
}
func expectFormatStringsEqual(t *testing.T, formatStrings1 []string, formatStrings2 []string) {
if !reflect.DeepEqual(formatStrings1, formatStrings2) {
t.Errorf("got %q, wanted %q", formatStrings1, formatStrings2)
}
}
func TestSimpleMessage1(t *testing.T) {
message, signalCliFormatStrings := ParseMarkdownMessage("*italic*")
expectMessageEqual(t, message, "italic")
expectFormatStringsEqual(t, signalCliFormatStrings, []string{"0:6:ITALIC"})
}
func TestSimpleMessage(t *testing.T) {
message, signalCliFormatStrings := ParseMarkdownMessage("*This is a italic message*")
expectMessageEqual(t, message, "This is a italic message")
expectFormatStringsEqual(t, signalCliFormatStrings, []string{"0:24:ITALIC"})
}
func TestBoldAndItalicMessage(t *testing.T) {
message, signalCliFormatStrings := ParseMarkdownMessage("This is a **bold** and *italic* message")
expectMessageEqual(t, message, "This is a bold and italic message")
expectFormatStringsEqual(t, signalCliFormatStrings, []string{"10:4:BOLD", "19:6:ITALIC"})
}