eaglecad 0 → 1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (43) hide show
  1. data/Gemfile +5 -1
  2. data/README.markdown +29 -0
  3. data/Rakefile +9 -0
  4. data/eaglecad.gemspec +4 -2
  5. data/lib/eaglecad.rb +15 -1
  6. data/lib/eaglecad/attribute.rb +47 -0
  7. data/lib/eaglecad/board.rb +184 -0
  8. data/lib/eaglecad/clearance.rb +31 -0
  9. data/lib/eaglecad/design_rules.rb +38 -0
  10. data/lib/eaglecad/deviceset.rb +113 -0
  11. data/lib/eaglecad/drawing.rb +124 -0
  12. data/lib/eaglecad/geometry.rb +259 -0
  13. data/lib/eaglecad/layer.rb +40 -0
  14. data/lib/eaglecad/library.rb +73 -0
  15. data/lib/eaglecad/package.rb +74 -0
  16. data/lib/eaglecad/part.rb +29 -0
  17. data/lib/eaglecad/schematic.rb +83 -0
  18. data/lib/eaglecad/sheet.rb +256 -0
  19. data/lib/eaglecad/symbol.rb +73 -0
  20. data/test/eaglecad.rb +12 -0
  21. data/test/eaglecad/board.rb +68 -0
  22. data/test/eaglecad/design_rules.rb +38 -0
  23. data/test/eaglecad/deviceset.rb +52 -0
  24. data/test/eaglecad/drawing.rb +94 -0
  25. data/test/eaglecad/library.rb +47 -0
  26. data/test/eaglecad/package.rb +60 -0
  27. data/test/eaglecad/schematic.rb +50 -0
  28. data/test/eaglecad/sheet.rb +24 -0
  29. data/test/eaglecad/symbol.rb +41 -0
  30. data/test/fixtures/board.xml +859 -0
  31. data/test/fixtures/demo1.sch +10932 -0
  32. data/test/fixtures/design_rules.xml +70 -0
  33. data/test/fixtures/deviceset.xml +683 -0
  34. data/test/fixtures/drawing_board.xml +910 -0
  35. data/test/fixtures/drawing_schematic.xml +10928 -0
  36. data/test/fixtures/hexapodu.brd +1863 -0
  37. data/test/fixtures/library.xml +175 -0
  38. data/test/fixtures/package.xml +28 -0
  39. data/test/fixtures/schematic.xml +10861 -0
  40. data/test/fixtures/sheet.xml +318 -0
  41. data/test/fixtures/symbol.xml +11 -0
  42. metadata +79 -5
  43. data/README.md +0 -29
