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



66
67
68
69
70
71
72
73
74
75
76
# File 'lib/modspec/suite.rb', line 66

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



87
88
89
90
91
92
93
94
95
# File 'lib/modspec/suite.rb', line 87

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



38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
# File 'lib/modspec/suite.rb', line 38

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

  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)

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

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

  combined_suite
end

#resolve_conflicts(other_suite) ⇒ Object



80
81
82
83
84
85
# File 'lib/modspec/suite.rb', line 80

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



97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
# File 'lib/modspec/suite.rb', line 97

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|
        Array(ct.targets).map(&:to_s).include?(r.identifier.to_s)
      end
      ct.parent_class = cc
    end
  end
end

#validateObject



22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
# File 'lib/modspec/suite.rb', line 22

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