module vbugreport import os import net.urllib fn sample_bug_report() BugReport { return BugReport{ description: 'Running `./vdbg examples/fail.v` produced a compiler error.' reproduction: '```sh\n./vdbg examples/fail.v\n```\n\n```v\nfn main() {}\n```' expected: 'An error message.' current: '```\nbuilder error\n```' solution: '_No response_' context: 'Generated by `v bug`.' version: 'V 0.0.0 deadbeef' environment: '```\nOS: linux\n```' } } fn test_github_issue_form_uri_prefills_bug_report_fields() { report := sample_bug_report() uri := github_issue_form_uri(report) assert uri.starts_with(github_bug_issue_form_base_uri + '&') assert !uri.contains('body=') query := urllib.parse_query(uri.all_after('?')) or { panic(err) } assert (query.get('template') or { panic(err) }) == 'bug-report.yml' assert (query.get('description') or { panic(err) }) == report.description assert (query.get('reproduction') or { panic(err) }) == report.reproduction assert (query.get('expected') or { panic(err) }) == report.expected assert (query.get('current') or { panic(err) }) == report.current assert (query.get('solution') or { panic(err) }) == report.solution assert (query.get('context') or { panic(err) }) == report.context assert (query.get('version') or { panic(err) }) == report.version assert (query.get('environment') or { panic(err) }) == report.environment } fn test_prepare_bug_report_delivery_falls_back_to_local_report_for_large_reports() { report := BugReport{ description: 'Running `./vdbg examples/fail.v` produced a compiler error.' reproduction: '```sh\n./vdbg examples/fail.v\n```\n\n```v\nfn main() {}\n```' expected: 'An error message.' current: 'X'.repeat(github_issue_form_url_soft_limit) solution: '_No response_' context: 'Generated by `v bug`.' version: 'V 0.0.0 deadbeef' environment: '```\nOS: linux\n```' } delivery := prepare_bug_report_delivery(report, os.join_path('examples', 'foo', 'bar.v')) assert delivery.mode == .local_report assert delivery.uri == github_bug_issue_form_base_uri assert delivery.local_report_path == os.join_path('examples', 'foo', 'bar.bug-report.md') assert delivery.local_report_body.starts_with('# V Bug Report') assert delivery.local_report_body.contains('### Current Behavior') assert delivery.local_report_body.contains(report.current) }