mirror of
https://github.com/beefproject/beef
synced 2026-06-08 13:15:56 +00:00
95 lines
2.5 KiB
Ruby
95 lines
2.5 KiB
Ruby
#
|
|
# Copyright (c) 2006-2026 Wade Alcorn - wade@bindshell.net
|
|
# Browser Exploitation Framework (BeEF) - https://beefproject.com
|
|
# See the file 'doc/COPYING' for copying permission
|
|
#
|
|
require 'spec_helper'
|
|
|
|
RSpec.describe 'Module extensions' do
|
|
# Create a test module to use in tests
|
|
let(:test_module) do
|
|
Module.new do
|
|
def test_method
|
|
'test'
|
|
end
|
|
end
|
|
end
|
|
|
|
describe '#included_in_classes' do
|
|
it 'returns an array' do
|
|
result = test_module.included_in_classes
|
|
expect(result).to be_an(Array)
|
|
end
|
|
|
|
it 'finds classes that include the module' do
|
|
mod = test_module
|
|
test_class = Class.new do
|
|
include mod
|
|
end
|
|
|
|
# Force class to be created
|
|
test_class.new
|
|
|
|
included_classes = mod.included_in_classes
|
|
expect(included_classes.map(&:to_s)).to include(test_class.to_s)
|
|
end
|
|
|
|
it 'returns unique classes only' do
|
|
mod = test_module
|
|
test_class = Class.new do
|
|
include mod
|
|
end
|
|
|
|
# Force class to be created multiple times
|
|
test_class.new
|
|
test_class.new
|
|
|
|
included_classes = mod.included_in_classes
|
|
unique_class_names = included_classes.map(&:to_s)
|
|
expect(unique_class_names.count(test_class.to_s)).to eq(1)
|
|
end
|
|
|
|
it 'returns empty array when module is not included anywhere' do
|
|
isolated_module = Module.new
|
|
result = isolated_module.included_in_classes
|
|
expect(result).to be_an(Array)
|
|
# May or may not be empty depending on what's loaded, but should be an array
|
|
end
|
|
end
|
|
|
|
describe '#included_in_modules' do
|
|
it 'returns an array' do
|
|
result = test_module.included_in_modules
|
|
expect(result).to be_an(Array)
|
|
end
|
|
|
|
it 'finds modules that include the module' do
|
|
mod = test_module
|
|
including_module = Module.new do
|
|
include mod
|
|
end
|
|
|
|
# Force module to be created
|
|
Class.new { include including_module }
|
|
|
|
included_modules = mod.included_in_modules
|
|
expect(included_modules.map(&:to_s)).to include(including_module.to_s)
|
|
end
|
|
|
|
it 'returns unique modules only' do
|
|
mod = test_module
|
|
including_module = Module.new do
|
|
include mod
|
|
end
|
|
|
|
# Force module to be created multiple times
|
|
Class.new { include including_module }
|
|
Class.new { include including_module }
|
|
|
|
included_modules = mod.included_in_modules
|
|
unique_module_names = included_modules.map(&:to_s)
|
|
expect(unique_module_names.count(including_module.to_s)).to eq(1)
|
|
end
|
|
end
|
|
end
|