codemodels-html 0.1.0-java

Sign up to get free protection for your applications and to get access to all the features.
@@ -0,0 +1,170 @@
1
+ require 'test_helper'
2
+
3
+ class TestParsingPuzzle < Test::Unit::TestCase
4
+
5
+ include TestHelper
6
+ include CodeModels
7
+ include CodeModels::Html
8
+
9
+ def test_root_structure
10
+ code = IO.read('test/data/puzzle.html')
11
+ r = Html.parse_code(code)
12
+ assert_class HtmlDocument, r
13
+
14
+ # child 0: <!DOCTYPE html>
15
+ assert_equal 2, r.children.count
16
+ assert_class Node, r.children[1]
17
+ assert_equal 'html', r.children[1].name
18
+ end
19
+
20
+ def test_body_tag
21
+ code = IO.read('test/data/puzzle.html')
22
+ r = Html.parse_code(code)
23
+
24
+ body = nil
25
+ r.traverse do |n|
26
+ body=n if n.is_a?(Node) && n.name=='body'
27
+ end
28
+ assert_not_nil body
29
+ assert_equal 1,body.attributes.count
30
+ assert_equal 'ng-app',body.attributes[0].name
31
+ assert_equal 'puzzleApp',body.attributes[0].value
32
+
33
+ assert body.all_children.include?(body.attributes[0])
34
+ assert body.all_children_deep.include?(body.attributes[0])
35
+
36
+ assert body.values_map.has_key?('ng-app')
37
+ assert body.values_map.has_key?('puzzleApp')
38
+ end
39
+
40
+ def test_no_double_foreign_asts
41
+ code = IO.read('test/data/puzzle.html')
42
+ r = AngularJs.parser_considering_angular_embedded_code.parse_code(code)
43
+ r.traverse do |n|
44
+ fa = n.class.ecore.eAllReferences.select{|ref|ref.name=='foreign_asts'}
45
+ fail("Node #{n} has #{fa.count} references with the name 'foreign_asts'") if fa.count > 1
46
+ end
47
+ end
48
+
49
+ def test_js_names_title
50
+ code = IO.read('test/data/puzzle.html')
51
+ r = AngularJs.parser_considering_angular_embedded_code.parse_code(code)
52
+ jstitles = r.all_children_deep_also_foreign.select {|n| n.is_a?(CodeModels::Js::Name) && n.identifier=='title'}
53
+ assert_equal 2,jstitles.count
54
+ end
55
+
56
+ def test_js_names_title_position_relative
57
+ code = IO.read('test/data/puzzle.html')
58
+ r = AngularJs.parser_considering_angular_embedded_code.parse_code(code)
59
+ jstitles = r.all_children_deep_also_foreign.select {|n| n.is_a?(CodeModels::Js::Name) && n.identifier=='title'}
60
+
61
+ assert_equal SourcePoint.new(1,3),jstitles[0].source.begin_point(:relative)
62
+ assert_equal SourcePoint.new(1,7),jstitles[0].source.end_point(:relative)
63
+ assert_equal SourcePoint.new(1,8),jstitles[1].source.begin_point(:relative)
64
+ assert_equal SourcePoint.new(1,12),jstitles[1].source.end_point(:relative)
65
+ end
66
+
67
+ def test_js_names_title_position_absolute
68
+ code = IO.read('test/data/puzzle.html')
69
+ r = AngularJs.parser_considering_angular_embedded_code.parse_code(code)
70
+ jstitles = r.all_children_deep_also_foreign.select {|n| n.is_a?(CodeModels::Js::Name) && n.identifier=='title'}
71
+
72
+ assert_equal SourcePoint.new(15,32),jstitles[0].source.begin_point(:absolute)
73
+ assert_equal SourcePoint.new(15,36),jstitles[0].source.end_point(:absolute)
74
+ assert_equal SourcePoint.new(33,18),jstitles[1].source.begin_point(:absolute)
75
+ assert_equal SourcePoint.new(33,22),jstitles[1].source.end_point(:absolute)
76
+ end
77
+
78
+ def test_js_names_artifact_code
79
+ code = IO.read('test/data/puzzle.html')
80
+ r = AngularJs.parser_considering_angular_embedded_code.parse_code(code)
81
+ jstitles = r.all_children_deep_also_foreign.select {|n| n.is_a?(CodeModels::Js::Name) && n.identifier=='title'}
82
+
83
+ assert_equal 't.title',jstitles[0].source.artifact.code
84
+ assert_equal 'puzzle.title',jstitles[1].source.artifact.code
85
+ end
86
+
87
+ def test_js_names_title_code
88
+ code = IO.read('test/data/puzzle.html')
89
+ r = AngularJs.parser_considering_angular_embedded_code.parse_code(code)
90
+ jstitles = r.all_children_deep_also_foreign.select {|n| n.is_a?(CodeModels::Js::Name) && n.identifier=='title'}
91
+ assert_equal 'title',jstitles[0].source.code
92
+ assert_equal 'title',jstitles[1].source.code
93
+ end
94
+
95
+ def test_position_of_embedded_js_verify_t_1
96
+ code = %q{<!DOCTYPE html><html><li ng-repeat="t in types"></html>}
97
+ r = AngularJs.parser_considering_angular_embedded_code.parse_code(code)
98
+ jsNames = r.all_children_deep(:also_foreign).select{|n|n.class==CodeModels::Js::Name}
99
+ ts = jsNames.select{|n|n.identifier=='t'}
100
+ assert_equal 1, ts.count
101
+ end
102
+
103
+ def test_position_of_embedded_js_verify_t_2
104
+ code = %q{<!DOCTYPE html><html><li ng-class="{'selected': t.id == type}"></html>}
105
+ r = AngularJs.parser_considering_angular_embedded_code.parse_code(code)
106
+ jsNames = r.all_children_deep(:also_foreign).select{|n|n.class==CodeModels::Js::Name}
107
+ ts = jsNames.select{|n|n.identifier=='t'}
108
+ assert_equal 1, ts.count
109
+ end
110
+
111
+ def test_position_of_embedded_js_verify_t_3
112
+ code = %q{<!DOCTYPE html><html><a ng-href="#/{{t.id}}"/></html>}
113
+ r = AngularJs.parser_considering_angular_embedded_code.parse_code(code)
114
+ jsNames = r.all_children_deep(:also_foreign).select{|n|n.class==CodeModels::Js::Name}
115
+ ts = jsNames.select{|n|n.identifier=='t'}
116
+ assert_equal 1, ts.count
117
+ end
118
+
119
+ def test_position_of_embedded_js_verify_t_4
120
+ code = %q{<!DOCTYPE html><html><a>{{t.title}}</a></html>}
121
+ r = AngularJs.parser_considering_angular_embedded_code.parse_code(code)
122
+ jsNames = r.all_children_deep(:also_foreign).select{|n|n.class==CodeModels::Js::Name}
123
+ ts = jsNames.select{|n|n.identifier=='t'}
124
+ assert_equal 1, ts.count
125
+ end
126
+
127
+ def test_position_of_embedded_js
128
+ code = %q{<!DOCTYPE html>
129
+ <html>
130
+ <body ng-app="puzzleApp">
131
+ <ul id="types">
132
+ <li ng-repeat="t in types" ng-class="{'selected': t.id == type}">
133
+ <a ng-href="#/{{t.id}}">{{t.title}}</a>
134
+ </li>
135
+ </ul>
136
+
137
+ <div ng-include="type">
138
+ </div>
139
+ </body>
140
+ </html>}
141
+ r = AngularJs.parser_considering_angular_embedded_code.parse_code(code)
142
+ jsNames = r.all_children_deep(:also_foreign).select{|n|n.class==CodeModels::Js::Name}
143
+ assert_equal 'puzzleApp',jsNames[0].identifier
144
+ assert_equal 3,jsNames[0].source.position(:absolute).begin_line
145
+ ts = jsNames.select{|n|n.identifier=='t'}
146
+ types = jsNames.select{|n|n.identifier=='types'}
147
+ ids = jsNames.select{|n|n.identifier=='id'}
148
+ typess = jsNames.select{|n|n.identifier=='type'}
149
+ titles = jsNames.select{|n|n.identifier=='title'}
150
+ assert_equal 4,ts.count
151
+ assert_equal [5,5,6,6],ts.map{|n| n.source.position(:absolute).begin_line}
152
+ assert_equal 1,types.count
153
+ assert_equal [5],types.map{|n| n.source.position(:absolute).begin_line}
154
+ assert_equal 2,ids.count
155
+ assert_equal [5,6],ids.map{|n| n.source.position(:absolute).begin_line}
156
+ assert_equal 2,typess.count
157
+ assert_equal [5,10],typess.map{|n| n.source.position(:absolute).begin_line}
158
+ assert_equal 1,titles.count
159
+ assert_equal [6],titles.map{|n| n.source.position(:absolute).begin_line}
160
+ end
161
+
162
+ def test_double_elements_in_html_attribute_are_parsed
163
+ code = '<html><sliding-puzzle api="puzzle.api" size="{{puzzle.rows}}x{{puzzle.cols}}" src="{{puzzle.src}}"></sliding-puzzle></html>'
164
+ r = AngularJs.parser_considering_angular_embedded_code.parse_code(code)
165
+ jsNames = r.all_children_deep(:also_foreign).select{|n|n.class==CodeModels::Js::Name}
166
+ assert_not_nil jsNames.find{|n| n.identifier=='rows'}
167
+ assert_not_nil jsNames.find{|n| n.identifier=='cols'}
168
+ end
169
+
170
+ end
metadata ADDED
@@ -0,0 +1,173 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: codemodels-html
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.1.0
5
+ platform: java
6
+ authors:
7
+ - Federico Tomassetti
8
+ autorequire:
9
+ bindir: bin
10
+ cert_chain: []
11
+ date: 2014-01-09 00:00:00.000000000 Z
12
+ dependencies:
13
+ - !ruby/object:Gem::Dependency
14
+ name: codemodels
15
+ version_requirements: !ruby/object:Gem::Requirement
16
+ requirements:
17
+ - - '>='
18
+ - !ruby/object:Gem::Version
19
+ version: '0'
20
+ requirement: !ruby/object:Gem::Requirement
21
+ requirements:
22
+ - - '>='
23
+ - !ruby/object:Gem::Version
24
+ version: '0'
25
+ prerelease: false
26
+ type: :runtime
27
+ - !ruby/object:Gem::Dependency
28
+ name: codemodels-js
29
+ version_requirements: !ruby/object:Gem::Requirement
30
+ requirements:
31
+ - - '>='
32
+ - !ruby/object:Gem::Version
33
+ version: '0'
34
+ requirement: !ruby/object:Gem::Requirement
35
+ requirements:
36
+ - - '>='
37
+ - !ruby/object:Gem::Version
38
+ version: '0'
39
+ prerelease: false
40
+ type: :runtime
41
+ - !ruby/object:Gem::Dependency
42
+ name: rgen
43
+ version_requirements: !ruby/object:Gem::Requirement
44
+ requirements:
45
+ - - '>='
46
+ - !ruby/object:Gem::Version
47
+ version: '0'
48
+ requirement: !ruby/object:Gem::Requirement
49
+ requirements:
50
+ - - '>='
51
+ - !ruby/object:Gem::Version
52
+ version: '0'
53
+ prerelease: false
54
+ type: :runtime
55
+ - !ruby/object:Gem::Dependency
56
+ name: bundler
57
+ version_requirements: !ruby/object:Gem::Requirement
58
+ requirements:
59
+ - - ~>
60
+ - !ruby/object:Gem::Version
61
+ version: '1.3'
62
+ requirement: !ruby/object:Gem::Requirement
63
+ requirements:
64
+ - - ~>
65
+ - !ruby/object:Gem::Version
66
+ version: '1.3'
67
+ prerelease: false
68
+ type: :development
69
+ - !ruby/object:Gem::Dependency
70
+ name: rake
71
+ version_requirements: !ruby/object:Gem::Requirement
72
+ requirements:
73
+ - - '>='
74
+ - !ruby/object:Gem::Version
75
+ version: '0'
76
+ requirement: !ruby/object:Gem::Requirement
77
+ requirements:
78
+ - - '>='
79
+ - !ruby/object:Gem::Version
80
+ version: '0'
81
+ prerelease: false
82
+ type: :development
83
+ - !ruby/object:Gem::Dependency
84
+ name: simplecov
85
+ version_requirements: !ruby/object:Gem::Requirement
86
+ requirements:
87
+ - - '>='
88
+ - !ruby/object:Gem::Version
89
+ version: '0'
90
+ requirement: !ruby/object:Gem::Requirement
91
+ requirements:
92
+ - - '>='
93
+ - !ruby/object:Gem::Version
94
+ version: '0'
95
+ prerelease: false
96
+ type: :development
97
+ - !ruby/object:Gem::Dependency
98
+ name: rubygems-tasks
99
+ version_requirements: !ruby/object:Gem::Requirement
100
+ requirements:
101
+ - - '>='
102
+ - !ruby/object:Gem::Version
103
+ version: '0'
104
+ requirement: !ruby/object:Gem::Requirement
105
+ requirements:
106
+ - - '>='
107
+ - !ruby/object:Gem::Version
108
+ version: '0'
109
+ prerelease: false
110
+ type: :development
111
+ description: CodeModels for HTML
112
+ email:
113
+ - f.tomassetti@gmail.com
114
+ executables: []
115
+ extensions: []
116
+ extra_rdoc_files: []
117
+ files:
118
+ - .gitignore
119
+ - Gemfile
120
+ - LICENSE
121
+ - README.md
122
+ - Rakefile
123
+ - codemodels-html.gemspec
124
+ - lib/codemodels/html.rb
125
+ - lib/codemodels/html/angular_embedding_rules.rb
126
+ - lib/codemodels/html/language.rb
127
+ - lib/codemodels/html/metamodel.rb
128
+ - lib/codemodels/html/model_building.rb
129
+ - lib/codemodels/html/monkey_patching.rb
130
+ - lib/codemodels/html/parser.rb
131
+ - lib/codemodels/html/version.rb
132
+ - lib/jars/jericho-html-3.3.jar
133
+ - test/data/puzzle.html
134
+ - test/test_basic_info.rb
135
+ - test/test_basic_parsing.rb
136
+ - test/test_helper.rb
137
+ - test/test_info_extraction.rb
138
+ - test/test_monkey_patching.rb
139
+ - test/test_parsing_embedded_languages.rb
140
+ - test/test_parsing_puzzle.rb
141
+ homepage: https://github.com/ftomassetti/codemodels-html
142
+ licenses:
143
+ - Apache License 2
144
+ metadata: {}
145
+ post_install_message:
146
+ rdoc_options: []
147
+ require_paths:
148
+ - lib
149
+ required_ruby_version: !ruby/object:Gem::Requirement
150
+ requirements:
151
+ - - '>='
152
+ - !ruby/object:Gem::Version
153
+ version: '0'
154
+ required_rubygems_version: !ruby/object:Gem::Requirement
155
+ requirements:
156
+ - - '>='
157
+ - !ruby/object:Gem::Version
158
+ version: '0'
159
+ requirements: []
160
+ rubyforge_project:
161
+ rubygems_version: 2.2.0
162
+ signing_key:
163
+ specification_version: 4
164
+ summary: CodeModels for HTML
165
+ test_files:
166
+ - test/data/puzzle.html
167
+ - test/test_basic_info.rb
168
+ - test/test_basic_parsing.rb
169
+ - test/test_helper.rb
170
+ - test/test_info_extraction.rb
171
+ - test/test_monkey_patching.rb
172
+ - test/test_parsing_embedded_languages.rb
173
+ - test/test_parsing_puzzle.rb