cauterize 0.0.1.pre1 → 0.0.1.pre5
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.
- data/.gitignore +5 -0
- data/.rspec +1 -1
- data/Gemfile +1 -1
- data/README.md +0 -2
- data/Rakefile +19 -3
- data/bin/cauterize +14 -6
- data/example/Cauterize +22 -10
- data/example/build.sh +15 -2
- data/lib/cauterize/base_type.rb +2 -5
- data/lib/cauterize/builders.rb +1 -3
- data/lib/cauterize/builders/c/buildable.rb +3 -2
- data/lib/cauterize/builders/c/builtin.rb +46 -0
- data/lib/cauterize/builders/c/enumeration.rb +23 -2
- data/lib/cauterize/builders/c/fixed_array.rb +16 -7
- data/lib/cauterize/builders/c/group.rb +32 -3
- data/lib/cauterize/builders/c/scalar.rb +5 -0
- data/lib/cauterize/builders/c/variable_array.rb +1 -1
- data/lib/cauterize/builders/cs/buildable.rb +59 -0
- data/lib/cauterize/builders/cs/builtin.rb +23 -0
- data/lib/cauterize/builders/cs/composite.rb +21 -0
- data/lib/cauterize/builders/cs/csarray.rb +32 -0
- data/lib/cauterize/builders/cs/enumeration.rb +21 -0
- data/lib/cauterize/builders/cs/fixed_array.rb +25 -0
- data/lib/cauterize/builders/cs/group.rb +33 -0
- data/lib/cauterize/builders/cs/scalar.rb +10 -0
- data/lib/cauterize/builders/cs/variable_array.rb +34 -0
- data/lib/cauterize/builtin.rb +52 -0
- data/lib/cauterize/c_builder.rb +15 -1
- data/lib/cauterize/cauterize.rb +44 -13
- data/lib/cauterize/composite.rb +3 -3
- data/lib/cauterize/cs_builder.rb +53 -0
- data/lib/cauterize/enumeration.rb +20 -3
- data/lib/cauterize/fixed_array.rb +3 -3
- data/lib/cauterize/formatter.rb +7 -3
- data/lib/cauterize/group.rb +5 -8
- data/lib/cauterize/scalar.rb +16 -7
- data/lib/cauterize/variable_array.rb +6 -6
- data/lib/cauterize/version.rb +1 -1
- data/spec/base_type_spec.rb +133 -125
- data/spec/builders/c/buildable_spec.rb +18 -18
- data/spec/builders/c/builtin_spec.rb +22 -0
- data/spec/builders/c/composite_spec.rb +37 -33
- data/spec/builders/c/enumeration_spec.rb +84 -21
- data/spec/builders/c/fixed_array_spec.rb +6 -6
- data/spec/builders/c/group_spec.rb +97 -90
- data/spec/builders/c/scalar_spec.rb +24 -6
- data/spec/builders/c/variable_array_spec.rb +37 -37
- data/spec/builders/cs/buildable_spec.rb +8 -0
- data/spec/builders/cs/composite_spec.rb +32 -0
- data/spec/builders/cs/enumeration_spec.rb +33 -0
- data/spec/builders/cs/fixed_array_spec.rb +40 -0
- data/spec/builders/cs/group_spec.rb +56 -0
- data/spec/builders/cs/scalar_spec.rb +7 -0
- data/spec/builders/cs/variable_array_spec.rb +46 -0
- data/spec/builders_spec.rb +38 -38
- data/spec/builtin_spec.rb +46 -0
- data/spec/c_builder_spec.rb +116 -102
- data/spec/cauterize_spec.rb +8 -1
- data/spec/composite_spec.rb +52 -48
- data/spec/cs_builder_spec.rb +113 -0
- data/spec/enumeration_spec.rb +55 -16
- data/spec/fixed_array_spec.rb +7 -9
- data/spec/group_spec.rb +81 -76
- data/spec/scalar_spec.rb +20 -10
- data/spec/spec_helper.rb +103 -94
- data/spec/support/shared_examples_for_c_buildables.rb +68 -64
- data/spec/variable_array_spec.rb +12 -17
- data/{c → support/c}/src/cauterize.c +8 -7
- data/support/c/src/cauterize.h +59 -0
- data/{c → support/c}/src/cauterize_debug.h +0 -0
- data/support/c/src/cauterize_util.h +49 -0
- data/{c → support/c}/test/greatest.h +0 -0
- data/{c → support/c}/test/test.c +0 -0
- data/support/cs/src/CauterizeCompositeFormatter.cs +34 -0
- data/support/cs/src/CauterizeContainerFormatter.cs +18 -0
- data/support/cs/src/CauterizeEnumFormatter.cs +67 -0
- data/support/cs/src/CauterizeException.cs +15 -0
- data/support/cs/src/CauterizeFixedArrayFormatter.cs +39 -0
- data/support/cs/src/CauterizeFormatter.cs +40 -0
- data/support/cs/src/CauterizeGroupFormatter.cs +46 -0
- data/support/cs/src/CauterizePrimitiveFormatter.cs +33 -0
- data/support/cs/src/CauterizeTypeFormatterFactory.cs +39 -0
- data/support/cs/src/CauterizeTypes.cs +107 -0
- data/support/cs/src/CauterizeVariableArrayFormatter.cs +49 -0
- data/support/cs/src/ICauterizeTypeFormatter.cs +12 -0
- data/support/cs/src/OrderAttribute.cs +50 -0
- data/support/cs/src/PrimitiveSupport.cs +134 -0
- data/support/cs/src/SerializedRepresentationAttribute.cs +24 -0
- data/support/cs/test/CauterizeCompositeFormatterTest.cs +59 -0
- data/support/cs/test/CauterizeEnumFormatterTest.cs +110 -0
- data/support/cs/test/CauterizeFixedArrayFormatterTest.cs +91 -0
- data/support/cs/test/CauterizeFormatterTest.cs +40 -0
- data/support/cs/test/CauterizeGroupFormatterTest.cs +147 -0
- data/support/cs/test/CauterizeIntegrationTest.cs +129 -0
- data/support/cs/test/CauterizePrimitiveFormatterTest.cs +98 -0
- data/support/cs/test/CauterizeTypeFormatterFactoryTest.cs +73 -0
- data/support/cs/test/CauterizeVariableArrayFormatterTest.cs +130 -0
- data/support/cs/test/OrderAttributeTest.cs +39 -0
- data/support/cs/test/SerializedRepresentationAttributeTest.cs +39 -0
- metadata +68 -10
- data/c/src/cauterize.h +0 -46
- data/c/src/cauterize_util.h +0 -7
@@ -1,8 +1,26 @@
|
|
1
|
-
|
2
|
-
|
1
|
+
module Cauterize
|
2
|
+
describe Cauterize::Builders::C::Scalar do
|
3
|
+
let(:type_constructor) {
|
4
|
+
lambda {
|
5
|
+
|name| Cauterize.scalar(name) {
|
6
|
+
|t| t.type_name(:int32)
|
7
|
+
}
|
8
|
+
}
|
9
|
+
}
|
3
10
|
|
4
|
-
|
5
|
-
|
6
|
-
|
7
|
-
|
11
|
+
describe ".typedef_decl" do
|
12
|
+
it "declares the type synonym" do
|
13
|
+
s = Cauterize.scalar(:zeep) {|t| t.type_name(:int32)}
|
14
|
+
|
15
|
+
f = default_formatter
|
16
|
+
Builders.get(:c, s).typedef_decl(f)
|
17
|
+
f.to_s.should == "typedef int32_t zeep;"
|
18
|
+
end
|
19
|
+
end
|
20
|
+
|
21
|
+
it_behaves_like "a buildable"
|
22
|
+
it_behaves_like "a sane buildable"
|
23
|
+
include_examples "no enum"
|
24
|
+
include_examples "no struct"
|
25
|
+
end
|
8
26
|
end
|
@@ -1,49 +1,49 @@
|
|
1
|
-
|
2
|
-
|
3
|
-
|
4
|
-
|
5
|
-
|
6
|
-
|
7
|
-
|
8
|
-
|
1
|
+
module Cauterize
|
2
|
+
describe Cauterize::Builders::C::VariableArray do
|
3
|
+
let(:type_constructor) do
|
4
|
+
lambda do |name|
|
5
|
+
Cauterize.variable_array(name) do |a|
|
6
|
+
a.array_type(:uint8)
|
7
|
+
a.array_size(8)
|
8
|
+
a.size_type(:uint8)
|
9
|
+
end
|
9
10
|
end
|
10
11
|
end
|
11
|
-
end
|
12
12
|
|
13
|
-
|
14
|
-
|
15
|
-
|
13
|
+
it_behaves_like "a buildable"
|
14
|
+
it_behaves_like "a sane buildable"
|
15
|
+
include_examples "no enum"
|
16
16
|
|
17
|
-
|
18
|
-
|
19
|
-
|
20
|
-
|
21
|
-
|
22
|
-
|
23
|
-
|
24
|
-
end
|
17
|
+
context "structure definition" do
|
18
|
+
let(:vara) do
|
19
|
+
_a = Cauterize.variable_array(:va) do |a|
|
20
|
+
a.array_size(8)
|
21
|
+
a.array_type(:int32)
|
22
|
+
a.size_type(:int32)
|
23
|
+
end
|
25
24
|
|
26
|
-
|
27
|
-
|
25
|
+
Builders.get(:c, _a)
|
26
|
+
end
|
28
27
|
|
29
|
-
|
30
|
-
|
31
|
-
|
32
|
-
|
33
|
-
|
28
|
+
describe ".struct_proto" do
|
29
|
+
it "defines a structure prototype" do
|
30
|
+
f = default_formatter
|
31
|
+
vara.struct_proto(f)
|
32
|
+
f.to_s.should == "struct va;"
|
33
|
+
end
|
34
34
|
end
|
35
|
-
end
|
36
35
|
|
37
|
-
|
38
|
-
|
39
|
-
|
40
|
-
|
41
|
-
|
36
|
+
describe ".struct_defn" do
|
37
|
+
it "defines a structure definition" do
|
38
|
+
f = default_formatter
|
39
|
+
vara.struct_defn(f)
|
40
|
+
fs = f.to_s
|
42
41
|
|
43
|
-
|
44
|
-
|
45
|
-
|
46
|
-
|
42
|
+
fs.should match /struct va/
|
43
|
+
fs.should match /int32_t length;/
|
44
|
+
fs.should match /int32_t data\[8\];/
|
45
|
+
fs.should match /};/
|
46
|
+
end
|
47
47
|
end
|
48
48
|
end
|
49
49
|
end
|
@@ -0,0 +1,32 @@
|
|
1
|
+
module Cauterize
|
2
|
+
describe Cauterize::Builders::CS::Composite do
|
3
|
+
context "class definition" do
|
4
|
+
let(:comp) do
|
5
|
+
Cauterize.scalar(:int32_t) {|t| t.type_name(:int32) }
|
6
|
+
Cauterize.scalar(:int16_t) {|t| t.type_name(:int16) }
|
7
|
+
_c = Cauterize.composite(:foo) do |c|
|
8
|
+
c.field(:an_int, :int32_t)
|
9
|
+
c.field(:a_short, :int16_t)
|
10
|
+
end
|
11
|
+
|
12
|
+
Builders.get(:cs, _c)
|
13
|
+
end
|
14
|
+
|
15
|
+
describe ".class_defn" do
|
16
|
+
it "defines a class for the composite" do
|
17
|
+
f = four_space_formatter
|
18
|
+
comp.class_defn(f)
|
19
|
+
f.to_s.should == <<EOS
|
20
|
+
public class Foo : CauterizeComposite
|
21
|
+
{
|
22
|
+
[Order(0)]
|
23
|
+
public Int32 AnInt { get; set; }
|
24
|
+
[Order(1)]
|
25
|
+
public Int16 AShort { get; set; }
|
26
|
+
}
|
27
|
+
EOS
|
28
|
+
end
|
29
|
+
end
|
30
|
+
end
|
31
|
+
end
|
32
|
+
end
|
@@ -0,0 +1,33 @@
|
|
1
|
+
module Cauterize
|
2
|
+
describe Cauterize::Builders::CS::Enumeration do
|
3
|
+
describe ".enum_defn" do
|
4
|
+
let(:en) do
|
5
|
+
_e = Cauterize.enumeration(:foo) do |e|
|
6
|
+
e.value :aaa
|
7
|
+
e.value :bbb
|
8
|
+
e.value "quick_brown_fox".to_sym
|
9
|
+
end
|
10
|
+
|
11
|
+
f = default_formatter
|
12
|
+
Builders.get(:cs, _e).enum_defn(f)
|
13
|
+
f.to_s
|
14
|
+
end
|
15
|
+
|
16
|
+
it "contains the serialized representation annotation" do
|
17
|
+
en.should match /\[SerializedRepresentation\(typeof\(SByte\)\)\]/
|
18
|
+
end
|
19
|
+
|
20
|
+
it "contains the enum name" do
|
21
|
+
en.should match /public enum Foo/
|
22
|
+
end
|
23
|
+
|
24
|
+
it "contains an entry for each value" do
|
25
|
+
en.should match /Aaa = 0,/
|
26
|
+
en.should match /Bbb = 1,/
|
27
|
+
en.should match /QuickBrownFox = 2,/
|
28
|
+
en.should match /};/
|
29
|
+
end
|
30
|
+
end
|
31
|
+
end
|
32
|
+
end
|
33
|
+
|
@@ -0,0 +1,40 @@
|
|
1
|
+
describe Cauterize::Builders::CS::FixedArray do
|
2
|
+
|
3
|
+
context "array class definition" do
|
4
|
+
let(:fixed_arr) do
|
5
|
+
Cauterize.scalar(:uint32_t) {|t| t.type_name(:uint32)}
|
6
|
+
_fa = Cauterize.fixed_array(:myriad_data) do |a|
|
7
|
+
a.array_type :uint32_t
|
8
|
+
a.array_size 16
|
9
|
+
end
|
10
|
+
|
11
|
+
Cauterize::Builders.get(:cs, _fa)
|
12
|
+
end
|
13
|
+
|
14
|
+
describe ".class_defn" do
|
15
|
+
let(:text) do
|
16
|
+
f = four_space_formatter
|
17
|
+
fixed_arr.class_defn(f)
|
18
|
+
text = f.to_s
|
19
|
+
end
|
20
|
+
it "defines a class for the array" do
|
21
|
+
text.should match /public class MyriadData : CauterizeFixedArrayTyped<UInt32>/
|
22
|
+
end
|
23
|
+
|
24
|
+
it "sets the size of the array from configuration" do
|
25
|
+
text.should match /public MyriadData\(\)/ # no args
|
26
|
+
text.should match /Allocate\(16\);/
|
27
|
+
end
|
28
|
+
|
29
|
+
it "allows defaulting an array" do
|
30
|
+
text.should match /public MyriadData\(UInt32\[\] data\)/
|
31
|
+
text.should match /Allocate\(data\);/
|
32
|
+
end
|
33
|
+
|
34
|
+
it "defines a size" do
|
35
|
+
text.should match /protected override int Size/
|
36
|
+
text.should match /get { return 16; }/
|
37
|
+
end
|
38
|
+
end
|
39
|
+
end
|
40
|
+
end
|
@@ -0,0 +1,56 @@
|
|
1
|
+
module Cauterize
|
2
|
+
describe Cauterize::Builders::CS::Group do
|
3
|
+
context "enumeration for type tag" do
|
4
|
+
before do
|
5
|
+
Cauterize.scalar(:uint8_t) {|t| t.type_name(:uint8)}
|
6
|
+
@g = Cauterize.group!(:some_name) do |_g|
|
7
|
+
_g.field(:a, :uint8_t)
|
8
|
+
_g.field(:b, :uint8_t)
|
9
|
+
_g.field(:c)
|
10
|
+
_g.field(:d, :uint8_t)
|
11
|
+
end
|
12
|
+
@b = Cauterize::Builders::CS::Group.new(@g)
|
13
|
+
end
|
14
|
+
|
15
|
+
describe ".initialize" do
|
16
|
+
it "creates the enumeration tag" do
|
17
|
+
@b.instance_variable_get(:@tag_enum).class.name.should == "Cauterize::Enumeration"
|
18
|
+
end
|
19
|
+
end
|
20
|
+
|
21
|
+
describe "@tag_enum" do
|
22
|
+
it "contains a entry for each field in the group" do
|
23
|
+
e = @b.instance_variable_get(:@tag_enum)
|
24
|
+
e.values.keys.should =~ [ :GROUP_SOME_NAME_TYPE_A,
|
25
|
+
:GROUP_SOME_NAME_TYPE_B,
|
26
|
+
:GROUP_SOME_NAME_TYPE_C,
|
27
|
+
:GROUP_SOME_NAME_TYPE_D ]
|
28
|
+
end
|
29
|
+
end
|
30
|
+
|
31
|
+
describe ".class_defn" do
|
32
|
+
it "defines an enum and class" do
|
33
|
+
f = four_space_formatter
|
34
|
+
@b.class_defn(f)
|
35
|
+
fs = f.to_s
|
36
|
+
|
37
|
+
fs.should == <<EOS
|
38
|
+
public class SomeName : CauterizeGroup
|
39
|
+
{
|
40
|
+
[Order(0)]
|
41
|
+
public GroupSomeNameType Type { get; set; }
|
42
|
+
|
43
|
+
[Order(1)]
|
44
|
+
public Byte A { get; set; }
|
45
|
+
[Order(2)]
|
46
|
+
public Byte B { get; set; }
|
47
|
+
/* No data associated with 'c'. */
|
48
|
+
[Order(4)]
|
49
|
+
public Byte D { get; set; }
|
50
|
+
}
|
51
|
+
EOS
|
52
|
+
end
|
53
|
+
end
|
54
|
+
end
|
55
|
+
end
|
56
|
+
end
|
@@ -0,0 +1,46 @@
|
|
1
|
+
describe Cauterize::Builders::CS::VariableArray do
|
2
|
+
|
3
|
+
context "array class definition" do
|
4
|
+
let(:var_arr) do
|
5
|
+
Cauterize.scalar(:uint32_t) {|t| t.type_name(:uint32)}
|
6
|
+
Cauterize.scalar(:uint8_t) {|t| t.type_name(:uint8)}
|
7
|
+
_va = Cauterize.variable_array(:myriad_data) do |a|
|
8
|
+
a.size_type :uint8_t
|
9
|
+
a.array_type :uint32_t
|
10
|
+
a.array_size 16
|
11
|
+
end
|
12
|
+
|
13
|
+
Cauterize::Builders.get(:cs, _va)
|
14
|
+
end
|
15
|
+
|
16
|
+
describe ".class_defn" do
|
17
|
+
let(:text) do
|
18
|
+
f = four_space_formatter
|
19
|
+
var_arr.class_defn(f)
|
20
|
+
text = f.to_s
|
21
|
+
end
|
22
|
+
it "defines a class for the array" do
|
23
|
+
text.should match /public class MyriadData : CauterizeVariableArrayTyped<UInt32>/
|
24
|
+
end
|
25
|
+
|
26
|
+
it "defines the size type" do
|
27
|
+
text.should match /public static Type SizeType = typeof\(Byte\);/
|
28
|
+
end
|
29
|
+
|
30
|
+
it "sets the size of the array from configuration" do
|
31
|
+
text.should match /public MyriadData\(int size\)/ # no args
|
32
|
+
text.should match /Allocate\(size\);/
|
33
|
+
end
|
34
|
+
|
35
|
+
it "allows defaulting an array" do
|
36
|
+
text.should match /public MyriadData\(UInt32\[\] data\)/
|
37
|
+
text.should match /Allocate\(data\);/
|
38
|
+
end
|
39
|
+
|
40
|
+
it "defines a max size" do
|
41
|
+
text.should match /protected override int MaxSize/
|
42
|
+
text.should match /get { return Byte\.MaxValue; }/
|
43
|
+
end
|
44
|
+
end
|
45
|
+
end
|
46
|
+
end
|
data/spec/builders_spec.rb
CHANGED
@@ -1,51 +1,51 @@
|
|
1
|
-
|
2
|
-
describe
|
3
|
-
|
4
|
-
|
5
|
-
|
6
|
-
|
1
|
+
module Cauterize
|
2
|
+
describe Cauterize::Builders do
|
3
|
+
describe "#register and #get" do
|
4
|
+
let(:s) { Cauterize.scalar(:uint8_t) }
|
5
|
+
before do
|
6
|
+
class X; def initialize(i); end; end
|
7
|
+
class Y; def initialize(i); end; end
|
7
8
|
|
8
|
-
|
9
|
-
|
10
|
-
|
11
|
-
|
12
|
-
|
9
|
+
# save the old list so that we can restore it later.
|
10
|
+
old_builders = nil
|
11
|
+
Cauterize::Builders.module_exec do
|
12
|
+
old_builders = @builders
|
13
|
+
@builders = nil
|
14
|
+
end
|
15
|
+
@old_builders = old_builders
|
13
16
|
end
|
14
|
-
@old_builders = old_builders
|
15
|
-
end
|
16
17
|
|
17
|
-
|
18
|
-
|
19
|
-
|
20
|
-
|
21
|
-
|
18
|
+
after do
|
19
|
+
# restore the builders so as not to break any other tests
|
20
|
+
old_builders = @old_builders
|
21
|
+
Cauterize::Builders.module_exec do
|
22
|
+
@builders = old_builders
|
23
|
+
end
|
22
24
|
end
|
23
|
-
end
|
24
25
|
|
25
|
-
|
26
|
-
|
27
|
-
|
28
|
-
|
26
|
+
it "saves and retrieves classes" do
|
27
|
+
Cauterize::Builders.register(:c, Cauterize::Scalar, X)
|
28
|
+
Cauterize::Builders.get(:c, s).class.should be X
|
29
|
+
end
|
29
30
|
|
30
|
-
|
31
|
-
|
32
|
-
|
31
|
+
it "handles multiple languages" do
|
32
|
+
Cauterize::Builders.register(:c, Cauterize::Scalar, X)
|
33
|
+
Cauterize::Builders.get(:c, s).class.should be X
|
33
34
|
|
34
|
-
|
35
|
-
|
36
|
-
|
35
|
+
Cauterize::Builders.register(:cs, Cauterize::Scalar, Y)
|
36
|
+
Cauterize::Builders.get(:cs, s).class.should be Y
|
37
|
+
end
|
37
38
|
|
38
|
-
|
39
|
-
Cauterize::Builders.register(:c, Cauterize::Scalar, X)
|
40
|
-
lambda {
|
39
|
+
it "raises an error on duplicate registrations" do
|
41
40
|
Cauterize::Builders.register(:c, Cauterize::Scalar, X)
|
42
|
-
|
43
|
-
|
41
|
+
lambda {
|
42
|
+
Cauterize::Builders.register(:c, Cauterize::Scalar, X)
|
43
|
+
}.should raise_error /already registered/
|
44
|
+
end
|
44
45
|
|
45
|
-
|
46
|
-
|
47
|
-
|
48
|
-
}.should raise_error /unregistered/
|
46
|
+
it "is nil if no builder is registered" do
|
47
|
+
Cauterize::Builders.get(:c, s).should be_nil
|
48
|
+
end
|
49
49
|
end
|
50
50
|
end
|
51
51
|
end
|
@@ -0,0 +1,46 @@
|
|
1
|
+
module Cauterize
|
2
|
+
|
3
|
+
describe BuiltIn do
|
4
|
+
describe :initialize do
|
5
|
+
it "creates a builtin" do
|
6
|
+
b = BuiltIn.new(:foo)
|
7
|
+
b.is_signed(false)
|
8
|
+
b.byte_length(4)
|
9
|
+
|
10
|
+
b.name.should == :foo
|
11
|
+
b.is_signed.should == false
|
12
|
+
b.byte_length.should == 4
|
13
|
+
end
|
14
|
+
end
|
15
|
+
|
16
|
+
describe :id do
|
17
|
+
it "has a unique id for each builtin" do
|
18
|
+
ids = Cauterize.builtins.values.map(&:id)
|
19
|
+
ids.uniq.should =~ ids
|
20
|
+
end
|
21
|
+
end
|
22
|
+
end
|
23
|
+
|
24
|
+
|
25
|
+
# Since the builtins are static, we make sure they are all defined here. They
|
26
|
+
# should be created as part of the loading process. This is kinda evil.
|
27
|
+
describe :builtins do
|
28
|
+
Cauterize.builtins.keys.should =~ [
|
29
|
+
:int8, :int16, :int32, :int64,
|
30
|
+
:uint8, :uint16, :uint32, :uint64,
|
31
|
+
]
|
32
|
+
end
|
33
|
+
|
34
|
+
# We should not provide a way for people to build more builtin types directly.
|
35
|
+
# This test ensures that there isn't a method to do so, but only by checking
|
36
|
+
# that we haven't added the convention.
|
37
|
+
#
|
38
|
+
# I know, I know, testing negative behavior.
|
39
|
+
describe :builtin do
|
40
|
+
it "should not exist" do
|
41
|
+
lambda {
|
42
|
+
Cauterize.builtin(:foo)
|
43
|
+
}.should raise_error /undefined method/
|
44
|
+
end
|
45
|
+
end
|
46
|
+
end
|