mirror of
https://github.com/kjanat/articulate-parser.git
synced 2026-10-13 00:55:27 +02:00
- Add logger to all exporters for consistent error handling - Add Course.Validate() method with ValidationError type - Create shared test fixtures in internal/testdata - Refactor config passing: NewArticulateParser now takes *config.Config - Add NewLoggerFromConfig() factory for logger creation - Add context cancellation with signal handling (SIGINT/SIGTERM) - Add godoc examples for loggers and exporters - Add HTML exporter error path tests - Add fuzz tests for parser and HTMLCleaner - Fix markdown output: trim whitespace, collapse blank lines - Remove test output files from repo
132 lines
3.3 KiB
Go
132 lines
3.3 KiB
Go
// Package exporters_test provides examples for the exporters package.
|
|
package exporters_test
|
|
|
|
import (
|
|
"fmt"
|
|
"log"
|
|
|
|
"github.com/kjanat/articulate-parser/internal/exporters"
|
|
"github.com/kjanat/articulate-parser/internal/models"
|
|
"github.com/kjanat/articulate-parser/internal/services"
|
|
)
|
|
|
|
// ExampleNewFactory demonstrates creating an exporter factory.
|
|
func ExampleNewFactory() {
|
|
htmlCleaner := services.NewHTMLCleaner()
|
|
factory := exporters.NewFactory(htmlCleaner, nil)
|
|
|
|
// Get supported formats
|
|
formats := factory.SupportedFormats()
|
|
fmt.Printf("Supported formats: %d\n", len(formats))
|
|
// Output: Supported formats: 6
|
|
}
|
|
|
|
// ExampleFactory_CreateExporter demonstrates creating exporters.
|
|
func ExampleFactory_CreateExporter() {
|
|
htmlCleaner := services.NewHTMLCleaner()
|
|
factory := exporters.NewFactory(htmlCleaner, nil)
|
|
|
|
// Create a markdown exporter
|
|
exporter, err := factory.CreateExporter("markdown")
|
|
if err != nil {
|
|
log.Fatal(err)
|
|
}
|
|
|
|
fmt.Printf("Created: %s exporter\n", exporter.SupportedFormat())
|
|
// Output: Created: markdown exporter
|
|
}
|
|
|
|
// ExampleFactory_CreateExporter_caseInsensitive demonstrates case-insensitive format names.
|
|
func ExampleFactory_CreateExporter_caseInsensitive() {
|
|
htmlCleaner := services.NewHTMLCleaner()
|
|
factory := exporters.NewFactory(htmlCleaner, nil)
|
|
|
|
// All these work (case-insensitive)
|
|
formats := []string{"MARKDOWN", "Markdown", "markdown", "MD"}
|
|
|
|
for _, format := range formats {
|
|
exporter, _ := factory.CreateExporter(format)
|
|
fmt.Printf("%s -> %s\n", format, exporter.SupportedFormat())
|
|
}
|
|
// Output:
|
|
// MARKDOWN -> markdown
|
|
// Markdown -> markdown
|
|
// markdown -> markdown
|
|
// MD -> markdown
|
|
}
|
|
|
|
// ExampleMarkdownExporter_Export demonstrates exporting to Markdown.
|
|
func ExampleMarkdownExporter_Export() {
|
|
htmlCleaner := services.NewHTMLCleaner()
|
|
exporter := exporters.NewMarkdownExporter(htmlCleaner, nil)
|
|
|
|
course := &models.Course{
|
|
ShareID: "example-id",
|
|
Course: models.CourseInfo{
|
|
Title: "Example Course",
|
|
Description: "<p>Course description</p>",
|
|
},
|
|
}
|
|
|
|
// Export to markdown file
|
|
err := exporter.Export(course, "output.md")
|
|
if err != nil {
|
|
log.Fatal(err)
|
|
}
|
|
|
|
fmt.Println("Export complete")
|
|
// Output: Export complete
|
|
}
|
|
|
|
// ExampleDocxExporter_Export demonstrates exporting to DOCX.
|
|
func ExampleDocxExporter_Export() {
|
|
htmlCleaner := services.NewHTMLCleaner()
|
|
exporter := exporters.NewDocxExporter(htmlCleaner, nil)
|
|
|
|
course := &models.Course{
|
|
ShareID: "example-id",
|
|
Course: models.CourseInfo{
|
|
Title: "Example Course",
|
|
},
|
|
}
|
|
|
|
// Export to Word document
|
|
err := exporter.Export(course, "output.docx")
|
|
if err != nil {
|
|
log.Fatal(err)
|
|
}
|
|
|
|
fmt.Println("DOCX export complete")
|
|
// Output: DOCX export complete
|
|
}
|
|
|
|
// ExampleHTMLExporter_Export demonstrates exporting to HTML.
|
|
func ExampleHTMLExporter_Export() {
|
|
htmlCleaner := services.NewHTMLCleaner()
|
|
exporter := exporters.NewHTMLExporter(htmlCleaner, nil)
|
|
|
|
course := &models.Course{
|
|
ShareID: "example-id",
|
|
Course: models.CourseInfo{
|
|
Title: "Example Course",
|
|
Description: "<p>A sample course</p>",
|
|
Lessons: []models.Lesson{
|
|
{
|
|
ID: "lesson-1",
|
|
Title: "Introduction",
|
|
Type: "lesson",
|
|
},
|
|
},
|
|
},
|
|
}
|
|
|
|
// Export to HTML file
|
|
err := exporter.Export(course, "output.html")
|
|
if err != nil {
|
|
log.Fatal(err)
|
|
}
|
|
|
|
fmt.Println("HTML export complete")
|
|
// Output: HTML export complete
|
|
}
|