crosslanguagespotter 0.0.2-java

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 (92) hide show
  1. checksums.yaml +7 -0
  2. data/.gitignore +19 -0
  3. data/Gemfile +3 -0
  4. data/Rakefile +13 -0
  5. data/crosslanguagespotter.gemspec +36 -0
  6. data/examples/ex1.rb +13 -0
  7. data/examples/services_example.rb +13 -0
  8. data/lib/crosslanguagespotter/basic.rb +157 -0
  9. data/lib/crosslanguagespotter/context.rb +139 -0
  10. data/lib/crosslanguagespotter/figures_evaluator.rb +160 -0
  11. data/lib/crosslanguagespotter/jaccard.rb +114 -0
  12. data/lib/crosslanguagespotter/methods/context.rb +127 -0
  13. data/lib/crosslanguagespotter/methods/jaro.rb +118 -0
  14. data/lib/crosslanguagespotter/methods/tversky.rb +44 -0
  15. data/lib/crosslanguagespotter/model_loading.rb +333 -0
  16. data/lib/crosslanguagespotter/oracle.rb +261 -0
  17. data/lib/crosslanguagespotter/report.rb +88 -0
  18. data/lib/crosslanguagespotter/version.rb +5 -0
  19. data/lib/crosslanguagespotter/wekaintegration.rb +83 -0
  20. data/lib/crosslanguagespotter.rb +7 -0
  21. data/lib/jars/weka.jar +0 -0
  22. data/resources/css/bootstrap-theme.css +346 -0
  23. data/resources/css/bootstrap-theme.min.css +7 -0
  24. data/resources/css/bootstrap.css +5780 -0
  25. data/resources/css/bootstrap.min.css +7 -0
  26. data/resources/css/highlightstyles/arta.css +160 -0
  27. data/resources/css/highlightstyles/ascetic.css +50 -0
  28. data/resources/css/highlightstyles/atelier-dune.dark.css +93 -0
  29. data/resources/css/highlightstyles/atelier-dune.light.css +93 -0
  30. data/resources/css/highlightstyles/atelier-forest.dark.css +93 -0
  31. data/resources/css/highlightstyles/atelier-forest.light.css +93 -0
  32. data/resources/css/highlightstyles/atelier-heath.dark.css +93 -0
  33. data/resources/css/highlightstyles/atelier-heath.light.css +93 -0
  34. data/resources/css/highlightstyles/atelier-lakeside.dark.css +93 -0
  35. data/resources/css/highlightstyles/atelier-lakeside.light.css +93 -0
  36. data/resources/css/highlightstyles/atelier-seaside.dark.css +93 -0
  37. data/resources/css/highlightstyles/atelier-seaside.light.css +93 -0
  38. data/resources/css/highlightstyles/brown_paper.css +105 -0
  39. data/resources/css/highlightstyles/brown_papersq.png +0 -0
  40. data/resources/css/highlightstyles/dark.css +105 -0
  41. data/resources/css/highlightstyles/default.css +153 -0
  42. data/resources/css/highlightstyles/docco.css +132 -0
  43. data/resources/css/highlightstyles/far.css +113 -0
  44. data/resources/css/highlightstyles/foundation.css +133 -0
  45. data/resources/css/highlightstyles/github.css +125 -0
  46. data/resources/css/highlightstyles/googlecode.css +147 -0
  47. data/resources/css/highlightstyles/idea.css +122 -0
  48. data/resources/css/highlightstyles/ir_black.css +105 -0
  49. data/resources/css/highlightstyles/magula.css +123 -0
  50. data/resources/css/highlightstyles/mono-blue.css +62 -0
  51. data/resources/css/highlightstyles/monokai.css +127 -0
  52. data/resources/css/highlightstyles/monokai_sublime.css +149 -0
  53. data/resources/css/highlightstyles/obsidian.css +154 -0
  54. data/resources/css/highlightstyles/paraiso.dark.css +93 -0
  55. data/resources/css/highlightstyles/paraiso.light.css +93 -0
  56. data/resources/css/highlightstyles/pojoaque.css +106 -0
  57. data/resources/css/highlightstyles/pojoaque.jpg +0 -0
  58. data/resources/css/highlightstyles/railscasts.css +182 -0
  59. data/resources/css/highlightstyles/rainbow.css +112 -0
  60. data/resources/css/highlightstyles/school_book.css +113 -0
  61. data/resources/css/highlightstyles/school_book.png +0 -0
  62. data/resources/css/highlightstyles/solarized_dark.css +107 -0
  63. data/resources/css/highlightstyles/solarized_light.css +107 -0
  64. data/resources/css/highlightstyles/sunburst.css +160 -0
  65. data/resources/css/highlightstyles/tomorrow-night-blue.css +93 -0
  66. data/resources/css/highlightstyles/tomorrow-night-bright.css +92 -0
  67. data/resources/css/highlightstyles/tomorrow-night-eighties.css +92 -0
  68. data/resources/css/highlightstyles/tomorrow-night.css +93 -0
  69. data/resources/css/highlightstyles/tomorrow.css +90 -0
  70. data/resources/css/highlightstyles/vs.css +89 -0
  71. data/resources/css/highlightstyles/xcode.css +158 -0
  72. data/resources/css/highlightstyles/zenburn.css +117 -0
  73. data/resources/example.html +1501 -0
  74. data/resources/js/bootstrap.js +1943 -0
  75. data/resources/js/bootstrap.min.js +7 -0
  76. data/resources/js/highlight.pack.js +1 -0
  77. data/resources/services_example.html +141 -0
  78. data/resources/template.html +61 -0
  79. data/test/data/angular-puzzle.GS +111 -0
  80. data/test/data/angular_puzzle/app.js +66 -0
  81. data/test/data/angular_puzzle/index.html +67 -0
  82. data/test/data/angular_puzzle/slidingPuzzle.js +203 -0
  83. data/test/data/angular_puzzle/wordSearchPuzzle.js +270 -0
  84. data/test/data/example.html +5 -0
  85. data/test/data/example.js +4 -0
  86. data/test/data/services/index.html +33 -0
  87. data/test/data/services/script.js +15 -0
  88. data/test/test_helper.rb +9 -0
  89. data/test/test_parsing.rb +23 -0
  90. data/test/test_spotter.rb +42 -0
  91. data/test/test_wekaintegration.rb +43 -0
  92. metadata +328 -0
