diff --git a/spec/ddcov/calculator_with_symlinks/calculator.rb b/spec/ddcov/calculator_with_symlinks/calculator.rb new file mode 100644 index 00000000..9f1cbc00 --- /dev/null +++ b/spec/ddcov/calculator_with_symlinks/calculator.rb @@ -0,0 +1,28 @@ +# frozen_string_literal: true + +require_relative "vendor/gems/operations/operations" + +class Calculator + def initialize + @adder = Add.new + @subtractor = Subtract.new + @multiplier = Multiply.new + @divider = Divide.new + end + + def add(a, b) + @adder.call(a, b) + end + + def subtract(a, b) + @subtractor.call(a, b) + end + + def multiply(a, b) + @multiplier.call(a, b) + end + + def divide(a, b) + @divider.call(a, b) + end +end diff --git a/spec/ddcov/calculator_with_symlinks/operations/add.rb b/spec/ddcov/calculator_with_symlinks/operations/add.rb new file mode 100644 index 00000000..ad4ca3a1 --- /dev/null +++ b/spec/ddcov/calculator_with_symlinks/operations/add.rb @@ -0,0 +1,7 @@ +# frozen_string_literal: true + +class Add + def call(a, b) + a + b + end +end diff --git a/spec/ddcov/calculator_with_symlinks/operations/divide.rb b/spec/ddcov/calculator_with_symlinks/operations/divide.rb new file mode 100644 index 00000000..178b9a83 --- /dev/null +++ b/spec/ddcov/calculator_with_symlinks/operations/divide.rb @@ -0,0 +1,11 @@ +# frozen_string_literal: true + +require_relative "helpers/calculator_logger" + +class Divide + prepend CalculatorLogger + + def call(a, b) + a / b + end +end diff --git a/spec/ddcov/calculator_with_symlinks/operations/helpers/calculator_logger.rb b/spec/ddcov/calculator_with_symlinks/operations/helpers/calculator_logger.rb new file mode 100644 index 00000000..e46399b8 --- /dev/null +++ b/spec/ddcov/calculator_with_symlinks/operations/helpers/calculator_logger.rb @@ -0,0 +1,12 @@ +# frozen_string_literal: true + +module CalculatorLogger + def call(a, b) + res = super + + @log ||= [] + @log << "operation performed" + + res + end +end diff --git a/spec/ddcov/calculator_with_symlinks/operations/multiply.rb b/spec/ddcov/calculator_with_symlinks/operations/multiply.rb new file mode 100644 index 00000000..0290d969 --- /dev/null +++ b/spec/ddcov/calculator_with_symlinks/operations/multiply.rb @@ -0,0 +1,7 @@ +# frozen_string_literal: true + +class Multiply + def call(a, b) + a * b + end +end diff --git a/spec/ddcov/calculator_with_symlinks/operations/operations.rb b/spec/ddcov/calculator_with_symlinks/operations/operations.rb new file mode 100644 index 00000000..7fb3b210 --- /dev/null +++ b/spec/ddcov/calculator_with_symlinks/operations/operations.rb @@ -0,0 +1,4 @@ +require_relative "add" +require_relative "divide" +require_relative "multiply" +require_relative "subtract" diff --git a/spec/ddcov/calculator_with_symlinks/operations/subtract.rb b/spec/ddcov/calculator_with_symlinks/operations/subtract.rb new file mode 100644 index 00000000..da667953 --- /dev/null +++ b/spec/ddcov/calculator_with_symlinks/operations/subtract.rb @@ -0,0 +1,7 @@ +# frozen_string_literal: true + +class Subtract + def call(a, b) + a - b + end +end diff --git a/spec/ddcov/calculator_with_symlinks/vendor/gems/operations b/spec/ddcov/calculator_with_symlinks/vendor/gems/operations new file mode 120000 index 00000000..accd45a8 --- /dev/null +++ b/spec/ddcov/calculator_with_symlinks/vendor/gems/operations @@ -0,0 +1 @@ +/Users/andrey.marchenko/p/datadog-ci-rb/spec/ddcov/calculator_with_symlinks/operations \ No newline at end of file diff --git a/spec/ddcov/ddcov_with_symlinks_spec.rb b/spec/ddcov/ddcov_with_symlinks_spec.rb new file mode 100644 index 00000000..915f438c --- /dev/null +++ b/spec/ddcov/ddcov_with_symlinks_spec.rb @@ -0,0 +1,37 @@ +# frozen_string_literal: true + +require "datadog_cov.#{RUBY_VERSION}_#{RUBY_PLATFORM}" + +require_relative "calculator_with_symlinks/calculator" + +RSpec.describe Datadog::CI::ITR::Coverage::DDCov do + def absolute_path(path) + File.expand_path(File.join(__dir__, path)) + end + + subject { described_class.new(root: root) } + + describe "code coverage collection" do + let!(:calculator) { Calculator.new } + + context "when root is the calculator project dir" do + let(:root) { absolute_path("calculator_with_symlinks") } + + it "collects code coverage including Calculator and operations" do + subject.start + + expect(calculator.add(1, 2)).to eq(3) + expect(calculator.subtract(1, 2)).to eq(-1) + + coverage = subject.stop + + expect(coverage.size).to eq(3) + expect(coverage.keys).to include( + absolute_path("calculator_with_symlinks/calculator.rb"), + absolute_path("calculator_with_symlinks/operations/add.rb"), + absolute_path("calculator_with_symlinks/operations/subtract.rb") + ) + end + end + end +end