Class: Modspec::Suite

Inherits:
Lutaml::Model::Serializable
  • Object
show all
Defined in:
lib/modspec/suite.rb

Instance Attribute Summary collapse

Class Method Summary collapse

Instance Method Summary collapse

Instance Attribute Details

#all_identifiersObject



57
58
59
60
61
62
63
64
65
66
67
# File 'lib/modspec/suite.rb', line 57

def all_identifiers
  return @all_identifiers if @all_identifiers

  nsc = normative_statements_classes || []
  cc = conformance_classes || []

  @all_identifiers = (nsc.flat_map(&:normative_statements) +
          cc.flat_map(&:tests) +
          nsc +
          cc).map(&:identifier)
end

Class Method Details

.from_yaml_files(*files) ⇒ Object



76
77
78
79
80
81
82
83
84
# File 'lib/modspec/suite.rb', line 76

def self.from_yaml_files(*files)
  combined_suite = new
  files.each do |file|
    suite = from_yaml(File.read(file))
    combined_suite = combined_suite.combine(suite)
  end
  combined_suite.name = "Combined Suite"
  combined_suite
end

Instance Method Details

#combine(other_suite) ⇒ Object

Raises:

  • (ArgumentError)


32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
# File 'lib/modspec/suite.rb', line 32

def combine(other_suite)
  raise ArgumentError, "Argument must be a Modspec::Suite" unless other_suite.is_a?(Modspec::Suite)

  combined_suite = dup
  combined_suite.all_identifiers = nil
  if other_suite.normative_statements_classes
    combined_suite.normative_statements_classes ||= []
    combined_suite.normative_statements_classes += other_suite.normative_statements_classes
  end

  if other_suite.conformance_classes
    combined_suite.conformance_classes ||= []
    combined_suite.conformance_classes += other_suite.conformance_classes
  end

  # Ensure uniqueness of identifiers
  combined_suite.normative_statements_classes.uniq!(&:identifier) if combined_suite.normative_statements_classes

  combined_suite.conformance_classes.uniq!(&:identifier) if combined_suite.conformance_classes

  combined_suite.name = "#{name} + #{other_suite.name}"

  combined_suite
end

#resolve_conflicts(other_suite) ⇒ Object



71
72
73
74
# File 'lib/modspec/suite.rb', line 71

def resolve_conflicts(other_suite)
  resolve_conflicts_for(normative_statements_classes, other_suite.normative_statements_classes)
  resolve_conflicts_for(conformance_classes, other_suite.conformance_classes)
end

#setup_relationshipsObject



86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
# File 'lib/modspec/suite.rb', line 86

def setup_relationships
  all_requirements = if normative_statements_classes
                       normative_statements_classes.flat_map(&:normative_statements)
                     else
                       []
                     end

  return unless conformance_classes

  conformance_classes.each do |cc|
    cc.tests.each do |ct|
      ct.corresponding_requirements = all_requirements.select do |r|
        ct.targets.map(&:to_s).include?(r.identifier.to_s)
      end
      ct.parent_class = cc
    end
  end
end

#validateObject



20
21
22
23
24
25
26
27
28
29
30
# File 'lib/modspec/suite.rb', line 20

def validate
  setup_relationships
  self.all_identifiers = nil
  errors = super
  errors.concat(validate_cycles)
  errors.concat(validate_label_uniqueness)
  errors.concat(validate_dependencies)
  errors.concat(normative_statements_classes.flat_map { |n| n.validate(self) }) unless normative_statements_classes.nil?
  errors.concat(conformance_classes.flat_map(&:validate)) unless conformance_classes.nil?
  errors
end