-- Tests/examples helpers

require('vstudio')

function SetupExampleProject()
  kind "ConsoleApp"
  language "C#"
  debugdir "."

  links { "CppSharp.Parser" }

  SetupManagedProject()
end

function SetupTestProject(name, extraFiles, suffix)
  SetupTestGeneratorProject(name)
  SetupTestNativeProject(name)
  SetupTestProjectsCSharp(name, nil, extraFiles, suffix)
  SetupTestProjectsCLI(name, extraFiles, suffix)
end

function SetupTestCSharp(name)
  SetupTestGeneratorProject(name)
  SetupTestNativeProject(name)
  SetupTestProjectsCSharp(name)
end

function SetupTestCLI(name, extraFiles, suffix)
  SetupTestGeneratorProject(name)
  SetupTestNativeProject(name)
  SetupTestProjectsCLI(name, extraFiles, suffix)
end

function SetupManagedTestProject()
  SetupManagedProject()
  enabledefaultcompileitems "false"
  kind "SharedLib"
  language "C#"
  clr "Unsafe"
  files { "*.lua" }
end

function SetupExternalManagedTestProject(name)
  externalproject (name)
  SetupManagedTestProject()
end

function SetupTestGeneratorProject(name, depends)
  if EnabledManagedProjects() then
    SetupExternalManagedTestProject(name .. ".Gen")
  end
end

function SetupTestNativeProject(name, depends)
  if not EnableNativeProjects() then
    return
  end

  project(name .. ".Native")

    SetupNativeProject()

    kind "SharedLib"
    language "C++"
    targetdir (path.join(gendir, name))

    files { "**.h", "**.cpp" }
    defines { "DLL_EXPORT" }

    if depends ~= nil then
      links { depends .. ".Native" }
    end
end

function SetupTestProjectsCSharp(name, depends, extraFiles, suffix)
  if not EnabledManagedProjects() then
    return
  end
    if suffix ~= nil then
      nm = name .. suffix 
      str = "Std" .. suffix
    else
      nm = name
      str = "Std"
    end
  
  if name ~= "NamespacesDerived" then
    SetupExternalManagedTestProject(name .. ".CSharp")
  end
  SetupExternalManagedTestProject(name .. ".Tests.CSharp")
end

function SetupTestProjectsCLI(name, extraFiles, suffix)
  if not EnabledCLIProjects() then
    return
  end

  project(name .. ".CLI")
    SetupNativeProject()

    kind "SharedLib"
    language "C++"
    clr "NetCore"
    targetdir (path.join(gendir, name))

    dependson { name .. ".Gen" }

    if (suffix ~= nil) then 
      nm = name .. suffix
    else
      nm = name
    end

    files
    {
      path.join(gendir, name, nm .. ".cpp"),
      path.join(gendir, name, nm .. ".h")
    }
    if extraFiles ~= nil then
      for _, file in pairs(extraFiles) do
        if suffix ~= nil then
          file = file .. suffix  
        end
        files { path.join(gendir, name, file .. ".cpp") }
        files { path.join(gendir, name, file .. ".h") }
      end
    end

    includedirs { path.join(testsdir, name), incdir }
    links { name .. ".Native" }    
    files { path.join(objsdir, name .. ".Native") }

  SetupExternalManagedTestProject(name .. ".Tests.CLI")
end

function IncludeExamples()
  --print("Searching for examples...")
  IncludeDir(examplesdir)
end

function IncludeTests()
  --print("Searching for tests...")
  IncludeDir(testsdir)
end