#
# Licensed to the Apache Software Foundation (ASF) under one or more
# contributor license agreements.  See the NOTICE file distributed with
# this work for additional information regarding copyright ownership.  The
# ASF licenses this file to you under the Apache License, Version 2.0 (the
# "License"); you may not use this file except in compliance with the
# License.  You may obtain a copy of the License at
#
#       http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.  See the
# License for the specific language governing permissions and limitations
# under the License.

require 'rake/testtask'

namespace :test do
  desc "Run tests for the Deltacloud API frontend."
  Rake::TestTask.new(:deltacloud) do |t|
    t.test_files = FileList["deltacloud/*_test.rb"]
  end

  namespace :deltacloud do
    ["base_api", "buckets", "images", "instances", "instance_states", "keys", "realms", "storage_volumes", "storage_snapshots", "hardware_profiles"].each do |col|
      Rake::TestTask.new(col) do |t|
        t.test_files = FileList["deltacloud/#{col}_test.rb"]
      end
    end
  end

  Rake::TestTask.new(:cimi) do |t|
    t.test_files = FileList["cimi/*_test.rb"]
  end

  Rake::TestTask.new(:cimiplan) do |t|
    t.test_files = FileList["cimi/part*_test.rb", "cimi/cep_test.rb"]
  end

end
