aurels-rbib 1.2 → 2.0

Sign up to get free protection for your applications and to get access to all the features.
@@ -0,0 +1,15 @@
1
+ #!/usr/bin/env ruby
2
+
3
+ #
4
+ # Run all the unit tests in the current directory.
5
+ #
6
+
7
+ require 'test/unit'
8
+
9
+ $LOAD_PATH.unshift(File.join(File.dirname(__FILE__), '..', 'lib'))
10
+ require "bibtex"
11
+
12
+ Dir.glob(File.join(File.dirname(__FILE__), '..', 'test', 'test_*.rb')).each do |file|
13
+ require file
14
+ end
15
+
@@ -0,0 +1,76 @@
1
+ require 'bibtex/bibliography'
2
+ require 'test/unit'
3
+
4
+ class TestBibliography < Test::Unit::TestCase
5
+ include Bibtex
6
+
7
+ def setup
8
+ @b = Bibliography.new
9
+
10
+ @foo01 = Entry.new(EntryType::Book, 'foo01')
11
+ @foo01.add_field :author, 'C. Doof'
12
+ @foo01.add_field :year, 2007
13
+ @foo01.add_field Field.new(:url, 'www.doof.me.uk')
14
+
15
+ @bar99 = Entry.new(EntryType::Article, 'bar99')
16
+ @bar99.add_field :author, 'N. Cakesniffer'
17
+ @bar99.add_field :year, 1999
18
+ @bar99.add_field Field.new(:url, 'www.cakesniffer.co.uk')
19
+
20
+ @b << @foo01
21
+ @b << @bar99
22
+ end
23
+
24
+ def test_basic
25
+ assert_equal 2, @b.entries.length
26
+ assert_equal @foo01, @b['foo01']
27
+ end
28
+
29
+ def test_map
30
+ expect = <<END
31
+ @article{bar99,
32
+ author = {N. Cakesniffer},
33
+ year = {1999}
34
+ }
35
+
36
+ @book{foo01,
37
+ author = {C. Doof},
38
+ year = {2007}
39
+ }
40
+
41
+ END
42
+ urlless = @b.map do |e|
43
+ e.reject_fields [:url]
44
+ end
45
+ assert_equal expect, urlless.to_s
46
+ end
47
+
48
+ def test_to_s
49
+ expect = <<END
50
+ @article{bar99,
51
+ author = {N. Cakesniffer},
52
+ url = {www.cakesniffer.co.uk},
53
+ year = {1999}
54
+ }
55
+
56
+ @book{foo01,
57
+ author = {C. Doof},
58
+ url = {www.doof.me.uk},
59
+ year = {2007}
60
+ }
61
+
62
+ END
63
+ assert_equal expect, @b.to_s
64
+ end
65
+
66
+ def test_save
67
+ fname = '/tmp/_test.bib'
68
+ @b.save fname
69
+
70
+ f = File.new(fname)
71
+ assert_equal @b.to_s, f.read
72
+ f.close
73
+ File.delete fname
74
+ end
75
+
76
+ end
@@ -0,0 +1,70 @@
1
+ require 'bibtex/entry'
2
+ require 'test/unit'
3
+
4
+ class TestEntry < Test::Unit::TestCase
5
+ include Bibtex
6
+
7
+ def setup
8
+ @e = Entry.new(EntryType::Book, 'foo01')
9
+ end
10
+
11
+ def test_basic
12
+ assert_equal EntryType::Book, @e.type
13
+ assert_equal 'foo01', @e.key
14
+ end
15
+
16
+ def add_default_fields
17
+ @e.add_field :author, 'C. Doof'
18
+ @e.add_field :year, 2007
19
+ @e.add_field Field.new(:url, 'www.doof.me.uk')
20
+ end
21
+
22
+ def test_fields
23
+ add_default_fields
24
+
25
+ assert_equal 'C. Doof', @e[:author]
26
+ assert_equal 2007, @e[:year]
27
+ assert_equal 'www.doof.me.uk', @e[:url]
28
+ end
29
+
30
+ def test_to_s
31
+ add_default_fields
32
+
33
+ expect = <<END
34
+ @book{foo01,
35
+ author = {C. Doof},
36
+ url = {www.doof.me.uk},
37
+ year = {2007}
38
+ }
39
+
40
+ END
41
+ assert_equal expect, @e.to_s
42
+ end
43
+
44
+ def test_reject
45
+ add_default_fields
46
+
47
+ expect = <<END
48
+ @book{foo01,
49
+ author = {C. Doof},
50
+ year = {2007}
51
+ }
52
+
53
+ END
54
+ r = @e.reject_fields [:url]
55
+ assert_equal expect, r.to_s
56
+ end
57
+
58
+ def test_select
59
+ add_default_fields
60
+
61
+ expect = <<END
62
+ @book{foo01,
63
+ url = {www.doof.me.uk}
64
+ }
65
+
66
+ END
67
+ r = @e.select_fields [:url]
68
+ assert_equal expect, r.to_s
69
+ end
70
+ end
@@ -0,0 +1,17 @@
1
+ require 'bibtex/field'
2
+ require 'test/unit'
3
+
4
+ class TestField < Test::Unit::TestCase
5
+ include Bibtex
6
+
7
+ def test_basic
8
+ f = Field.new(:author, 'C. Doof')
9
+ assert_equal :author, f.key
10
+ assert_equal 'C. Doof', f.value
11
+ end
12
+
13
+ def test_to_s
14
+ f = Field.new(:author, 'C. Doof')
15
+ assert_equal 'author = {C. Doof}', f.to_s
16
+ end
17
+ end
@@ -0,0 +1,116 @@
1
+ require 'bibtex/lexer'
2
+ require 'test/unit'
3
+
4
+ class TestLexer < Test::Unit::TestCase
5
+ include Bibtex
6
+
7
+ def test_basic
8
+ l = Lexer.new do |rules|
9
+ rules.match /a/, :a
10
+ rules.match /b+/, :bs
11
+ rules.match /\s+/, :space
12
+ rules.match /hello/, :hello
13
+ end
14
+ l.feed 'aabbb hello'
15
+
16
+ assert_equal :a, l.next_token!
17
+ assert_equal :a, l.next_token!
18
+ assert_equal :bs, l.next_token!
19
+ assert_equal :space, l.next_token!
20
+ assert_equal :hello, l.peek_token
21
+ assert_equal 'hello', l.peek_lval
22
+ assert_equal :hello, l.next_token!
23
+
24
+ assert (not l.more_tokens?)
25
+ assert_raise LexerError do
26
+ l.next_token!
27
+ end
28
+ end
29
+
30
+ def test_prec
31
+ l = Lexer.new do |rules|
32
+ rules.match /a/, :aye
33
+ rules.match /a+/, :bad
34
+ rules.match /.*/, :other
35
+ end
36
+ l.feed 'aa'
37
+ assert_equal :aye, l.next_token!
38
+ assert_equal :aye, l.next_token!
39
+ assert (not l.more_tokens?)
40
+ end
41
+
42
+ def test_whitespace
43
+ l = Lexer.new(false) do |rules|
44
+ rules.match /\w+/, :word
45
+ end
46
+ l.feed " hello\t\n world "
47
+
48
+ assert (not l.ignore_whitespace)
49
+ l.ignore_whitespace = true
50
+
51
+ assert_equal :word, l.next_token!
52
+ assert_equal 'hello', l.lval
53
+ assert_equal :word, l.next_token!
54
+ assert_equal 'world', l.lval
55
+ assert (not l.more_tokens?)
56
+ end
57
+
58
+ def test_src_pos
59
+ l = Lexer.new do |rules|
60
+ rules.match /a/, :a
61
+ rules.match /\n/, :newline
62
+ end
63
+ l.feed 'aaaab'
64
+
65
+ 4.times { l.next_token! }
66
+ begin
67
+ l.next_token!
68
+ flunk 'No exception raised'
69
+ rescue LexerError => e
70
+ assert_kind_of SourcePos, e.src_pos
71
+ assert_equal 1, e.src_pos.line
72
+ assert_equal 4, e.src_pos.column
73
+ end
74
+
75
+ l.ignore_newlines = false
76
+ l.feed "aa\nab"
77
+
78
+ l.file_name = 'My File'
79
+
80
+ 2.times { l.next_token! }
81
+ assert_equal :newline, l.next_token!
82
+ assert_equal :a, l.next_token!
83
+ begin
84
+ l.next_token!
85
+ flunk 'No error raised'
86
+ rescue LexerError => e
87
+ assert_equal 2, e.src_pos.line
88
+ assert_equal 1, e.src_pos.column
89
+ assert_equal 'My File', e.src_pos.file
90
+ end
91
+ end
92
+
93
+ def test_literals
94
+ l = Lexer.new do |rules|
95
+ rules.literals [:aye, :bee]
96
+ end
97
+ l.feed 'ayebeebee'
98
+
99
+ assert_equal :aye, l.next_token!
100
+ assert_equal :bee, l.next_token!
101
+ assert_equal :bee, l.next_token!
102
+ end
103
+
104
+ def test_refeed
105
+ l = Lexer.new do |rules|
106
+ rules.match /a/, :a
107
+ rules.match /b/, :b
108
+ end
109
+ l.feed 'aaa'
110
+
111
+ assert_equal :a, l.next_token!
112
+ l.feed 'bb'
113
+ assert l.more_tokens?
114
+ assert_equal :b, l.next_token!
115
+ end
116
+ end
@@ -0,0 +1,27 @@
1
+ require 'bibtex/parser'
2
+ require 'test/unit'
3
+
4
+ class TestParser < Test::Unit::TestCase
5
+ include Bibtex
6
+
7
+ def test_basic
8
+ b = Parser.parse 'examples/example.bib'
9
+
10
+ ryan98 = b['ryan98']
11
+ assert_kind_of Entry, ryan98
12
+ assert_equal EntryType::Article, ryan98.type
13
+ assert_equal 1998, ryan98[:year].to_i
14
+
15
+ heys01 = b['heys01']
16
+ assert_equal "March", heys01[:month]
17
+ assert_equal 2001, heys01[:year].to_i
18
+ end
19
+
20
+ def test_parse_reparse
21
+ fname = '/tmp/example.bib.stripped'
22
+ b = Parser.parse 'examples/example.bib'
23
+ b.save fname
24
+ Parser.parse fname
25
+ File.delete fname
26
+ end
27
+ end
metadata CHANGED
@@ -1,35 +1,62 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: aurels-rbib
3
3
  version: !ruby/object:Gem::Version
