40 lines
1.2 KiB
Go
40 lines
1.2 KiB
Go
// Copyright (c) 2026 Petr Balvín <opensource@petrbalvin.org> (https://petrbalvin.org)
|
|
// SPDX-License-Identifier: BSD-3-Clause
|
|
|
|
//go:build integration
|
|
|
|
// Package parser integration tests against the production go-libraries kernels.
|
|
// Excluded from the default test run so coverage is identical locally and in CI.
|
|
// Run explicitly with: go test -tags=integration ./parser/
|
|
package parser
|
|
|
|
import (
|
|
"os"
|
|
"path/filepath"
|
|
"testing"
|
|
)
|
|
|
|
// TestParseRealGoLibraries parses every .s file in the sibling go-libraries
|
|
// repository when it is checked out, asserting a clean, error-free parse.
|
|
func TestParseRealGoLibraries(t *testing.T) {
|
|
matches, _ := filepath.Glob("../../go-libraries/go-*/*.s")
|
|
if len(matches) == 0 {
|
|
t.Skip("go-libraries repository not present next to gasm-devkit")
|
|
}
|
|
for _, path := range matches {
|
|
src, err := os.ReadFile(path)
|
|
if err != nil {
|
|
t.Fatalf("read %s: %v", path, err)
|
|
}
|
|
file, errs := Parse(path, string(src))
|
|
if len(errs) > 0 {
|
|
t.Errorf("parse %s: %v", path, errs)
|
|
continue
|
|
}
|
|
if len(texts(file)) == 0 {
|
|
t.Errorf("parse %s: no TEXT functions found", path)
|
|
}
|
|
t.Logf("%s: %d decls, %d functions", filepath.Base(path), len(file.Decls), len(texts(file)))
|
|
}
|
|
}
|