v2 / cmd / tools / modules / vbugreport / report_test.v
55 lines · 50 sloc · 2.34 KB · 4ab6d9031022fbcfd59a621ee64600abe13053dd
Raw
1module vbugreport
2
3import os
4import net.urllib
5
6fn sample_bug_report() BugReport {
7 return BugReport{
8 description: 'Running `./vdbg examples/fail.v` produced a compiler error.'
9 reproduction: '```sh\n./vdbg examples/fail.v\n```\n\n```v\nfn main() {}\n```'
10 expected: 'An error message.'
11 current: '```\nbuilder error\n```'
12 solution: '_No response_'
13 context: 'Generated by `v bug`.'
14 version: 'V 0.0.0 deadbeef'
15 environment: '```\nOS: linux\n```'
16 }
17}
18
19fn test_github_issue_form_uri_prefills_bug_report_fields() {
20 report := sample_bug_report()
21 uri := github_issue_form_uri(report)
22 assert uri.starts_with(github_bug_issue_form_base_uri + '&')
23 assert !uri.contains('body=')
24
25 query := urllib.parse_query(uri.all_after('?')) or { panic(err) }
26 assert (query.get('template') or { panic(err) }) == 'bug-report.yml'
27 assert (query.get('description') or { panic(err) }) == report.description
28 assert (query.get('reproduction') or { panic(err) }) == report.reproduction
29 assert (query.get('expected') or { panic(err) }) == report.expected
30 assert (query.get('current') or { panic(err) }) == report.current
31 assert (query.get('solution') or { panic(err) }) == report.solution
32 assert (query.get('context') or { panic(err) }) == report.context
33 assert (query.get('version') or { panic(err) }) == report.version
34 assert (query.get('environment') or { panic(err) }) == report.environment
35}
36
37fn test_prepare_bug_report_delivery_falls_back_to_local_report_for_large_reports() {
38 report := BugReport{
39 description: 'Running `./vdbg examples/fail.v` produced a compiler error.'
40 reproduction: '```sh\n./vdbg examples/fail.v\n```\n\n```v\nfn main() {}\n```'
41 expected: 'An error message.'
42 current: 'X'.repeat(github_issue_form_url_soft_limit)
43 solution: '_No response_'
44 context: 'Generated by `v bug`.'
45 version: 'V 0.0.0 deadbeef'
46 environment: '```\nOS: linux\n```'
47 }
48 delivery := prepare_bug_report_delivery(report, os.join_path('examples', 'foo', 'bar.v'))
49 assert delivery.mode == .local_report
50 assert delivery.uri == github_bug_issue_form_base_uri
51 assert delivery.local_report_path == os.join_path('examples', 'foo', 'bar.bug-report.md')
52 assert delivery.local_report_body.starts_with('# V Bug Report')
53 assert delivery.local_report_body.contains('### Current Behavior')
54 assert delivery.local_report_body.contains(report.current)
55}
56