sal-tools-analyze 0.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.
- data/AUTHORS +1 -0
- data/README +20 -0
- data/lib/sal/class.rb +43 -0
- data/lib/sal/code.rb +236 -0
- data/lib/sal/command.rb +35 -0
- data/lib/sal/external.rb +37 -0
- data/lib/sal/externalfunction.rb +46 -0
- data/lib/sal/format.rb +43 -0
- data/lib/sal/function.rb +26 -0
- data/lib/sal/item.rb +214 -0
- data/lib/sal/library.rb +25 -0
- data/lib/sal/version.rb +161 -0
- data/sal-tools-analyze.gemspec +16 -0
- data/test/data/test.21.text.sql.app +458 -0
- data/test/data/test.40.indented.app +219 -0
- data/test/data/test.40.normal.app +0 -0
- data/test/data/test.40.text.app +218 -0
- data/test/data/test.40.text.classes.app +350 -0
- data/test/data/test.40.text.multiline.app +228 -0
- data/test/data/test.41.indented.app +218 -0
- data/test/data/test.41.normal.app +0 -0
- data/test/data/test.41.text.app +218 -0
- data/test/data/test.41.text.externalfunctions.app +352 -0
- data/test/test.rb +16 -0
- data/test/test_class.rb +34 -0
- data/test/test_code.rb +180 -0
- data/test/test_command.rb +16 -0
- data/test/test_external.rb +37 -0
- data/test/test_externalfunction.rb +76 -0
- data/test/test_format.rb +58 -0
- data/test/test_function.rb +22 -0
- data/test/test_item.rb +123 -0
- data/test/test_library.rb +38 -0
- data/test/test_version.rb +80 -0
- metadata +128 -0
@@ -0,0 +1,16 @@
|
|
1
|
+
#!/opt/local/bin/ruby
|
2
|
+
|
3
|
+
require 'minitest/unit'
|
4
|
+
require_relative '../lib/sal/command'
|
5
|
+
require_relative '../lib/sal/code'
|
6
|
+
|
7
|
+
class TestCommand < MiniTest::Unit::TestCase
|
8
|
+
|
9
|
+
def test_function
|
10
|
+
assert_equal(false, Sal::Command.is_code_line?("Message Actions"))
|
11
|
+
assert_equal(true, Sal::Command.is_code_line?("Set bOk = TRUE"))
|
12
|
+
end
|
13
|
+
|
14
|
+
end
|
15
|
+
|
16
|
+
MiniTest::Unit.autorun
|
@@ -0,0 +1,37 @@
|
|
1
|
+
#!/opt/local/bin/ruby
|
2
|
+
|
3
|
+
require 'minitest/unit'
|
4
|
+
require_relative '../lib/sal/external'
|
5
|
+
require_relative '../lib/sal/code'
|
6
|
+
|
7
|
+
class TestExternal < MiniTest::Unit::TestCase
|
8
|
+
|
9
|
+
def test_item_external
|
10
|
+
name = "vti41.dll"
|
11
|
+
code = "Library name: #{name}"
|
12
|
+
line = ".head 3 + #{code}\r\n"
|
13
|
+
item = Sal::Item.new(line)
|
14
|
+
|
15
|
+
extlib = Sal::External.new(item)
|
16
|
+
|
17
|
+
assert_equal(item, extlib.item)
|
18
|
+
assert_equal(name, extlib.name)
|
19
|
+
end
|
20
|
+
|
21
|
+
def test_external_none_in_file
|
22
|
+
code = Sal::Code.new('data/test.40.text.app')
|
23
|
+
libs = code.externals
|
24
|
+
assert_equal(0, libs.count)
|
25
|
+
end
|
26
|
+
|
27
|
+
def test_external_in_file
|
28
|
+
code = Sal::Code.new('data/test.41.text.externalfunctions.app')
|
29
|
+
libs = code.externals
|
30
|
+
assert_equal(1, libs.count)
|
31
|
+
funcs = libs[0].functions
|
32
|
+
assert_equal(11, funcs.count)
|
33
|
+
end
|
34
|
+
|
35
|
+
end
|
36
|
+
|
37
|
+
MiniTest::Unit.autorun
|
@@ -0,0 +1,76 @@
|
|
1
|
+
#!/opt/local/bin/ruby
|
2
|
+
|
3
|
+
require 'minitest/unit'
|
4
|
+
require_relative '../lib/sal/externalfunction'
|
5
|
+
|
6
|
+
class TestExternalFunction < MiniTest::Unit::TestCase
|
7
|
+
|
8
|
+
def get_sample_external
|
9
|
+
item = Sal::Item.new(".head 3 + Library name: Test.dll\r\n")
|
10
|
+
item.childs << Sal::Item.new(".head 4 - ThreadSafe: No\r\n")
|
11
|
+
item.childs << get_sample_external_function_item
|
12
|
+
return item
|
13
|
+
end
|
14
|
+
|
15
|
+
def get_sample_external_function_item
|
16
|
+
item = Sal::Item.new(".head 4 + Function: Func1\r\n")
|
17
|
+
item.childs << Sal::Item.new(".head 5 - Description: ...\r\n")
|
18
|
+
item.childs << Sal::Item.new(".head 5 - Export Ordinal: 111\r\n")
|
19
|
+
returns = Sal::Item.new(".head 5 + Returns\r\n")
|
20
|
+
returns.childs << Sal::Item.new(".head 6 - Number: LONG\r\n")
|
21
|
+
item.childs << returns
|
22
|
+
parameters = Sal::Item.new(".head 5 + Parameters\r\n")
|
23
|
+
parameters.childs << Sal::Item.new(".head 6 - Date/Time: HARRAY\r\n")
|
24
|
+
parameters.childs << Sal::Item.new(".head 6 - ! Number: HARRAY\r\n")
|
25
|
+
parameters.childs << Sal::Item.new(".head 6 - Date/Time: DATETIME\r\n")
|
26
|
+
item.childs << parameters
|
27
|
+
return item
|
28
|
+
end
|
29
|
+
|
30
|
+
def test_item_file_include
|
31
|
+
f1_name = "Func1"
|
32
|
+
f1_code = "Function: #{f1_name}"
|
33
|
+
f1_line = ".head 4 + #{f1_code}\r\n"
|
34
|
+
f1_item = Sal::Item.new(f1_line)
|
35
|
+
|
36
|
+
x1_code = "! Description"
|
37
|
+
x1_line = ".head 4 - #{x1_code}\r\n"
|
38
|
+
x1_item = Sal::Item.new(x1_line)
|
39
|
+
|
40
|
+
l_name = "Test.dll"
|
41
|
+
l_code = "Library name: #{l_name}"
|
42
|
+
l_line = ".head 3 + #{l_code}\r\n"
|
43
|
+
l_item = Sal::Item.new(l_line)
|
44
|
+
|
45
|
+
l_item.childs << f1_item
|
46
|
+
l_item.childs << x1_item
|
47
|
+
|
48
|
+
assert_equal(2, l_item.childs.count)
|
49
|
+
extlib = Sal::External.new(l_item)
|
50
|
+
|
51
|
+
assert_equal(l_item, extlib.item)
|
52
|
+
assert_equal(l_name, extlib.name)
|
53
|
+
|
54
|
+
assert_equal(1, extlib.functions.count)
|
55
|
+
|
56
|
+
extfunc = extlib.functions[0]
|
57
|
+
assert_equal(f1_name, extfunc.name)
|
58
|
+
end
|
59
|
+
|
60
|
+
def test_item_ordinal
|
61
|
+
item = get_sample_external
|
62
|
+
library = Sal::External.new(item)
|
63
|
+
refute_equal(nil, library)
|
64
|
+
assert_equal(1, library.functions.count)
|
65
|
+
|
66
|
+
function = library.functions[0]
|
67
|
+
refute_equal(nil, function)
|
68
|
+
assert_equal("Func1", function.name)
|
69
|
+
assert_equal(111, function.ordinal)
|
70
|
+
assert_equal("Test.dll::Func1", function.key)
|
71
|
+
assert_equal(2, function.parameters.count)
|
72
|
+
assert_equal(Sal::Item, function.parameters[0].class)
|
73
|
+
end
|
74
|
+
end
|
75
|
+
|
76
|
+
MiniTest::Unit.autorun
|
data/test/test_format.rb
ADDED
@@ -0,0 +1,58 @@
|
|
1
|
+
#!/opt/local/bin/ruby
|
2
|
+
|
3
|
+
require 'minitest/unit'
|
4
|
+
require_relative '../lib/sal/format'
|
5
|
+
|
6
|
+
class TestFileFormat < MiniTest::Unit::TestCase
|
7
|
+
|
8
|
+
def setup
|
9
|
+
@files = []
|
10
|
+
@files << "data/test.40.indented.app"
|
11
|
+
@files << "data/test.40.text.app"
|
12
|
+
@files << "data/test.40.normal.app"
|
13
|
+
@files << "data/test.41.indented.app"
|
14
|
+
@files << "data/test.41.text.app"
|
15
|
+
@files << "data/test.41.normal.app"
|
16
|
+
@files << "data/test.21.text.sql.app"
|
17
|
+
end
|
18
|
+
|
19
|
+
def test_file_format
|
20
|
+
@files.grep(/\.indented\./).each do | file |
|
21
|
+
assert_equal( Sal::Format::INDENTED, Sal::Format.get_from_file(file) )
|
22
|
+
end
|
23
|
+
|
24
|
+
@files.grep(/\.text\./).each do | file |
|
25
|
+
assert_equal( Sal::Format::TEXT, Sal::Format.get_from_file(file) )
|
26
|
+
end
|
27
|
+
|
28
|
+
@files.grep(/\.normal\./).each do | file |
|
29
|
+
assert_equal( Sal::Format::NORMAL, Sal::Format.get_from_file(file) )
|
30
|
+
end
|
31
|
+
end
|
32
|
+
|
33
|
+
def test_get_from_code
|
34
|
+
assert_equal( Sal::Format::TEXT,
|
35
|
+
Sal::Format.get_from_code(".head 1 - Outline Version - 4.0.34"))
|
36
|
+
assert_equal( Sal::Format::INDENTED,
|
37
|
+
Sal::Format.get_from_code("Outline Version - 4.0.34"))
|
38
|
+
assert_equal( Sal::Format::NORMAL,
|
39
|
+
Sal::Format.get_from_code("01234567890"))
|
40
|
+
end
|
41
|
+
|
42
|
+
def test_check_constants
|
43
|
+
assert_equal( Sal::Format::TEXT, :t )
|
44
|
+
refute_equal( Sal::Format::TEXT, "t" )
|
45
|
+
assert_equal( Sal::Format::NORMAL, :n )
|
46
|
+
refute_equal( Sal::Format::NORMAL, "n" )
|
47
|
+
assert_equal( Sal::Format::INDENTED, :i )
|
48
|
+
refute_equal( Sal::Format::INDENTED, "i" )
|
49
|
+
end
|
50
|
+
|
51
|
+
def test_get_from_line
|
52
|
+
assert_equal( Sal::Format::TEXT, Sal::Format.get_from_line(".head 5 - ..."))
|
53
|
+
assert_equal( Sal::Format::INDENTED, Sal::Format.get_from_line("Application Description"))
|
54
|
+
assert_equal( Sal::Format::INDENTED, Sal::Format.get_from_line(" Design-time Settings"))
|
55
|
+
end
|
56
|
+
end
|
57
|
+
|
58
|
+
MiniTest::Unit.autorun
|
@@ -0,0 +1,22 @@
|
|
1
|
+
#!/opt/local/bin/ruby
|
2
|
+
|
3
|
+
require 'minitest/unit'
|
4
|
+
require_relative '../lib/sal/function'
|
5
|
+
|
6
|
+
class TestFunction < MiniTest::Unit::TestCase
|
7
|
+
|
8
|
+
def test_function
|
9
|
+
name = "Name"
|
10
|
+
code = "Function: #{name}"
|
11
|
+
line = ".head 5 + #{code}\r\n"
|
12
|
+
item = Sal::Item.new(line)
|
13
|
+
|
14
|
+
func = Sal::Function.new(item)
|
15
|
+
|
16
|
+
assert_equal(item, func.item)
|
17
|
+
assert_equal(name, func.name)
|
18
|
+
end
|
19
|
+
|
20
|
+
end
|
21
|
+
|
22
|
+
MiniTest::Unit.autorun
|
data/test/test_item.rb
ADDED
@@ -0,0 +1,123 @@
|
|
1
|
+
#!/opt/local/bin/ruby
|
2
|
+
|
3
|
+
require 'minitest/unit'
|
4
|
+
require_relative '../lib/sal/item'
|
5
|
+
require_relative '../lib/sal/code'
|
6
|
+
|
7
|
+
class TestItem < MiniTest::Unit::TestCase
|
8
|
+
|
9
|
+
def setup
|
10
|
+
@lines = []
|
11
|
+
@lines << ".head 0 + Application Description: Gupta SQLWindows Standard Application Template\r\n"
|
12
|
+
@lines << ".head 1 + ! Outline Version - 4.0.34\r\n"
|
13
|
+
@lines << ".head 2 + Set bCommented = TRUE\r\n"
|
14
|
+
@lines << ".head 3 - ! Set bCommented = TRUE\r\n"
|
15
|
+
|
16
|
+
@items = []
|
17
|
+
parent = nil
|
18
|
+
@lines.each do | line |
|
19
|
+
item = Sal::Item.new(line, Sal::Format::TEXT)
|
20
|
+
item.parent = parent unless parent.nil?
|
21
|
+
parent.childs << item unless parent.nil?
|
22
|
+
parent = item
|
23
|
+
@items << item
|
24
|
+
end
|
25
|
+
end
|
26
|
+
|
27
|
+
def test_item_outline_version_text
|
28
|
+
code = "Outline Version - 4.0.34"
|
29
|
+
line = ".head 1 - #{code}\r\n"
|
30
|
+
item = Sal::Item.new(line)
|
31
|
+
|
32
|
+
assert_equal(line, item.line)
|
33
|
+
assert_equal(Sal::Format::TEXT, item.format)
|
34
|
+
assert_equal(1, item.level)
|
35
|
+
assert_equal(false, item.commented?)
|
36
|
+
assert_equal(nil, item.parent)
|
37
|
+
assert_equal(0, item.childs.count)
|
38
|
+
assert_equal(code, item.code)
|
39
|
+
assert_equal(true, item.analyzed?)
|
40
|
+
assert_equal(-1, item.code_line_nr)
|
41
|
+
assert_equal(nil, item.tag)
|
42
|
+
end
|
43
|
+
|
44
|
+
def test_item_outline_version_indented
|
45
|
+
# code = "Outline Version - 4.0.34"
|
46
|
+
# line = "\t#{code}\r\n"
|
47
|
+
# item = Sal::Item.new(line)
|
48
|
+
|
49
|
+
# assert_equal(line, item.line)
|
50
|
+
# assert_equal(Sal::Format::INDENTED, item.format)
|
51
|
+
# assert_equal(1, item.level)
|
52
|
+
# assert_equal(false, item.commented?)
|
53
|
+
# assert_equal(nil, item.parent)
|
54
|
+
# assert_equal(0, item.childs.count)
|
55
|
+
# assert_equal(code, item.code)
|
56
|
+
# assert_equal(true, item.analyzed?)
|
57
|
+
# assert_equal(-1, item.code_line_nr)
|
58
|
+
# assert_equal(nil, item.tag)
|
59
|
+
end
|
60
|
+
|
61
|
+
def test_item_file_include
|
62
|
+
code = "File Include: qckttip.apl"
|
63
|
+
line = ".head 2 - #{code}\r\n"
|
64
|
+
item = Sal::Item.new(line)
|
65
|
+
|
66
|
+
assert_equal(line, item.line)
|
67
|
+
assert_equal(line, item.original)
|
68
|
+
assert_equal(Sal::Format::TEXT, item.format)
|
69
|
+
assert_equal(2, item.level)
|
70
|
+
assert_equal(false, item.commented?)
|
71
|
+
assert_equal(nil, item.parent)
|
72
|
+
assert_equal(0, item.childs.count)
|
73
|
+
assert_equal(true, item.analyzed?)
|
74
|
+
assert_equal(code, item.code)
|
75
|
+
assert_equal(-1, item.code_line_nr)
|
76
|
+
assert_equal(nil, item.tag)
|
77
|
+
end
|
78
|
+
|
79
|
+
def test_item_commented
|
80
|
+
commented = 0
|
81
|
+
item_commented = 0
|
82
|
+
|
83
|
+
@items.each do | item |
|
84
|
+
commented += 1 if item.commented?
|
85
|
+
item_commented += 1 if item.item_commented?
|
86
|
+
end
|
87
|
+
|
88
|
+
assert_equal(3, commented)
|
89
|
+
assert_equal(2, item_commented)
|
90
|
+
end
|
91
|
+
|
92
|
+
def test_item_count
|
93
|
+
assert_equal(1, @items.find_all {|item| item.level == 1 }.length)
|
94
|
+
end
|
95
|
+
|
96
|
+
def test_is_code_line
|
97
|
+
counter = 0
|
98
|
+
@items.each do | item |
|
99
|
+
counter += 1 if item.is_code_line?
|
100
|
+
end
|
101
|
+
assert_equal(1, counter, "Count of code lines in sample code")
|
102
|
+
end
|
103
|
+
|
104
|
+
def test_item_code_multiline
|
105
|
+
code = Sal::Code.new("data/test.40.text.multiline.app")
|
106
|
+
code.items.each do | item |
|
107
|
+
if item.code =~ /^Set /
|
108
|
+
assert_equal(2, item.code.each_line.to_a.length)
|
109
|
+
end
|
110
|
+
end
|
111
|
+
end
|
112
|
+
|
113
|
+
def test_item_comment
|
114
|
+
code = "File Include: qckttip.apl"
|
115
|
+
line = ".head 2 - #{code}\r\n"
|
116
|
+
item = Sal::Item.new(line)
|
117
|
+
item.item_comment
|
118
|
+
assert_equal("! #{code}", item.code)
|
119
|
+
end
|
120
|
+
|
121
|
+
end
|
122
|
+
|
123
|
+
MiniTest::Unit.autorun
|
@@ -0,0 +1,38 @@
|
|
1
|
+
#!/opt/local/bin/ruby
|
2
|
+
|
3
|
+
require 'minitest/unit'
|
4
|
+
require_relative '../lib/sal/library'
|
5
|
+
require_relative '../lib/sal/code'
|
6
|
+
require_relative '../lib/sal/item'
|
7
|
+
|
8
|
+
class TestLibrary < MiniTest::Unit::TestCase
|
9
|
+
|
10
|
+
def test_item_file_include
|
11
|
+
name = "qckttip.apl"
|
12
|
+
code = "File Include: #{name}"
|
13
|
+
line = ".head 2 - #{code}\r\n"
|
14
|
+
item = Sal::Item.new(line)
|
15
|
+
|
16
|
+
library = Sal::Library.new(item)
|
17
|
+
|
18
|
+
assert_equal(item, library.item)
|
19
|
+
assert_equal(name, library.name)
|
20
|
+
end
|
21
|
+
|
22
|
+
def test_libraries
|
23
|
+
libraries = Sal::Code.new("data/test.40.text.app").libraries
|
24
|
+
assert_equal(2, libraries.length)
|
25
|
+
assert_equal("qckttip.apl", libraries[0].name)
|
26
|
+
assert_equal("vt.apl", libraries[1].name)
|
27
|
+
end
|
28
|
+
|
29
|
+
def test_get_name
|
30
|
+
item = Sal::Item.new("")
|
31
|
+
lib = Sal::Library.new(item)
|
32
|
+
assert_equal("test", lib.send(:get_name,"File Include: test"))
|
33
|
+
assert_equal("test", lib.send(:get_name,"File Include: test ! jacka"))
|
34
|
+
end
|
35
|
+
|
36
|
+
end
|
37
|
+
|
38
|
+
MiniTest::Unit.autorun
|
@@ -0,0 +1,80 @@
|
|
1
|
+
#!/opt/local/bin/ruby
|
2
|
+
|
3
|
+
require 'minitest/unit'
|
4
|
+
require_relative '../lib/sal/version'
|
5
|
+
|
6
|
+
class TestVersion < MiniTest::Unit::TestCase
|
7
|
+
|
8
|
+
def test_file_to_td
|
9
|
+
|
10
|
+
# unit tests für versionen von 0 bis 100
|
11
|
+
i = 0
|
12
|
+
test_empty = Array.new
|
13
|
+
test_empty += (0..25).to_a
|
14
|
+
test_empty += [29, 30, 33, 36]
|
15
|
+
test_empty += (38..100).to_a
|
16
|
+
test_empty.each do | test |
|
17
|
+
i += 1
|
18
|
+
begin
|
19
|
+
Sal::Version.file_to_td(test)
|
20
|
+
assert false
|
21
|
+
rescue RuntimeError
|
22
|
+
assert true
|
23
|
+
end
|
24
|
+
end
|
25
|
+
|
26
|
+
assert_equal("1.1", Sal::Version.file_to_td(26))
|
27
|
+
assert_equal("1.5", Sal::Version.file_to_td(27))
|
28
|
+
assert_equal("2.0", Sal::Version.file_to_td(28))
|
29
|
+
# assert_equal("2.1", Sal::Version.file_to_td(28))
|
30
|
+
assert_equal("3.0", Sal::Version.file_to_td(31))
|
31
|
+
assert_equal("3.1", Sal::Version.file_to_td(32))
|
32
|
+
assert_equal("4.0", Sal::Version.file_to_td(34))
|
33
|
+
assert_equal("4.1", Sal::Version.file_to_td(35))
|
34
|
+
# assert_equal("5.0", Sal::Version.file_to_td(37))
|
35
|
+
assert_equal("5.1", Sal::Version.file_to_td(37))
|
36
|
+
|
37
|
+
# unknown versions
|
38
|
+
|
39
|
+
# assert_equal( "4.2", Sal::Version.file_to_td(??))
|
40
|
+
# assert_equal( "5.2", Sal::Version.file_to_td(??))
|
41
|
+
# assert_equal( "6.0", Sal::Version.file_to_td(??))
|
42
|
+
end
|
43
|
+
|
44
|
+
def test_td_to_file
|
45
|
+
assert_equal(26, Sal::Version.td_to_file("1.1"))
|
46
|
+
assert_equal(27, Sal::Version.td_to_file("1.5"))
|
47
|
+
assert_equal(28, Sal::Version.td_to_file("2.0"))
|
48
|
+
assert_equal(28, Sal::Version.td_to_file("2.1"))
|
49
|
+
assert_equal(31, Sal::Version.td_to_file("3.0"))
|
50
|
+
assert_equal(32, Sal::Version.td_to_file("3.1"))
|
51
|
+
assert_equal(34, Sal::Version.td_to_file("4.0"))
|
52
|
+
assert_equal(35, Sal::Version.td_to_file("4.1"))
|
53
|
+
assert_equal(37, Sal::Version.td_to_file("5.0"))
|
54
|
+
assert_equal(37, Sal::Version.td_to_file("5.1"))
|
55
|
+
|
56
|
+
# unknown versions
|
57
|
+
|
58
|
+
# assert_equal(??, Sal::Version.td_to_file("4.2"))
|
59
|
+
# assert_equal(??, Sal::Version.td_to_file("5.2"))
|
60
|
+
# assert_equal(??, Sal::Version.td_to_file("6.0"))
|
61
|
+
end
|
62
|
+
|
63
|
+
def test_initialize
|
64
|
+
assert_equal(26, Sal::Version.new("1.1").file)
|
65
|
+
assert_equal("1.1", Sal::Version.new(26).td)
|
66
|
+
end
|
67
|
+
|
68
|
+
def test_from_code
|
69
|
+
assert_equal(26, Sal::Version.from_code(".head 1 - Outline Version - 4.0.26").file)
|
70
|
+
assert_equal(26, Sal::Version.from_code("Outline Version - 4.0.26").file)
|
71
|
+
end
|
72
|
+
|
73
|
+
def test_to_code
|
74
|
+
version = Sal::Version.new(27)
|
75
|
+
assert_equal("Outline Version - 4.0.27", version.to_code("Outline Version - 4.0.26"))
|
76
|
+
end
|
77
|
+
|
78
|
+
end
|
79
|
+
|
80
|
+
MiniTest::Unit.autorun
|