Class: PluginTests

Inherits:
Test::Unit::TestCase
  • Object
show all
Defined in:
lib/wiki_lyrics/tests/plugin_tests.rb

Class Method Summary collapse

Instance Method Summary collapse

Class Method Details

.build_suite(plugin, cases) ⇒ Object



30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
# File 'lib/wiki_lyrics/tests/plugin_tests.rb', line 30

def self.build_suite( plugin, cases )
	@@tmp_plugin = plugin
	@@tmp_cases = cases
	eval(
		"class #{plugin.class.name}Tests < PluginTests\n" + \
			"@@plugin = @@tmp_plugin\n" + \
			"@@cases = @@tmp_cases\n" + \
			"def self.plugin()\n" + \
				"return @@plugin\n" + \
			"end\n" + \
			"def self.cases()\n" + \
				"return @@cases\n" + \
			"end\n" + \
		"end"
	)
	return eval( "#{plugin.class.name}Tests.suite()" )
end

Instance Method Details

#casesObject



52
53
54
# File 'lib/wiki_lyrics/tests/plugin_tests.rb', line 52

def cases()
	return self.class.cases()
end

#check_response(response, request, site_name) ⇒ Object



90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
# File 'lib/wiki_lyrics/tests/plugin_tests.rb', line 90

def check_response( response, request, site_name )
	[response.artist.to_s(), response.title.to_s(), response.album.to_s()].each() do ||
		assert_nil(
			.downcase().index( "lyrics" ),
			"Lyrics metadata for #{request.title} by #{request.artist} returned by #{site_name} contains the 'lyrics' word"
		)
	end
	assert_not_nil(
		response.lyrics,
		"No lyrics for #{request.title} by #{request.artist} returned by #{site_name}"
	)
	assert(
		! response.lyrics.strip().empty?,
		"Empty lyrics for #{request.title} by #{request.artist} returned by #{site_name}"
	)
	# assert(
	# 	response.lyrics.include?( "\n" ),
	# 	"Lyrics for #{request.title} by #{request.artist} returned by #{site_name} don't have any line breaks"
	# )
	md = /<\/?(a|h[1-6]|hr|p|br|body|html|span|div|br|script|!?--) *\/?>*/i.match( response.lyrics )
	assert_nil(
		md,
		"Lyrics for #{request.title} by #{request.artist} returned" + \
		" by #{site_name} contains unexpected HTML tags: #{md ? md[1] : ""}"
	)
end

#check_suggestions(suggestions, request, site_name) ⇒ Object



72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
# File 'lib/wiki_lyrics/tests/plugin_tests.rb', line 72

def check_suggestions( suggestions, request, site_name )
	assert_not_nil( suggestions, "No suggestions for #{request.title} by #{request.artist} returned by #{site_name}" )
	assert( ! suggestions.empty?, "Empty suggestions list for #{request.title} by #{request.artist} returned by #{site_name}" )
	suggestions.each() do |suggestion|
		sugg = { "artist" => suggestion.artist, "title" => suggestion.title }
		sugg.each() do |key, value|
			assert_nil(
				value.downcase().index( "lyrics" ),
				"Suggestions for #{request.title} by #{request.artist} returned by #{site_name} contains the 'lyrics' word (#{value})"
			)
			assert(
				value == HTMLEntities.decode( value ),
				"Suggestions for #{request.title} by #{request.artist} returned by #{site_name} contains unexpected HTML entities (#{value})"
			)
		end
	end
end

#lyrics_test_dataObject



56
57
58
59
60
61
62
# File 'lib/wiki_lyrics/tests/plugin_tests.rb', line 56

def lyrics_test_data()
	test_data = plugin().lyrics_test_data()
	return test_data if ! cases() || cases().empty?
	test_data2 = []
	cases().each() { |index| test_data2 << test_data[index] if test_data[index] }
	return test_data2
end

#pluginObject



48
49
50
# File 'lib/wiki_lyrics/tests/plugin_tests.rb', line 48

def plugin()
	return self.class.plugin()
end

#suggestions_test_dataObject



64
65
66
67
68
69
70
# File 'lib/wiki_lyrics/tests/plugin_tests.rb', line 64

def suggestions_test_data()
	test_data = plugin().suggestions_test_data()
	return test_data if ! cases() || cases().empty?
	test_data2 = []
	cases().each() { |index| test_data2 << test_data[index] if test_data[index] }
	return test_data2
end

#test_lyrics_direct_searchObject



117
118
119
120
121
122
123
124
125
126
127
128
129
130
# File 'lib/wiki_lyrics/tests/plugin_tests.rb', line 117

def test_lyrics_direct_search()
	puts "\nTesting #{plugin().site_name()} lyrics direct search..."
	lyrics_test_data().each() do |request|
		fetch_data = plugin().build_lyrics_fetch_data( request )
		if fetch_data.url
			puts " - searching lyrics for #{request.title} by #{request.artist}"
			response = plugin().lyrics_direct_search( request )
			check_response( response, request, plugin.site_name() )
		else
			puts " - skipping lyrics search for #{request.title} by #{request.artist} (no direct fetch data received)"
			break
		end
	end
end

#test_lyrics_from_suggestionsObject



132
133
134
135
136
137
138
139
140
141
142
# File 'lib/wiki_lyrics/tests/plugin_tests.rb', line 132

def test_lyrics_from_suggestions()
	puts "\nTesting #{plugin().site_name()} lyrics from suggestions..."
	suggestions_test_data().each() do |request|
		puts " - searching suggestions for #{request.title} by #{request.artist}"
		suggestions = plugin().suggestions( request )
		check_suggestions( suggestions, request, plugin.site_name() )
		puts " - searching lyrics to #{request.title} by #{request.artist} in suggestions"
		response, suggestions = plugin().lyrics_from_suggestions( request, suggestions )
		check_response( response, request, plugin.site_name() )
	end
end

#test_lyrics_full_searchObject



144
145
146
147
148
149
150
151
# File 'lib/wiki_lyrics/tests/plugin_tests.rb', line 144

def test_lyrics_full_search()
	puts "\nTesting #{plugin().site_name()} lyrics full search..."
	lyrics_test_data().each() do |request|
		puts " - searching lyrics for #{request.title} by #{request.artist}"
		response = plugin().lyrics_full_search( request )
		check_response( response, request, plugin.site_name() )
	end
end

#test_no_lyrics_foundObject



153
154
155
156
157
158
159
# File 'lib/wiki_lyrics/tests/plugin_tests.rb', line 153

def test_no_lyrics_found()
	puts "\nTesting #{plugin().site_name()} forced retrieval fail..."
	request = Lyrics::Request.new( "Fake Artist", "Fake Title", "Fake Album" )
	puts " - searching lyrics for #{request.title} by #{request.artist}"
	response = plugin().lyrics_full_search( request )
	assert_nil( response.lyrics, "Unexpected lyrics returned for #{request.title} by #{request.artist} by #{plugin.site_name()}" )
end