4
- version: "1.2"
4
+ version: "2.0"
5
5
  platform: ruby
6
6
  authors:
7
- - Nick Gasson
8
- - "Aur\xC3\xA9lien Malisart"
7
+ - "Nick Gasson, Aur\xC3\xA9lien Malisart"
9
8
  autorequire:
10
9
  bindir: bin
11
10
  cert_chain: []
12
11
 
13
- date: 2009-05-07 00:00:00 -07:00
12
+ date: 2009-05-10 00:00:00 -07:00
14
13
  default_executable:
15
14
  dependencies: []
16
15
 
17
- description: BibTeX parser in Ruby
16
+ description: BibTeX parser written in Ruby
18
17
  email: aurelien.malisart@gmail.com
19
18
  executables: []
20
19
 
21
20
  extensions: []
22
21
 
23
- extra_rdoc_files: []
24
-
22
+ extra_rdoc_files:
23
+ - lib/bibtex/bibliography.rb
24
+ - lib/bibtex/entry.rb
25
+ - lib/bibtex/field.rb
26
+ - lib/bibtex/lexer.rb
27
+ - lib/bibtex/parser.rb
28
+ - lib/bibtex.rb
29
+ - README.rdoc
25
30
  files:
26
- - README
31
+ - examples/example.bib
32
+ - examples/glom_citeulike.rb
33
+ - examples/tara_no_url.rb
34
+ - lib/bibtex/bibliography.rb
35
+ - lib/bibtex/entry.rb
36
+ - lib/bibtex/field.rb
37
+ - lib/bibtex/lexer.rb
38
+ - lib/bibtex/parser.rb
27
39
  - lib/bibtex.rb
