rbplusplus 0.1

Sign up to get free protection for your applications and to get access to all the features.
@@ -0,0 +1,26 @@
1
+ require File.dirname(__FILE__) + '/test_helper'
2
+
3
+ context "Extension with globally available functions" do
4
+
5
+ specify "should make functions available" do
6
+ Extension.new "functions" do |e|
7
+ e.sources full_dir("headers/functions.h")
8
+ e.namespace "functions"
9
+ end
10
+
11
+ require 'functions'
12
+
13
+ should.not.raise NameError do
14
+ test1
15
+ end
16
+
17
+ should.not.raise NameError do
18
+ assert_in_delta 1.0, test2(2.0), 0.001
19
+ end
20
+
21
+ should.not.raise NameError do
22
+ test3(2, 4.2).should == 2
23
+ end
24
+ end
25
+
26
+ end
@@ -0,0 +1,26 @@
1
+ #ifndef __ADDER_H__
2
+ #define __ADDER_H__
3
+
4
+ #include <string>
5
+ using namespace std;
6
+
7
+ namespace classes {
8
+ class Adder {
9
+ public:
10
+ Adder() { }
11
+
12
+ static int doAdding(int a, int b, int c, int d, int e) {
13
+ return a + b + c + d + e;
14
+ }
15
+
16
+ int addIntegers(int a, int b) { return a + b; }
17
+
18
+ float addFloats(float a, float b) { return a + b; }
19
+
20
+ string addStrings(string a, string b) { return a + b; }
21
+
22
+ string getClassName() { return "Adder"; }
23
+ };
24
+ }
25
+
26
+ #endif
@@ -0,0 +1,20 @@
1
+ #ifndef __SUBTRACTER_H__
2
+ #define __SUBTRACTER_H__
3
+
4
+ #include <string>
5
+ using namespace std;
6
+
7
+ namespace subtracter {
8
+ class Subtracter {
9
+ public:
10
+ Subtracter() { }
11
+
12
+ int subIntegers(int a, int b) { return a - b; }
13
+
14
+ float subFloats(float a, float b) { return a - b; }
15
+
16
+ string getClassName() { return "Subtracter"; }
17
+ };
18
+ }
19
+
20
+ #endif
@@ -0,0 +1,3 @@
1
+ /**
2
+ * Empty file for when you don't want to test parsing / querying
3
+ */
@@ -0,0 +1,19 @@
1
+ /**
2
+ * This header file is for testing free (top) level function
3
+ * parsing and querying
4
+ */
5
+
6
+ #ifndef __FUNCTIONS__H__
7
+ #define __FUNCTIONS__H__
8
+
9
+ namespace functions {
10
+
11
+ void test1() { }
12
+
13
+ float test2(int arg1) { return 1.0; }
14
+
15
+ int test3(int arg1, float arg2) { return arg1; }
16
+
17
+ }
18
+
19
+ #endif
@@ -0,0 +1,8 @@
1
+ #ifndef __HELPER_H__
2
+ #define __HELPER_H__
3
+
4
+ int helper(int a, int b) {
5
+ return a + b;
6
+ }
7
+
8
+ #endif
@@ -0,0 +1,20 @@
1
+ #ifndef __NESTED_CLASSES_H__
2
+ #define __NESTED_CLASSES_H__
3
+
4
+ namespace classes {
5
+ class TestClass {
6
+ public:
7
+ TestClass() { }
8
+
9
+ class InnerClass {
10
+ public:
11
+ InnerClass() {}
12
+ class Inner2 {
13
+ public:
14
+ Inner2() {}
15
+ };
16
+ };
17
+ };
18
+ }
19
+
20
+ #endif
@@ -0,0 +1,14 @@
1
+ #ifndef __WITH_INCLUDES_H__
2
+ #define __WITH_INCLUDES_H__
3
+
4
+ #include "helper.h"
5
+
6
+ namespace code {
7
+
8
+ int func(int a, int b) {
9
+ return helper(a, b);
10
+ }
11
+
12
+ }
13
+
14
+ #endif
@@ -0,0 +1,67 @@
1
+ require File.dirname(__FILE__) + '/test_helper'
2
+
3
+ context "Extension with modules" do
4
+
5
+ def setup
6
+ if !defined?(@@modules_built)
7
+ super
8
+ @@modules_built = true
9
+ Extension.new "modules" do |e|
10
+ e.sources [
11
+ full_dir("headers/Adder.h"),
12
+ full_dir("headers/functions.h"),
13
+ full_dir("headers/Subtracter.hpp")
14
+ ]
15
+
16
+ # e.writer_mode :single
17
+
18
+ e.module "Empty" do |m|
19
+ end
20
+
21
+ # Can use without a block
22
+ wrapper = e.module "Wrapper"
23
+ wrapper.namespace "classes"
24
+
25
+ e.module "Functions" do |m|
26
+ m.namespace "functions"
27
+ end
28
+
29
+ e.module "Nested" do |m|
30
+ m.module "Nested" do |n|
31
+ n.module "Inner" do |inner|
32
+ inner.namespace "subtracter"
33
+ end
34
+ end
35
+ end
36
+
37
+ end
38
+
39
+ require 'modules'
40
+ end
41
+ end
42
+
43
+ specify "should be able to generate a module definition" do
44
+ assert defined?(Empty)
45
+ Empty.class.should == Module
46
+ end
47
+
48
+ specify "should wrap up C++ classes under the namespace as requested" do
49
+ assert !defined?(Adder)
50
+ assert defined?(Wrapper::Adder)
51
+ a = Wrapper::Adder.new
52
+ a.get_class_name.should == "Adder"
53
+ end
54
+
55
+ specify "should wrap up C++ functions in the module" do
56
+ assert defined?(Functions)
57
+ Functions::test2(2).should.be.close 1.0, 0.001
58
+ Functions::test3(4, 6).should == 4
59
+ end
60
+
61
+ specify "should be able to nest modules and related definitions" do
62
+ assert !defined?(Subtracter)
63
+ assert defined?(Nested::Nested::Inner::Subtracter)
64
+ s = Nested::Nested::Inner::Subtracter.new
65
+ s.get_class_name.should == "Subtracter"
66
+ end
67
+ end
@@ -0,0 +1,19 @@
1
+ $: << File.expand_path(File.dirname(__FILE__) + "/../lib")
2
+ $:.unshift File.expand_path(File.dirname(__FILE__) + "/generated")
3
+
4
+ require 'rubygems'
5
+ require 'test/spec'
6
+ require 'rbplusplus'
7
+
8
+ include RbPlusPlus
9
+
10
+ class Test::Unit::TestCase
11
+
12
+ def full_dir(path)
13
+ File.expand_path(File.join(File.dirname(__FILE__), path))
14
+ end
15
+
16
+ def setup
17
+ `rm -rf #{full_dir('generated')}/*`
18
+ end
19
+ end
metadata ADDED
@@ -0,0 +1,91 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: rbplusplus
3
+ version: !ruby/object:Gem::Version
4
+ version: "0.1"
5
+ platform: ruby
6
+ authors:
7
+ - Jason Roelofs
8
+ autorequire:
9
+ bindir: bin
10
+ cert_chain: []
11
+
12
+ date: 2008-05-04 00:00:00 -04:00
13
+ default_executable:
14
+ dependencies:
15
+ - !ruby/object:Gem::Dependency
16
+ name: rbgccxml
17
+ version_requirement:
18
+ version_requirements: !ruby/object:Gem::Requirement
19
+ requirements:
20
+ - - "="
21
+ - !ruby/object:Gem::Version
22
+ version: "0.1"
23
+ version:
24
+ description: Rb++ combines the powerful query interface of rbgccxml and the Rice library to make Ruby wrapping extensions easier to write than ever.
25
+ email: jameskilton@gmail.com
26
+ executables: []
27
+
28
+ extensions: []
29
+
30
+ extra_rdoc_files: []
31
+
32
+ files:
33
+ - TODO
34
+ - Rakefile
35
+ - lib/rbplusplus/extension.rb
36
+ - lib/rbplusplus/module.rb
37
+ - lib/rbplusplus/builders/extension.rb
38
+ - lib/rbplusplus/builders/module.rb
39
+ - lib/rbplusplus/builders/base.rb
40
+ - lib/rbplusplus/builders/class.rb
41
+ - lib/rbplusplus/rbplusplus.rb
42
+ - lib/rbplusplus/writers/extension.rb
43
+ - lib/rbplusplus/writers/base.rb
44
+ - lib/rbplusplus/writers/single_file_writer.rb
45
+ - lib/rbplusplus/writers/multiple_files_writer.rb
46
+ - lib/jamis.rb
47
+ - lib/inflector.rb
48
+ - lib/inflections.rb
49
+ - lib/rbplusplus.rb
50
+ has_rdoc: false
51
+ homepage: http://rbplusplus.rubyforge.org/rbplusplus
52
+ post_install_message:
53
+ rdoc_options: []
54
+
55
+ require_paths:
56
+ - lib
57
+ required_ruby_version: !ruby/object:Gem::Requirement
58
+ requirements:
59
+ - - ">="
60
+ - !ruby/object:Gem::Version
61
+ version: "0"
62
+ version:
63
+ required_rubygems_version: !ruby/object:Gem::Requirement
64
+ requirements:
65
+ - - ">="
66
+ - !ruby/object:Gem::Version
67
+ version: "0"
68
+ version:
69
+ requirements: []
70
+
71
+ rubyforge_project: rbplusplus
72
+ rubygems_version: 1.1.1
73
+ signing_key:
74
+ specification_version: 2
75
+ summary: Ruby library to generate Rice wrapper code
76
+ test_files:
77
+ - test/classes_test.rb
78
+ - test/extension_test.rb
79
+ - test/compiling_test.rb
80
+ - test/modules_test.rb
81
+ - test/functions_test.rb
82
+ - test/test_helper.rb
83
+ - test/file_writers_test.rb
84
+ - test/headers/Subtracter.hpp
85
+ - test/headers/functions.h
86
+ - test/headers/empty.h
87
+ - test/headers/nested_classes.h
88
+ - test/headers/with_includes.h
89
+ - test/headers/include
90
+ - test/headers/include/helper.h
91
+ - test/headers/Adder.h