@@ -0,0 +1,203 @@
1
+ (function(angular) {
2
+ 'use strict';
3
+
4
+ var module = angular.module('slidingPuzzle', []);
5
+
6
+ /**
7
+ * Service
8
+ */
9
+ module.factory('slidingPuzzle', function() {
10
+ function shuffle(a) {
11
+ var q;
12
+ for (var j, x, i = a.length; i; j = parseInt(Math.random() * i, 10), x = a[--i], a[i] = a[j], a[j] = x) { q = 0; }
13
+ return a;
14
+ }
15
+
16
+ function SlidingPuzzle(rows, cols) {
17
+ /**
18
+ * Puzzle grid
19
+ * @type {Array}
20
+ */
21
+ this.grid = [];
22
+
23
+ /**
24
+ * Moves count
25
+ * @type {Number}
26
+ */
27
+ this.moves = 0;
28
+
29
+ /**
30
+ * Moves tile
31
+ * @param srow
32
+ * @param scol
33
+ */
34
+ this.move = function(srow, scol) {
35
+ var dirs = [[1, 0], [-1, 0], [0, 1], [0, -1]],
36
+ tref, trow, tcol;
37
+
38
+ for (var d = 0; d < dirs.length; d++) {
39
+ trow = srow + dirs[d][0];
40
+ tcol = scol + dirs[d][1];
41
+ if (this.grid[trow] && this.grid[trow][tcol] && this.grid[trow][tcol].empty) {
42
+ tref = this.grid[srow][scol];
43
+ this.grid[srow][scol] = this.grid[trow][tcol];
44
+ this.grid[trow][tcol] = tref;
45
+ this.moves++;
46
+ }
47
+ }
48
+ };
49
+
50
+ /**
51
+ * Shuffles grid
52
+ */
53
+ this.shuffle = function() {
54
+ var tiles = [];
55
+ this.traverse(function(tile) {
56
+ tiles.push(tile);
57
+ });
58
+ shuffle(tiles);
59
+ this.traverse(function(tile, row, col) {
60
+ this.grid[row][col] = tiles.shift();
61
+ });
62
+ this.moves = 0;
63
+ };
64
+
65
+ /**
66
+ * Solves puzzle
67
+ */
68
+ this.solve = function() {
69
+ var tiles = [];
70
+ this.traverse(function(tile) {
71
+ tiles.push(tile);
72
+ });
73
+ tiles.sort(function(x, y) {
74
+ return (x.id - y.id);
75
+ });
76
+ this.traverse(function(tile, row, col) {
77
+ this.grid[row][col] = tiles.shift();
78
+ });
79
+ };
80
+
81
+ /**
82
+ * Is solved?
83
+ * @type {Boolean}
84
+ */
85
+ this.isSolved = function() {
86
+ var id = 1;
87
+ for (var row = 0; row < rows; row++) {
88
+ for (var col = 0; col < cols; col++) {
89
+ if (this.grid[row][col].id !== id++) {
90
+ return false;
91
+ }
92
+ }
93
+ }
94
+ return true;
95
+ };
96
+
97
+ /**
98
+ * Traverses grid and executes fn on every tile
99
+ * @param fn
100
+ */
101
+ this.traverse = function(fn) {
102
+ for (var row = 0; row < rows; row++) {
103
+ for (var col = 0; col < cols; col++) {
104
+ fn.call(this, this.grid && this.grid[row] ? this.grid[row][col] : undefined, row, col);
105
+ }
106
+ }
107
+ };
108
+
109
+ // initialize grid
110
+ var id = 1;
111
+ this.traverse(function(tile, row, col) {
112
+ if (!this.grid[row]) {
113
+ this.grid[row] = [];
114
+ }
115
+ this.grid[row][col] = {
116
+ id: id++,
117
+ empty: (row === rows - 1) && (col === cols - 1)
118
+ };
119
+ if (this.grid[row][col].empty) {
120
+ this.empty = this.grid[row][col];
121
+ }
122
+ });
123
+ }
124
+
125
+ return function(rows, cols) {
126
+ return new SlidingPuzzle(rows, cols);
127
+ };
128
+ });
129
+
130
+ /**
131
+ * Directive
132
+ */
133
+ module.directive('slidingPuzzle', function(slidingPuzzle) {
134
+ return {
135
+ restrict: 'EA',
136
+ replace: true,
137
+ template: '<table class="sliding-puzzle" ng-class="{\'puzzle-solved\': puzzle.isSolved()}">' +
138
+ '<tr ng-repeat="($row, row) in puzzle.grid">' +
139
+ '<td ng-repeat="($col, tile) in row" ng-click="puzzle.move($row, $col)" ng-style="tile.style" ng-class="{\'puzzle-empty\': tile.empty}" title="{{tile.id}}"></td>' +
140
+ '</tr>' +
141
+ '</table>',
142
+ scope: {
143
+ size: '@',
144
+ src: '@',
145
+ api: '='
146
+ },
147
+ link: function(scope, element, attrs) {
148
+ var rows, cols,
149
+ loading = true,
150
+ image = new Image();
151
+
152
+ function create() {
153
+ scope.puzzle = slidingPuzzle(rows, cols);
154
+
155
+ if (attrs.api) {
156
+ scope.api = scope.puzzle;
157
+ }
158
+
159
+ tile();
160
+ }
161
+
162
+ function tile() {
163
+ if (loading) {
164
+ return;
165
+ }
166
+
167
+ var width = image.width / cols,
168
+ height = image.height / rows;
169
+
170
+ scope.puzzle.traverse(function(tile, row, col) {
171
+ tile.style = {
172
+ width: width + 'px',
173
+ height: height + 'px',
174
+ background: (tile.empty ? 'none' : "url('" + scope.src + "') no-repeat -" + (col * width) + 'px -' + (row * height) + 'px')
175
+ };
176
+ });
177
+
178
+ scope.puzzle.shuffle();
179
+ }
180
+
181
+ attrs.$observe('size', function(size) {
182
+ size = size.split('x');
183
+ if (size[0] >= 2 && size[1] >= 2) {
184
+ rows = size[0];
185
+ cols = size[1];
186
+ create();
187
+ }
188
+ });
189
+
190
+ attrs.$observe('src', function(src) {
191
+ loading = true;
192
+ image.src = src;
193
+ image.onload = function() {
194
+ loading = false;
195
+ scope.$apply(function() {
196
+ tile();
197
+ });
198
+ };
199
+ });
200
+ }
201
+ };
202
+ });
203
+ })(window.angular);
@@ -0,0 +1,270 @@
1
+ (function(angular) {
2
+ 'use strict';
3
+
4
+ var module = angular.module('wordSearchPuzzle', []);
5
+
6
+ /**
7
+ * Service
8
+ */
9
+ module.factory('wordSearchPuzzle', function() {
10
+ /**
11
+ * Word search puzzle
12
+ * @param matrix
13
+ * @param words
14
+ * @constructor
15
+ */
16
+ function WordSearchPuzzle(matrix, words) {
17
+ var maxRow = 0,
18
+ maxCol = 0;
19
+
20
+ /**
21
+ * Matrix
22
+ * @type {Array}
23
+ */
24
+ this.matrix = [];
25
+
26
+ /**
27
+ * Words
28
+ * @type {Array}
29
+ */
30
+ this.words = [];
31
+
32
+ /**
33
+ * Is solved?
34
+ * @type {Boolean}
35
+ */
36
+ this.solved = false;
37
+
38
+ // parse matrix and words
39
+ angular.forEach(matrix, function(letters, row) {
40
+ angular.forEach(letters, function(letter, col) {
41
+ var item = {
42
+ letter: letter,
43
+ col: col,
44
+ row: row,
45
+ used: false
46
+ };
47
+ if (!this.matrix[row]) {
48
+ this.matrix[row] = [];
49
+ }
50
+ this.matrix[row].push(item);
51
+ maxCol = col;
52
+ }, this);
53
+ maxRow = row;
54
+ }, this);
55
+ angular.forEach(words, function(word) {
56
+ this.words.push({
57
+ name: word
58
+ });
59
+ }, this);
60
+
61
+ /**
62
+ * Returns matrix item by coords
63
+ * @param col
64
+ * @param row
65
+ * @return {*}
66
+ */
67
+ this.getItem = function(col, row) {
68
+ return (this.matrix[row] ? this.matrix[row][col] : undefined);
69
+ };
70
+
71
+ /**
72
+ * Returns matrix items by start/end coords
73
+ * @param colFrom
74
+ * @param rowFrom
75
+ * @param colTo
76
+ * @param rowTo
77
+ * @return {Array}
78
+ */
79
+ this.getItems = function(colFrom, rowFrom, colTo, rowTo) {
80
+ var items = [];
81
+
82
+ if (rowTo > maxRow) {
83
+ rowTo = maxRow;
84
+ }
85
+ if (colTo > maxCol) {
86
+ colTo = maxCol;
87
+ }
88
+
89
+ if (this.getItem(colTo, rowTo) === undefined) {
90
+ return items;
91
+ }
92
+
93
+ if (colFrom === colTo || rowFrom === rowTo || Math.abs(colTo - colFrom) === Math.abs(rowTo - rowFrom)) {
94
+ var shiftX = (colFrom === colTo ? 0 : (colTo > colFrom ? 1 : -1)),
95
+ shiftY = (rowFrom === rowTo ? 0 : (rowTo > rowFrom ? 1 : -1)),
96
+ col = colFrom,
97
+ row = rowFrom;
98
+
99
+ items.push(this.getItem(col, row));
100
+ do {
101
+ col += shiftX;
102
+ row += shiftY;
103
+ items.push(this.getItem(col, row));
104
+ } while (col !== colTo || row !== rowTo);
105
+ }
106
+
107
+ return items;
108
+ };
109
+
110
+ /**
111
+ * Check items - find word
112
+ * @param items
113
+ */
114
+ this.lookup = function(items) {
115
+ if (!items.length) {
116
+ return;
117
+ }
118
+
119
+ // create words
120
+ var words = [''];
121
+ angular.forEach(items, function(item) {
122
+ words[0] += item.letter;
123
+ });
124
+ words.push(words[0].split('').reverse().join('')); // word in reverse order (when selecting)
125
+
126
+ // check words
127
+ this.solved = true;
128
+ angular.forEach(this.words, function(word) {
129
+ if (word.found) {
130
+ return;
131
+ }
132
+ angular.forEach(words, function(itemWord) {
133
+ if (word.name === itemWord) {
134
+ word.found = true;
135
+ angular.forEach(items, function(item) {
136
+ item.found = true;
137
+ });
138
+ }
139
+ });
140
+ if (!word.found) {
141
+ this.solved = false;
142
+ }
143
+ }, this);
144
+ };
145
+
146
+ /**
147
+ * Solves puzzle
148
+ */
149
+ this.solve = function() {
150
+ var start = {},
151
+ directions = {
152
+ N: [0, -1], E: [1, 0], S: [0, 1], W: [-1, 0],
153
+ NE: [1, -1], NW: [-1, -1], SE: [1, 1], SW: [-1, 1]
154
+ };
155
+
156
+ // group items by letters for faster search
157
+ angular.forEach(this.matrix, function(items) {
158
+ angular.forEach(items, function(item) {
159
+ if (!start[item.letter]) {
160
+ start[item.letter] = [];
161
+ }
162
+ start[item.letter].push(item);
163
+ });
164
+ });
165
+
166
+ angular.forEach(this.words, function(word) {
167
+ angular.forEach(start[word.name.charAt(0)], function(start) {
168
+ if (word.found) {
169
+ return;
170
+ }
171
+ angular.forEach(directions, function(shift) {
172
+ if (word.found) {
173
+ return;
174
+ }
175
+ this.lookup(this.getItems(
176
+ start.col, start.row,
177
+ start.col + (word.name.length - 1) * shift[0],
178
+ start.row + (word.name.length - 1) * shift[1]
179
+ ));
180
+ }, this);
181
+ }, this);
182
+ }, this);
183
+ };
184
+ }
185
+
186
+ return function(matrix, words) {
187
+ return new WordSearchPuzzle(matrix, words);
188
+ };
189
+ });
190
+
191
+ /**
192
+ * Directive
193
+ */
194
+ module.directive('wordSearchPuzzle', function(wordSearchPuzzle) {
195
+ return {
196
+ restrict: 'EA',
197
+ replace: true,
198
+ template: '<table class="word-search-puzzle" cellspacing="0" ng-class="{\'puzzle-solved\': puzzle.solved}">' +
199
+ '<tr ng-repeat="items in puzzle.matrix">' +
200
+ '<td ng-repeat="item in items" unselectable="on"' +
201
+ ' ng-class="{\'puzzle-found\': item.found, \'puzzle-selected\': item.selected, \'puzzle-message\': puzzle.solved && !item.found}"' +
202
+ ' ng-mousedown="selectStart(item)" ng-mouseup="selectEnd()" ng-mouseenter="selectEnter(item)">' +
203
+ ' <span>{{item.letter}}</span>' +
204
+ '</td>' +
205
+ '</tr>' +
206
+ '</table>',
207
+ scope: {
208
+ matrix: '=',
209
+ words: '=',
210
+ api: '='
211
+ },
212
+ link: function(scope, element, attrs) {
213
+ var selectFrom;
214
+
215
+ // setup puzzle
216
+ scope.$watch('matrix', function(matrix) {
217
+ scope.puzzle = wordSearchPuzzle(matrix, scope.words);
218
+
219
+ // link service
220
+ if (attrs.api) {
221
+ scope.api = scope.puzzle;
222
+ }
223
+ });
224
+
225
+ /**
226
+ * Selected items
227
+ * @type {Array}
228
+ */
229
+ scope.selected = [];
230
+
231
+ /**
232
+ * Selection start
233
+ * @param item
234
+ */
235
+ scope.selectStart = function(item) {
236
+ selectFrom = item;
237
+ };
238
+
239
+ /**
240
+ * Selection enter (over)
241
+ * @param item
242
+ */
243
+ scope.selectEnter = function(item) {
244
+ if (selectFrom) {
245
+ scope.selected = scope.puzzle.getItems(selectFrom.col, selectFrom.row, item.col, item.row);
246
+ }
247
+ };
248
+
249
+ /**
250
+ * Selection end
251
+ */
252
+ scope.selectEnd = function() {
253
+ selectFrom = null;
254
+ scope.puzzle.lookup(scope.selected);
255
+ scope.selected = [];
256
+ };
257
+
258
+ // propagate selection state to matrix
259
+ scope.$watch('selected', function(newItems, oldItems) {
260
+ angular.forEach(oldItems, function(item) {
261
+ item.selected = false;
262
+ });
263
+ angular.forEach(newItems, function(item) {
264
+ item.selected = true;
265
+ });
266
+ });
267
+ }
268
+ };
269
+ });
270
+ })(window.angular);
@@ -0,0 +1,5 @@
1
+ <html>
2
+ <body>
3
+ The beatiful page.
4
+ </body>
5
+ </html>
@@ -0,0 +1,4 @@
1
+ function myFunction()
2
+ {
3
+ alert("Hello World!");
4
+ }
@@ -0,0 +1,33 @@
1
+ <!DOCTYPE html>
2
+ <html>
3
+
4
+ <head>
5
+ <meta charset="utf-8"/>
6
+ <title>Your First AngularJS App</title>
7
+
8
+ <!-- Google web fonts -->
9
+ <link href="http://fonts.googleapis.com/css?family=PT+Sans:400,700" rel='stylesheet' />
10
+
11
+ <!-- The main CSS file -->
12
+ <link href="assets/css/style.css" rel="stylesheet" />
13
+ </head>
14
+
15
+ <body>
16
+
17
+ <form id="main" ng-app ng-controller="myservices">
18
+ <h1>My Services</h1>
19
+
20
+ <ul id="services">
21
+ <!-- The services will be inserted here -->
22
+ <li ng-repeat="service in services">
23
+ </li>
24
+ </ul>
25
+
26
+ <p id="total">total: <span>${{total()}}</span></p>
27
+
28
+ <input type="submit" id="order" value="Order"/>
29
+
30
+ </form>
31
+
32
+ </body>
33
+ </html>
@@ -0,0 +1,15 @@
1
+ function myservices($scope){
2
+ $scope.services=[
3
+ { title: 'web development', price: 200},
4
+ { title: 'web design', price: 250},
5
+ { title: 'photography', price: 100},
6
+ { title: 'coffee drinking', price: 10}];
7
+ $scope.total=function(){
8
+ var t = 0;
9
+ angular.forEach($scope.services, function(s){
10
+ if(s.selected)
11
+ t+=s.price;
12
+ });
13
+ return t;
14
+ };
15
+ }
@@ -0,0 +1,9 @@
1
+ require 'simplecov'
2
+ SimpleCov.start do
3
+ add_filter "/test/"
4
+ end
5
+
6
+ require 'crosslanguagespotter'
7
+ require 'test/unit'
8
+
9
+ include CrossLanguageSpotter
@@ -0,0 +1,23 @@
1
+ require 'test_helper'
2
+ require 'codemodels'
3
+ require 'codemodels/xml'
4
+ require 'codemodels/properties'
5
+ require 'codemodels/html'
6
+ require 'codemodels/js'
7
+
8
+ class TestParsing < Test::Unit::TestCase
9
+
10
+ def setup
11
+ end
12
+
13
+ def test_parse_html_file
14
+ root = CodeModels.parse_file('./test/data/example.html')
15
+ assert root.is_a?(CodeModels::Html::HtmlDocument)
16
+ end
17
+
18
+ def test_parse_js_file
19
+ root = CodeModels.parse_file('./test/data/example.js')
20
+ assert root.is_a?(CodeModels::Js::AstRoot)
21
+ end
22
+
23
+ end
@@ -0,0 +1,42 @@
1
+ require 'test_helper'
2
+ require 'codemodels'
3
+ require 'codemodels/xml'
4
+ require 'codemodels/properties'
5
+ require 'codemodels/html'
6
+ require 'codemodels/js'
7
+
8
+ class TestSpotter < Test::Unit::TestCase
9
+
10
+ def setup
11
+ end
12
+
13
+ def test_models_loading
14
+ models = CrossLanguageSpotter._load_models('./test/data/angular_puzzle')
15
+ assert_equal 4,models.count
16
+ assert models.has_key?('/app.js')
17
+ assert models.has_key?('/index.html')
18
+ assert models.has_key?('/slidingPuzzle.js')
19
+ assert models.has_key?('/wordSearchPuzzle.js')
20
+ end
21
+
22
+ def test_features_calc
23
+ dir = './test/data/angular_puzzle'
24
+ spotter = CrossLanguageSpotter::Spotter.new()
25
+ spotter.features_for_dir(dir)
26
+ end
27
+
28
+ def test_oracle
29
+ dir = './test/data/angular_puzzle'
30
+ oracle_loader = OracleLoader.new
31
+ oracle_loader.to_train_data(dir,'./test/data/angular-puzzle.GS')
32
+ end
33
+
34
+ def test_full_behavior
35
+ oracle_loader = OracleLoader.new
36
+ classifier = oracle_loader.build_weka_classifier('./test/data/angular_puzzle','./test/data/angular-puzzle.GS')
37
+ spotter = CrossLanguageSpotter::Spotter.new()
38
+ project = Project.new('./test/data/services')
39
+ results = spotter.classify_relations(project,classifier)
40
+ end
41
+
42
+ end
@@ -0,0 +1,43 @@
1
+ require 'test_helper'
2
+
3
+ class TestWekaIntegration < Test::Unit::TestCase
4
+
5
+ def setup
6
+ @train_data = [
7
+ {a: 10.0, b:7, c:false},
8
+ {a: 12.0, b:3, c:false},
9
+ {a: 18.4, b:-4, c:true}
10
+ ]
11
+ @sample_data = [
12
+ {a: 10.5, b:6},
13
+ {a: 12.1, b:2},
14
+ {a: 21.4, b:-8}
15
+ ]
16
+ @sample_data2 = [
17
+ {a: 10.5, b:6, c:false},
18
+ {a: 12.1, b:2, c:false},
19
+ {a: 21.4, b:-8, c:false}
20
+ ]
21
+ end
22
+
23
+ def test_hash2weka_instances_with_train_data
24
+ instances = hash2weka_instances('my_dataset',@train_data,{a: :numeric, b: :numeric, c: :boolean},:c)
25
+ end
26
+
27
+ def test_hash2weka_instances_with_data_to_classify
28
+ instances = hash2weka_instances('my_dataset',@sample_data,{a: :numeric, b: :numeric},nil)
29
+ end
30
+
31
+ def test_build_classifier
32
+ instances = hash2weka_instances('my_dataset',@train_data,{a: :numeric, b: :numeric, c: :boolean},:c)
33
+ c = build_classifier(instances)
34
+ end
35
+
36
+ def test_classify
37
+ train_instances = hash2weka_instances('my_train_dataset',@train_data,{a: :numeric, b: :numeric, c: :boolean},:c)
38
+ data_instances = hash2weka_instances('my_sample_dataset',@sample_data2,{a: :numeric, b: :numeric, c: :boolean},:c)
39
+ classifier = WekaClassifier.new(train_instances)
40
+ results = classifier.classify(data_instances)
41
+ end
42
+
43
+ end