@@ -0,0 +1,12 @@
1
+ require 'minitest/autorun'
2
+ require 'eaglecad'
3
+
4
+ describe EagleCAD do
5
+ describe "when reading a schematic file" do
6
+ subject { EagleCAD.read('test/fixtures/demo1.sch') }
7
+
8
+ it "must return a Drawing object" do
9
+ subject.must_be_kind_of(EagleCAD::Drawing)
10
+ end
11
+ end
12
+ end
@@ -0,0 +1,68 @@
1
+ require 'minitest/autorun'
2
+ require 'eaglecad/board'
3
+
4
+ describe EagleCAD::Board do
5
+ describe "when initialized with an XML element" do
6
+ subject { EagleCAD::Board.from_xml(REXML::Document.new(File.open('test/fixtures/board.xml')).elements.first) }
7
+
8
+ it "must have a description" do
9
+ subject.description.must_equal 'Board Description'
10
+ end
11
+
12
+ it "must have the correct number of libraries" do
13
+ subject.libraries.size.must_equal 6
14
+ end
15
+
16
+ it "must have the correct number of elements" do
17
+ subject.elements.size.must_equal 12
18
+ end
19
+
20
+ describe "when generating XML" do
21
+ let(:element) { subject.to_xml }
22
+
23
+ it "must generate a proper XML element" do
24
+ element.must_be_instance_of REXML::Element
25
+ end
26
+ end
27
+
28
+ describe "when generating XML" do
29
+ let(:element) { subject.to_xml }
30
+
31
+ it "must generate a proper XML element" do
32
+ element.must_be_instance_of REXML::Element
33
+ end
34
+
35
+ it "must have a description" do
36
+ element.elements['description'].text.must_equal 'Board Description'
37
+ end
38
+
39
+ it "must have an attributes container" do
40
+ element.elements['attributes'].count.must_equal 0
41
+ end
42
+
43
+ it "must have an autorouter container" do
44
+ element.elements['autorouter'].count.must_equal 4
45
+ end
46
+
47
+ it "must have a classes container" do
48
+ element.elements['classes'].count.must_equal 2
49
+ end
50
+
51
+ it "must have a designrules container" do
52
+ element.elements['designrules'].count.must_equal 68
53
+ end
54
+
55
+ it "must have an elements container" do
56
+ element.elements['elements'].count.must_equal 12
57
+ end
58
+
59
+ it "must have a libraries container" do
60
+ element.elements['libraries'].count.must_equal 6
61
+ end
62
+
63
+ it "must have a plan container" do
64
+ element.elements['plain'].count.must_equal 4
65
+ end
66
+ end
67
+ end
68
+ end
@@ -0,0 +1,38 @@
1
+ require 'minitest/autorun'
2
+ require 'eaglecad/design_rules'
3
+
4
+ describe EagleCAD::DesignRules do
5
+ subject { EagleCAD::DesignRules.from_xml(REXML::Document.new(File.open('test/fixtures/design_rules.xml')).elements.first) }
6
+
7
+ it "must have a name" do
8
+ subject.name.must_equal 'Name'
9
+ end
10
+
11
+ it "must have a description" do
12
+ subject.description.must_equal 'Design Rule Description'
13
+ end
14
+
15
+ it "must have the correct number of parameters" do
16
+ subject.parameters.size.must_equal 67
17
+ end
18
+
19
+ describe "when generating XML" do
20
+ let(:element) { subject.to_xml }
21
+
22
+ it "must generate a proper XML element" do
23
+ element.must_be_instance_of REXML::Element
24
+ end
25
+
26
+ it "must have a name attribute" do
27
+ element.attributes['name'].must_equal 'Name'
28
+ end
29
+
30
+ it "must have a description element" do
31
+ element.elements['description'].text.must_equal 'Design Rule Description'
32
+ end
33
+
34
+ it "must have parameter elements" do
35
+ element.get_elements('param').count.must_equal 67
36
+ end
37
+ end
38
+ end
@@ -0,0 +1,52 @@
1
+ require 'minitest/autorun'
2
+ require 'eaglecad/deviceset'
3
+
4
+ describe EagleCAD::DeviceSet do
5
+ subject { EagleCAD::DeviceSet.from_xml(REXML::Document.new(File.open('test/fixtures/deviceset.xml')).elements.first) }
6
+
7
+ it "must have a name" do
8
+ subject.name.must_equal 'C-EU'
9
+ end
10
+
11
+ it "must have a prefix" do
12
+ subject.prefix.must_equal 'C'
13
+ end
14
+
15
+ it "must have a uservalue" do
16
+ subject.uservalue.must_equal true
17
+ end
18
+
19
+ it "must have a description" do
20
+ subject.description.must_equal '<B>CAPACITOR</B>, European symbol'
21
+ end
22
+
23
+ it "must have the correct number of devices" do
24
+ subject.devices.size.must_equal 75
25
+ end
26
+
27
+ it "must have the correct number of gates" do
28
+ subject.gates.size.must_equal 1
29
+ subject.gates.first.name.must_equal 'G$1'
30
+ end
31
+
32
+ describe "when generating XML" do
33
+ subject { EagleCAD::DeviceSet.from_xml(REXML::Document.new(File.open('test/fixtures/deviceset.xml')).elements.first).to_xml }
34
+
35
+ it "must generate an XML element" do
36
+ subject.must_be_instance_of REXML::Element
37
+ end
38
+
39
+ it "must have a Devices container element" do
40
+ subject.elements['devices'].count.must_equal 75
41
+ end
42
+
43
+ it "must have a Description element" do
44
+ subject.elements['description'].wont_be_nil
45
+ subject.elements['description'].text.must_equal '<B>CAPACITOR</B>, European symbol'
46
+ end
47
+
48
+ it "must have a Gates container element" do
49
+ subject.elements['gates'].count.must_equal 1
50
+ end
51
+ end
52
+ end
@@ -0,0 +1,94 @@
1
+ require 'minitest/autorun'
2
+ require 'eaglecad/drawing'
3
+
4
+ describe EagleCAD::Drawing do
5
+ describe "when initialized with an XML element containing a Schematic" do
6
+ subject { EagleCAD::Drawing.from_xml(REXML::Document.new(File.open('test/fixtures/drawing_schematic.xml')).elements.first) }
7
+
8
+ it "must set the vector font property" do
9
+ subject.always_vector_font.must_equal true
10
+ end
11
+
12
+ it "must set the vertical text property" do
13
+ subject.vertical_text.must_equal :up
14
+ end
15
+
16
+ it "must have the correct number of layers" do
17
+ subject.layers.size.must_equal 59
18
+ end
19
+
20
+ it "must have a schematic" do
21
+ subject.schematic.must_be_instance_of(EagleCAD::Schematic)
22
+ end
23
+ end
24
+
25
+ describe "when initialized with an XML element containing a Board" do
26
+ subject { EagleCAD::Drawing.from_xml(REXML::Document.new(File.open('test/fixtures/drawing_board.xml')).elements.first) }
27
+
28
+ it "must have a Board" do
29
+ subject.board.must_be_instance_of(EagleCAD::Board)
30
+ end
31
+
32
+ describe "when generating XML" do
33
+ let(:element) { subject.to_xml }
34
+
35
+ it "must generate a proper XML element" do
36
+ element.must_be_instance_of REXML::Element
37
+ end
38
+
39
+ it "must have a settings element" do
40
+ element.get_elements('settings').count.must_equal 1
41
+ element.get_elements('settings').first.must_be_instance_of(REXML::Element)
42
+ end
43
+
44
+ it "must have a grid element" do
45
+ element.get_elements('grid').count.must_equal 1
46
+ end
47
+
48
+ it "must have a layers container element" do
49
+ element.get_elements('layers').count.must_equal 1
50
+ end
51
+
52
+ it "must have the correct number of layers" do
53
+ element.get_elements('layers').first.get_elements('layer').count.must_equal 43
54
+ end
55
+
56
+ it "must have a Board" do
57
+ element.elements['board'].wont_be_nil
58
+ end
59
+ end
60
+ end
61
+
62
+ describe "when the Drawing has only a Schematic" do
63
+ subject { EagleCAD::Drawing.from_xml(REXML::Document.new(File.open('test/fixtures/drawing_schematic.xml')).elements.first) }
64
+
65
+ describe "when generating XML" do
66
+ let(:element) { subject.to_xml }
67
+
68
+ it "must generate a proper XML element" do
69
+ element.must_be_instance_of REXML::Element
70
+ end
71
+
72
+ it "must have a settings element" do
73
+ element.get_elements('settings').count.must_equal 1
74
+ element.get_elements('settings').first.must_be_instance_of(REXML::Element)
75
+ end
76
+
77
+ it "must have a grid element" do
78
+ element.get_elements('grid').count.must_equal 1
79
+ end
80
+
81
+ it "must have a layers container element" do
82
+ element.get_elements('layers').count.must_equal 1
83
+ end
84
+
85
+ it "must have the correct number of layers" do
86
+ element.get_elements('layers').first.get_elements('layer').count.must_equal 59
87
+ end
88
+
89
+ it "must have a Schematic" do
90
+ element.get_elements('schematic').count.must_equal 1
91
+ end
92
+ end
93
+ end
94
+ end
@@ -0,0 +1,47 @@
1
+ require 'minitest/autorun'
2
+ require 'eaglecad/library'
3
+
4
+ describe EagleCAD::Library do
5
+ subject { EagleCAD::Library.from_xml(REXML::Document.new(File.open('test/fixtures/library.xml')).elements.first) }
6
+
7
+ it "must have a name" do
8
+ subject.name.must_equal 'microchip'
9
+ end
10
+
11
+ it "must not have a description" do
12
+ subject.description.must_be_nil
13
+ end
14
+
15
+ it "must have the correct number of device sets" do
16
+ subject.device_sets.size.must_equal 1
17
+ end
18
+
19
+ it "must have the correct number of packages" do
20
+ subject.packages.size.must_equal 2
21
+ end
22
+
23
+ it "must have the correct number of symbols" do
24
+ subject.symbols.size.must_equal 1
25
+ end
26
+
27
+ describe "when generating XML" do
28
+ subject { EagleCAD::Library.from_xml(REXML::Document.new(File.open('test/fixtures/library.xml')).elements.first).to_xml }
29
+
30
+ it "must generate an XML element" do
31
+ subject.must_be_instance_of REXML::Element
32
+ end
33
+
34
+ it "must have a Device Sets container element" do
35
+ subject.get_elements('devicesets').count.must_equal 1
36
+ subject.elements['devicesets'].wont_be_nil
37
+ end
38
+
39
+ it "must have a Packages container element" do
40
+ subject.get_elements('packages').count.must_equal 1
41
+ end
42
+
43
+ it "must have a Symbols container element" do
44
+ subject.get_elements('symbols').count.must_equal 1
45
+ end
46
+ end
47
+ end
@@ -0,0 +1,60 @@
1
+ require 'minitest/autorun'
2
+ require 'eaglecad/package'
3
+
4
+ describe EagleCAD::Package do
5
+ Package = EagleCAD::Package
6
+
7
+ describe "when initialized with an XML element" do
8
+ subject { Package.from_xml(REXML::Document.new(File.open('test/fixtures/package.xml')).elements.first) }
9
+
10
+ it "must have a name" do
11
+ subject.name.must_equal 'C0402'
12
+ end
13
+
14
+ it "must have a description" do
15
+ subject.description.must_equal '<b>CAPACITOR</b><p>chip'
16
+ end
17
+
18
+ it "must have the correct number of layers" do
19
+ subject.layers.size.must_equal 7
20
+ end
21
+
22
+ it "must have the correct layers" do
23
+ subject.layers[1].size.must_equal 2
24
+ subject.layers[21].size.must_equal 1
25
+ subject.layers[25].size.must_equal 1
26
+ subject.layers[27].size.must_equal 1
27
+ subject.layers[35].size.must_equal 1
28
+ subject.layers[39].size.must_equal 4
29
+ subject.layers[51].size.must_equal 5
30
+ end
31
+
32
+ it "must have the correct holes" do
33
+ subject.holes.size.must_equal 1
34
+ end
35
+
36
+ it "must have the correct pads" do
37
+ subject.pads.size.must_equal 1
38
+ end
39
+ end
40
+
41
+ describe "when generating XML" do
42
+ subject { Package.from_xml(REXML::Document.new(File.open('test/fixtures/package.xml')).elements.first).to_xml }
43
+
44
+ it "must generate an XML element" do
45
+ subject.must_be_instance_of REXML::Element
46
+ end
47
+
48
+ it "must have the correct name attribute" do
49
+ subject.attributes['name'].must_equal 'C0402'
50
+ end
51
+
52
+ it "must have a description element" do
53
+ subject.elements['description'].text.must_equal '<b>CAPACITOR</b><p>chip'
54
+ end
55
+
56
+ it "must have the correct number of children" do
57
+ subject.elements.count.must_equal 18
58
+ end
59
+ end
60
+ end
@@ -0,0 +1,50 @@
1
+ require 'minitest/autorun'
2
+ require 'eaglecad/schematic'
3
+
4
+ describe EagleCAD::Schematic do
5
+ describe "when initialized with an XML element" do
6
+ subject { EagleCAD::Schematic.from_xml(REXML::Document.new(File.open('test/fixtures/schematic.xml')).elements.first) }
7
+
8
+ it "must have a description" do
9
+ subject.description.must_equal 'Schematic Description'
10
+ end
11
+
12
+ it "must have the correct number of attributes" do
13
+ subject.attributes.count.must_equal 0
14
+ end
15
+
16
+ it "must have the correct number of clearance classes" do
17
+ subject.classes.size.must_equal 2
18
+ end
19
+
20
+ it "must have the correct number of libraries" do
21
+ subject.libraries.count.must_equal 8
22
+ end
23
+
24
+ it "must have the correct number of parts" do
25
+ subject.parts.size.must_equal 27
26
+ end
27
+
28
+ it "must have the correct number of sheets" do
29
+ subject.sheets.size.must_equal 1
30
+ end
31
+ end
32
+
33
+ describe "when generating XML" do
34
+ subject { EagleCAD::Schematic.from_xml(REXML::Document.new(File.open('test/fixtures/schematic.xml')).elements.first).to_xml }
35
+
36
+ it "must generate an XML element" do
37
+ subject.must_be_instance_of REXML::Element
38
+ end
39
+
40
+ it "must have a libraries container element" do
41
+ subject.get_elements('libraries').count.must_equal 1
42
+ end
43
+
44
+ it "must have the correct libraries" do
45
+ library_element = subject.get_elements('libraries').first.first
46
+ library_element.must_be_instance_of REXML::Element
47
+ library_element.attributes['name'].must_equal 'rcl'
48
+ end
49
+ end
50
+ end
@@ -0,0 +1,24 @@
1
+ require 'minitest/autorun'
2
+ require 'eaglecad/sheet'
3
+
4
+ describe EagleCAD::Sheet do
5
+ describe "when initialized with an XML element" do
6
+ subject { EagleCAD::Sheet.from_xml(REXML::Document.new(File.open('test/fixtures/sheet.xml')).elements.first) }
7
+
8
+ it "must have a description" do
9
+ subject.description.must_equal 'Sheet Description'
10
+ end
11
+
12
+ it "must have the correct number of busses" do
13
+ subject.busses.size.must_equal 1
14
+ end
15
+
16
+ it "must have the correct number of instances" do
17
+ subject.instances.size.must_equal 28
18
+ end
19
+
20
+ it "must have the correct number of nets" do
21
+ subject.nets.size.must_equal 21
22
+ end
23
+ end
24
+ end