| 540 | } |
| 541 | |
| 542 | func TestExtract(t *testing.T) { |
| 543 | tests := []struct { |
| 544 | desc string |
| 545 | input parse.SourceUnit |
| 546 | want Package |
| 547 | }{ |
| 548 | { |
| 549 | desc: "package decl contains extra atoms", |
| 550 | input: parse.SourceUnit{ |
| 551 | Clauses: []ast.Clause{}, |
| 552 | Decls: []ast.Decl{ |
| 553 | makeDecl(t, ast.NewAtom("Package"), []ast.Atom{ast.NewAtom("name", ast.String("foo.bar")), ast.NewAtom("extra", ast.String("string"))}, nil, nil), |
| 554 | }, |
| 555 | }, |
| 556 | want: Package{ |
| 557 | Name: "foo.bar", |
| 558 | Atoms: []ast.Atom{ast.NewAtom("extra", ast.String("string"))}, |
| 559 | units: []parse.SourceUnit{ |
| 560 | { |
| 561 | Clauses: []ast.Clause{}, |
| 562 | Decls: []ast.Decl{ |
| 563 | makeDecl(t, ast.NewAtom("Package"), []ast.Atom{ast.NewAtom("name", ast.String("foo.bar")), ast.NewAtom("extra", ast.String("string"))}, nil, nil), |
| 564 | }, |
| 565 | }, |
| 566 | }, |
| 567 | }, |
| 568 | }, |
| 569 | { |
| 570 | desc: "contains package decl", |
| 571 | input: parse.SourceUnit{ |
| 572 | Clauses: []ast.Clause{ |
| 573 | ast.NewClause(ast.NewAtom("head", ast.Variable{"X"}), []ast.Term{ast.NewAtom("expanded", ast.Variable{"X"})}), |
| 574 | ast.NewClause(ast.NewAtom("expanded", ast.Variable{"X"}), []ast.Term{ast.String("constant")}), |
| 575 | }, |
| 576 | Decls: []ast.Decl{ |
| 577 | makeDecl(t, ast.NewAtom("head"), nil, nil, nil), |
| 578 | makeDecl(t, ast.NewAtom("Package"), []ast.Atom{ast.NewAtom("name", ast.String("foo.bar"))}, nil, nil), |
| 579 | }, |
| 580 | }, |
| 581 | want: Package{ |
| 582 | Name: "foo.bar", |
| 583 | Atoms: []ast.Atom{}, |
| 584 | units: []parse.SourceUnit{ |
| 585 | { |
| 586 | Clauses: []ast.Clause{ |
| 587 | ast.NewClause(ast.NewAtom("head", ast.Variable{"X"}), []ast.Term{ast.NewAtom("expanded", ast.Variable{"X"})}), |
| 588 | ast.NewClause(ast.NewAtom("expanded", ast.Variable{"X"}), []ast.Term{ast.String("constant")}), |
| 589 | }, |
| 590 | Decls: []ast.Decl{ |
| 591 | makeDecl(t, ast.NewAtom("head"), nil, nil, nil), |
| 592 | makeDecl(t, ast.NewAtom("Package"), []ast.Atom{ast.NewAtom("name", ast.String("foo.bar"))}, nil, nil), |
| 593 | }, |
| 594 | }, |
| 595 | }, |
| 596 | }, |
| 597 | }, |
| 598 | { |
| 599 | desc: "does not contain package decl", |