codemodels-html 0.1.0-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.
@@ -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