mirror of
https://github.com/kjanat/articulate-parser.git
synced 2026-01-16 09:02:10 +01:00
Add comprehensive unit tests for services and main package
- Implement tests for the app service, including course processing from file and URI. - Create mock implementations for CourseParser and Exporter to facilitate testing. - Add tests for HTML cleaner service to validate HTML content cleaning functionality. - Develop tests for the parser service, covering course fetching and loading from files. - Introduce tests for utility functions in the main package, ensuring URI validation and string joining. - Include benchmarks for performance evaluation of key functions.
This commit is contained in:
175
main_test.go
Normal file
175
main_test.go
Normal file
@ -0,0 +1,175 @@
|
||||
// Package main_test provides tests for the main package utility functions.
|
||||
package main
|
||||
|
||||
import (
|
||||
"testing"
|
||||
)
|
||||
|
||||
// TestIsURI tests the isURI function with various input scenarios.
|
||||
func TestIsURI(t *testing.T) {
|
||||
tests := []struct {
|
||||
name string
|
||||
input string
|
||||
expected bool
|
||||
}{
|
||||
{
|
||||
name: "valid HTTP URI",
|
||||
input: "http://example.com",
|
||||
expected: true,
|
||||
},
|
||||
{
|
||||
name: "valid HTTPS URI",
|
||||
input: "https://example.com",
|
||||
expected: true,
|
||||
},
|
||||
{
|
||||
name: "valid Articulate Rise URI",
|
||||
input: "https://rise.articulate.com/share/N_APNg40Vr2CSH2xNz-ZLATM5kNviDIO#/",
|
||||
expected: true,
|
||||
},
|
||||
{
|
||||
name: "local file path",
|
||||
input: "C:\\Users\\test\\file.json",
|
||||
expected: false,
|
||||
},
|
||||
{
|
||||
name: "relative file path",
|
||||
input: "./sample.json",
|
||||
expected: false,
|
||||
},
|
||||
{
|
||||
name: "filename only",
|
||||
input: "sample.json",
|
||||
expected: false,
|
||||
},
|
||||
{
|
||||
name: "empty string",
|
||||
input: "",
|
||||
expected: false,
|
||||
},
|
||||
{
|
||||
name: "short string",
|
||||
input: "http",
|
||||
expected: false,
|
||||
},
|
||||
{
|
||||
name: "malformed URI",
|
||||
input: "htp://example.com",
|
||||
expected: false,
|
||||
},
|
||||
{
|
||||
name: "FTP URI",
|
||||
input: "ftp://example.com",
|
||||
expected: false,
|
||||
},
|
||||
{
|
||||
name: "HTTP with extra characters",
|
||||
input: "xhttp://example.com",
|
||||
expected: false,
|
||||
},
|
||||
}
|
||||
|
||||
for _, tt := range tests {
|
||||
t.Run(tt.name, func(t *testing.T) {
|
||||
result := isURI(tt.input)
|
||||
if result != tt.expected {
|
||||
t.Errorf("isURI(%q) = %v, want %v", tt.input, result, tt.expected)
|
||||
}
|
||||
})
|
||||
}
|
||||
}
|
||||
|
||||
// TestJoinStrings tests the joinStrings function with various input scenarios.
|
||||
func TestJoinStrings(t *testing.T) {
|
||||
tests := []struct {
|
||||
name string
|
||||
strs []string
|
||||
separator string
|
||||
expected string
|
||||
}{
|
||||
{
|
||||
name: "empty slice",
|
||||
strs: []string{},
|
||||
separator: ", ",
|
||||
expected: "",
|
||||
},
|
||||
{
|
||||
name: "single string",
|
||||
strs: []string{"hello"},
|
||||
separator: ", ",
|
||||
expected: "hello",
|
||||
},
|
||||
{
|
||||
name: "two strings with comma separator",
|
||||
strs: []string{"markdown", "docx"},
|
||||
separator: ", ",
|
||||
expected: "markdown, docx",
|
||||
},
|
||||
{
|
||||
name: "three strings with comma separator",
|
||||
strs: []string{"markdown", "md", "docx"},
|
||||
separator: ", ",
|
||||
expected: "markdown, md, docx",
|
||||
},
|
||||
{
|
||||
name: "multiple strings with pipe separator",
|
||||
strs: []string{"option1", "option2", "option3"},
|
||||
separator: " | ",
|
||||
expected: "option1 | option2 | option3",
|
||||
},
|
||||
{
|
||||
name: "strings with no separator",
|
||||
strs: []string{"a", "b", "c"},
|
||||
separator: "",
|
||||
expected: "abc",
|
||||
},
|
||||
{
|
||||
name: "strings with newline separator",
|
||||
strs: []string{"line1", "line2", "line3"},
|
||||
separator: "\n",
|
||||
expected: "line1\nline2\nline3",
|
||||
},
|
||||
{
|
||||
name: "empty strings in slice",
|
||||
strs: []string{"", "middle", ""},
|
||||
separator: "-",
|
||||
expected: "-middle-",
|
||||
},
|
||||
{
|
||||
name: "nil slice",
|
||||
strs: nil,
|
||||
separator: ", ",
|
||||
expected: "",
|
||||
},
|
||||
}
|
||||
|
||||
for _, tt := range tests {
|
||||
t.Run(tt.name, func(t *testing.T) {
|
||||
result := joinStrings(tt.strs, tt.separator)
|
||||
if result != tt.expected {
|
||||
t.Errorf("joinStrings(%v, %q) = %q, want %q", tt.strs, tt.separator, result, tt.expected)
|
||||
}
|
||||
})
|
||||
}
|
||||
}
|
||||
|
||||
// BenchmarkIsURI benchmarks the isURI function performance.
|
||||
func BenchmarkIsURI(b *testing.B) {
|
||||
testStr := "https://rise.articulate.com/share/N_APNg40Vr2CSH2xNz-ZLATM5kNviDIO#/"
|
||||
|
||||
b.ResetTimer()
|
||||
for i := 0; i < b.N; i++ {
|
||||
isURI(testStr)
|
||||
}
|
||||
}
|
||||
|
||||
// BenchmarkJoinStrings benchmarks the joinStrings function performance.
|
||||
func BenchmarkJoinStrings(b *testing.B) {
|
||||
strs := []string{"markdown", "md", "docx", "word", "pdf", "html"}
|
||||
separator := ", "
|
||||
|
||||
b.ResetTimer()
|
||||
for i := 0; i < b.N; i++ {
|
||||
joinStrings(strs, separator)
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user