28
- has_rdoc: false
40
+ - Manifest
41
+ - Rakefile
42
+ - rbib.gemspec
43
+ - README.rdoc
44
+ - test/run_unit_tests.rb
45
+ - test/test_bibliography.rb
46
+ - test/test_entry.rb
47
+ - test/test_field.rb
48
+ - test/test_lexer.rb
49
+ - test/test_parser.rb
50
+ has_rdoc: true
29
51
  homepage: http://github.com/aurels/rbib
30
52
  post_install_message:
31
- rdoc_options: []
32
-
53
+ rdoc_options:
54
+ - --line-numbers
55
+ - --inline-source
56
+ - --title
57
+ - Rbib
58
+ - --main
59
+ - README.rdoc
33
60
  require_paths:
34
61
  - lib
35
62
  required_ruby_version: !ruby/object:Gem::Requirement
@@ -42,14 +69,18 @@ required_rubygems_version: !ruby/object:Gem::Requirement
42
69
  requirements:
43
70
  - - ">="
44
71
  - !ruby/object:Gem::Version
45
- version: "0"
72
+ version: "1.2"
46
73
  version:
47
74
  requirements: []
48
75
 
49
- rubyforge_project:
76
+ rubyforge_project: rbib
50
77
  rubygems_version: 1.2.0
51
78
  signing_key:
52
79
  specification_version: 2
53
- summary: BibTeX parser in Ruby
54
- test_files: []
55
-
80
+ summary: BibTeX parser written in Ruby
81
+ test_files:
82
+ - test/test_bibliography.rb
83
+ - test/test_entry.rb
84
+ - test/test_field.rb
85
+ - test/test_lexer.rb
86
+ - test/test_parser.rb
data/README DELETED
@@ -1,20 +0,0 @@
1
- Parser for BibTeX files written in Ruby. No dependencies (except Test::Unit if
2
- you need to run the tests).
3
-
4
- By Nick Gasson (http://www.doof.me.uk)
5
-
6
- Example of usage:
7
-
8
- require 'rubygems'
9
- require 'bibtex'
10
-
11
- BibTeX::Parser.parse('references.bib').map do |entry|
12
- puts entry[:Title]
13
- puts entry[:Year]
14
- entry
15
- end
16
-
17
- Installation:
18
-
19
- gem sources -a http://gems.github.com
20
- gem install aurels-rbib