doxyparser 1.2

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.
@@ -0,0 +1,86 @@
1
+ require 'rubygems'
2
+ require 'rspec'
3
+ require 'doxyparser'
4
+
5
+ require_relative 'custom_spec_helper'
6
+
7
+ describe "Doxyparser::Method" do
8
+
9
+ before(:all) do
10
+ @class=Doxyparser::parse_class("AccessorsClass", xml_dir)
11
+ end
12
+
13
+ it "should create consistently methods" do
14
+ method = @class.methods(:private, nil, ['isBoolProp'])
15
+ method.size.should eql 1
16
+ method = method[0]
17
+ method.type.name.should eql 'bool'
18
+ method.args.should eql '()'
19
+ method.location.should match /test2.h:\d+$/
20
+ method.file.basename.should eql 'test2.h'
21
+ method.params.should be_empty
22
+ method.static.should be_nil
23
+ method.definition.should eql 'bool AccessorsClass::isBoolProp'
24
+ end
25
+
26
+ it "should create standard getters and setters" do
27
+ getter = @class.methods(:private, nil, ['getProp'])[0]
28
+ getter.getter_for.should eql 'prop'
29
+ getter.setter_for.should be_nil
30
+ setter = @class.methods(:private, nil, ['setProp'])[0]
31
+ setter.setter_for.should eql 'prop'
32
+ setter.getter_for.should be_nil
33
+ setter.static.should be_nil
34
+
35
+ getter = @class.methods(:private, nil, ['isBoolProp'])[0]
36
+ getter.getter_for.should eql 'boolProp'
37
+ getter.setter_for.should be_nil
38
+ end
39
+
40
+ it "should create non standard getters and setters" do
41
+ getter = @class.methods(:private, nil, ['get_Prop2'])[0]
42
+ getter.getter_for.should eql 'prop2'
43
+ getter.setter_for.should be_nil
44
+ setter = @class.methods(:private, nil, ['set_Prop2'])[0]
45
+ setter.setter_for.should eql 'prop2'
46
+ setter.getter_for.should be_nil
47
+ setter.static.should be_nil
48
+ end
49
+
50
+ it "should create standard Uppercase getters and setters" do
51
+ getter = @class.methods(:private, nil, ['GetProp3'])[0]
52
+ getter.getter_for.should eql 'prop3'
53
+ getter.setter_for.should be_nil
54
+ setter = @class.methods(:private, nil, ['SetProp3'])[0]
55
+ setter.setter_for.should eql 'prop3'
56
+ setter.getter_for.should be_nil
57
+ setter.static.should be_nil
58
+ end
59
+
60
+ it "should ignore malformed getters and setters" do
61
+ getter = @class.methods(:private, nil, ['getNotAProp'])[0]
62
+ getter.getter_for.should be_nil
63
+ getter.setter_for.should be_nil
64
+ setter = @class.methods(:private, nil, ['setNotAProp'])[0]
65
+ setter.setter_for.should be_nil
66
+ setter.getter_for.should be_nil
67
+ end
68
+
69
+ it "should ignore malformed getters and setters Pt. 2" do
70
+ getter = @class.methods(:private, nil, ['isNotAProp'])[0]
71
+ getter.getter_for.should be_nil
72
+ getter.setter_for.should be_nil
73
+ setter = @class.methods(:private, nil, ['isAlsoNotAProp'])[0]
74
+ setter.setter_for.should be_nil
75
+ setter.getter_for.should be_nil
76
+ end
77
+
78
+ it "should create static getters and setters" do
79
+ static_getter = @class.methods(:private, true, ['getStaticProp'])[0]
80
+ static_getter.getter_for.should eql 'staticProp'
81
+ static_getter.setter_for.should be_nil
82
+ static_setter = @class.methods(:private, :x, ['setStaticProp'])[0]
83
+ static_setter.setter_for.should eql 'staticProp'
84
+ static_setter.getter_for.should be_nil
85
+ end
86
+ end
@@ -0,0 +1,165 @@
1
+ require 'rubygems'
2
+ require 'rspec'
3
+ require 'doxyparser'
4
+
5
+ require_relative 'custom_spec_helper'
6
+
7
+ describe "Doxyparser::Namespace" do
8
+
9
+ context "Basic" do
10
+
11
+ before(:all) do
12
+ @namespace=Doxyparser::parse_namespace("Ogre", xml_dir)
13
+ end
14
+
15
+ it "should be created consistently from name and directory" do
16
+ namespace_data = {name: "Ogre", basename: "Ogre", node: nil, parent: nil, path: xml_dir+'/namespaceOgre.xml'}
17
+ @namespace.class.should eql Doxyparser::Namespace
18
+ @namespace.name.should eql namespace_data[:name]
19
+ @namespace.basename.should eql namespace_data[:basename]
20
+ @namespace.xml_path.should eql namespace_data[:path]
21
+ @namespace.file.should be_nil
22
+ end
23
+
24
+ it "should create the right typedefs according to a specified list" do
25
+ expected_typedefs=['AnimableValuePtr', 'AnimationStateMap', 'ConstAnimationStateIterator']
26
+ ns_typedefs = @namespace.typedefs(expected_typedefs)
27
+ ns_typedefs.size.should eql expected_typedefs.size
28
+ ns_typedefs.uniq.should eql ns_typedefs
29
+ ns_typedefs.each{|t|
30
+ t.class.should eql Doxyparser::Typedef # Class must be correct
31
+ t.parent.should eql @namespace # Parent must be correct
32
+ expected_typedefs.should include t.basename
33
+ t.name.should be_start_with("#{@namespace.name}::")
34
+ }
35
+ end
36
+
37
+ it "should create the right functions according to a specified list" do
38
+ expected_functions=['operator>', 'operator<=', 'intersect', 'advanceRawPointer', 'any_cast']
39
+ ns_functions = @namespace.functions(expected_functions)
40
+ # Should return more elements than the list (because any_cast() is overloaded)
41
+ ns_functions.size.should be.>expected_functions.size
42
+ ns_functions.uniq.should eql ns_functions# Function overrides "==" and therefore
43
+ # no element should be repeated
44
+ ns_functions.each{|f|
45
+ f.class.should eql Doxyparser::Function# Class must be correct
46
+ f.parent.should eql @namespace# Parent must be correct
47
+ expected_functions.should include f.basename# Each function must be included in
48
+ # the given list
49
+ f.name.should be_start_with("#{@namespace.name}::")
50
+ }
51
+ end
52
+
53
+ it "should create the right enums according to a specified list" do
54
+ expected_enums=['LayerBlendOperationEx', 'ShadowTechnique', 'GpuConstantType', 'MeshChunkID']
55
+ ns_enums = @namespace.enums(expected_enums)
56
+ ns_enums.size.should eql expected_enums.size# Should return same number of
57
+ # elements as the list
58
+ ns_enums.uniq.should eql ns_enums# No element should be repeated
59
+ ns_enums.each{|e|
60
+ e.class.should eql Doxyparser::Enum# Class must be correct
61
+ e.parent.should eql @namespace# Parent must be correct
62
+ expected_enums.should include e.basename# Each function must be included in the
63
+ # given list
64
+ e.name.should be_start_with("#{@namespace.name}::")
65
+ }
66
+ end
67
+
68
+ it "should create the right variables according to a specified list" do
69
+ expected_vars=['pi', 'SPOT_SHADOW_FADE_PNG', 'RENDER_QUEUE_COUNT']
70
+ ns_vars = @namespace.variables(expected_vars)
71
+ ns_vars.size.should eql expected_vars.size# Should return same number of elements
72
+ # as the list
73
+ ns_vars.uniq.should eql ns_vars# No element should be repeated
74
+ ns_vars.each{ |v|
75
+ v.class.should eql Doxyparser::Variable# Class must be correct
76
+ v.parent.should eql @namespace# Parent must be correct
77
+ expected_vars.should include v.basename# Each function must be included in the
78
+ # given list
79
+ v.name.should be_start_with("#{@namespace.name}::")
80
+ }
81
+ end
82
+
83
+ it "should correctly create the right classes and structs according to a specified list" do
84
+
85
+ expected_classes=['AnimationTrack', "Root", "RibbonTrail", "SceneManager"]
86
+ expected_structs=["isPodLike", "ViewPoint", "RenderablePass"]
87
+
88
+ ns_classes = @namespace.classes(expected_classes)
89
+ ns_structs = @namespace.structs(expected_structs)
90
+ ns_classes.size.should eql expected_classes.size
91
+ ns_structs.size.should eql expected_structs.size#
92
+
93
+ ns_all = ns_classes + ns_structs
94
+ ns_all.uniq.should eql ns_all# No element should be repeated among classes and
95
+ # structs
96
+
97
+ ns_classes.each{|c|
98
+ c.class.should eql Doxyparser::Class
99
+ expected_classes.should include c.basename
100
+ }
101
+ ns_structs.each{|c|
102
+ c.class.should eql Doxyparser::Struct
103
+ expected_structs.should include c.basename
104
+ }
105
+ ns_all.each{|c|
106
+ c.parent.should eql @namespace
107
+ c.xml_path.should eql xml_dir+"/#{c.refid}.xml"
108
+ c.name.should be_start_with("#{@namespace.name}::")
109
+ }
110
+ end
111
+
112
+ it "should correctly create the right inner namespaces according to a specified list" do
113
+ expected_inner_ns=['EmitterCommands', 'OverlayElementCommands']
114
+ inner_ns = @namespace.innernamespaces(expected_inner_ns)
115
+ inner_ns.size.should eql expected_inner_ns.size# Should return same name of
116
+ # elements as expected...
117
+ inner_ns.uniq.should eql inner_ns# ... and no element should be repeated
118
+
119
+ inner_ns.each{|ns|
120
+ # Class must be correct
121
+ ns.class.should eql Doxyparser::Namespace
122
+
123
+ # Class should have a correct parent
124
+ ns.parent.should eql @namespace
125
+
126
+ # XML File path must be correct
127
+ ns.xml_path.should eql xml_dir+%Q{/#{ns.refid}.xml}
128
+
129
+ # The classes must be included in the given filter
130
+ expected_inner_ns.should include ns.basename
131
+ ns.name.should be_start_with("#{@namespace.name}::")
132
+ }
133
+ end
134
+ end
135
+ context "Advanced" do
136
+
137
+ before(:all) do
138
+ @myNamespace=Doxyparser::parse_namespace("MyNamespace", xml_dir)
139
+ end
140
+
141
+ it "should correctly create nested inner-namespace hierarchies" do
142
+ @myNamespace=Doxyparser::parse_namespace("MyNamespace", xml_dir)
143
+ inner_ns = @myNamespace.innernamespaces
144
+ inner_ns.size.should eql 1
145
+ myInnerNamespace = inner_ns[0]
146
+ myInnerNamespace.parent.should eql @myNamespace
147
+ myInnerNamespace.xml_path.should eql xml_dir+%Q{/#{myInnerNamespace.refid}.xml}
148
+ myInnerNamespace.name.should eql "#{@myNamespace.name}::MyInnerNamespace"
149
+
150
+ inner_ns = myInnerNamespace.innernamespaces
151
+ inner_ns.size.should eql 1
152
+ myMostInnerNamespace = inner_ns[0]
153
+ myMostInnerNamespace.parent.should eql myInnerNamespace
154
+ myMostInnerNamespace.xml_path.should eql xml_dir+%Q{/#{myMostInnerNamespace.refid}.xml}
155
+ myMostInnerNamespace.name.should eql "#{myInnerNamespace.name}::MyMostInnerNamespace"
156
+
157
+ myClass = myMostInnerNamespace.classes[0]
158
+ myEnum = myMostInnerNamespace.enums[0]
159
+
160
+ myClass.name.should eql "#{myMostInnerNamespace.name}::MyClass"
161
+ myEnum.name.should eql "#{myMostInnerNamespace.name}::MyEnum"
162
+
163
+ end
164
+ end
165
+ end
data/spec/type_spec.rb ADDED
@@ -0,0 +1,34 @@
1
+ require 'rubygems'
2
+ require 'rspec'
3
+ require 'doxyparser'
4
+
5
+ require_relative 'custom_spec_helper'
6
+
7
+ describe "Doxyparser::Type" do
8
+
9
+ before(:all) do
10
+ @class=Doxyparser::parse_class('MyNamespace::MyClass', xml_dir)
11
+ end
12
+
13
+ it "should create consistently simple types" do
14
+ typedef = @class.typedefs(:public, ['MapShortVectorInt'])[0]
15
+ type = typedef.type
16
+ type.name.should eql 'std::map< unsigned short, std::vector< int * > >'
17
+ type.should be_template
18
+
19
+ typedef = @class.typedefs(:public, ['VectorMapShortVectorInt'])[0]
20
+ type = typedef.type
21
+ type.name.should eql 'std::vector< MapShortVectorInt >'
22
+ type.should be_template
23
+ end
24
+
25
+ it "should create consistently complex types" do
26
+ typedef = @class.typedefs(:private, ['privateTypedef'])[0]
27
+ type = typedef.type
28
+ type.name.should eql 'std::map< MyMostInnerClass, TemplateClass< OuterStruct,::noNsClass, 8 > >'
29
+ type.should be_template
30
+ type.nested_local_types.map{|t| t.name}.should eql ['MyMostInnerClass', 'TemplateClass', 'OuterStruct', 'noNsClass']
31
+ type.nested_typenames.should eql ['std::map', 'MyMostInnerClass' , 'TemplateClass', 'OuterStruct', '::noNsClass']
32
+ end
33
+
34
+ end
metadata ADDED
@@ -0,0 +1,83 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: doxyparser
3
+ version: !ruby/object:Gem::Version
4
+ version: '1.2'
5
+ platform: ruby
6
+ authors:
7
+ - David Fuenmayor
8
+ autorequire:
9
+ bindir: bin
10
+ cert_chain: []
11
+ date: 2013-05-25 00:00:00.000000000 Z
12
+ dependencies: []
13
+ description: |
14
+ Ruby Gem for parsing C++ header files.
15
+ This library is based on Nokogiri (http://nokogiri.org) and takes as input the xml files generated by Doxygen (www.doxygen.org).
16
+ Parsing with Doxygen allows us to parse even a set of non-compilable include files. This is very useful in case you need to parse only a subset of a big library which won't normally compile because of being incomplete or needing further build configuration (e.g Makefiles, VS, SCons, etc).
17
+ By using other tools which rely on a real C/C++ processor like gccxml or swig, you would normally get lots of compilation-related errors (which is undesired because we don't want to compile anything!!). Doxyparser is, in such cases, the lean alternative.
18
+ email:
19
+ - davfuenmayor@gmail.com
20
+ executables: []
21
+ extensions: []
22
+ extra_rdoc_files: []
23
+ files:
24
+ - README.md
25
+ - MIT_LICENSE
26
+ - lib/util.rb
27
+ - lib/nodes/hfile.rb
28
+ - lib/nodes/function.rb
29
+ - lib/nodes/variable.rb
30
+ - lib/nodes/type.rb
31
+ - lib/nodes/class.rb
32
+ - lib/nodes/group.rb
33
+ - lib/nodes/friend.rb
34
+ - lib/nodes/struct.rb
35
+ - lib/nodes/compound.rb
36
+ - lib/nodes/enum.rb
37
+ - lib/nodes/node.rb
38
+ - lib/nodes/member.rb
39
+ - lib/nodes/param.rb
40
+ - lib/nodes/namespace.rb
41
+ - lib/nodes/typedef.rb
42
+ - lib/doxyparser.rb
43
+ - spec/namespace_spec.rb
44
+ - spec/enum_spec.rb
45
+ - spec/custom_spec_helper.rb
46
+ - spec/file_spec.rb
47
+ - spec/method_spec.rb
48
+ - spec/doxyparser_spec.rb
49
+ - spec/class_spec.rb
50
+ - spec/type_spec.rb
51
+ homepage: https://github.com/davfuenmayor/ruby-doxygen-parser
52
+ licenses:
53
+ - MIT
54
+ metadata: {}
55
+ post_install_message:
56
+ rdoc_options: []
57
+ require_paths:
58
+ - lib
59
+ required_ruby_version: !ruby/object:Gem::Requirement
60
+ requirements:
61
+ - - '>='
62
+ - !ruby/object:Gem::Version
63
+ version: '0'
64
+ required_rubygems_version: !ruby/object:Gem::Requirement
65
+ requirements:
66
+ - - '>='
67
+ - !ruby/object:Gem::Version
68
+ version: '0'
69
+ requirements: []
70
+ rubyforge_project:
71
+ rubygems_version: 2.0.2
72
+ signing_key:
73
+ specification_version: 4
74
+ summary: Library for parsing C++ header files
75
+ test_files:
76
+ - spec/namespace_spec.rb
77
+ - spec/enum_spec.rb
78
+ - spec/custom_spec_helper.rb
79
+ - spec/file_spec.rb
80
+ - spec/method_spec.rb
81
+ - spec/doxyparser_spec.rb
82
+ - spec/class_spec.rb
83
+ - spec/type_spec.rb