| 128 | struct SC::BuildTest : public SC::TestCase |
| 129 | { |
| 130 | BuildTest(SC::TestReport& report) : TestCase(report, "BuildTest") |
| 131 | { |
| 132 | String buildDir; |
| 133 | { |
| 134 | String targetDirectory = report.applicationRootDirectory.view(); |
| 135 | SC_TRUST_RESULT(Path::append(targetDirectory, {"../..", "_Tests"}, Path::AsNative)); |
| 136 | SmallString<128> runDirectory; |
| 137 | SC_TRUST_RESULT(StringBuilder::format(runDirectory, "run-{}-{}", Time::Realtime::now().milliseconds, |
| 138 | reinterpret_cast<size_t>(this))); |
| 139 | SC_TRUST_RESULT(Path::append(targetDirectory, {runDirectory.view()}, Path::AsNative)); |
| 140 | // Normalizing is not strictly necessary but it helps when debugging the test |
| 141 | SC_TRUST_RESULT(Path::normalize(buildDir, targetDirectory.view(), Path::AsNative)); |
| 142 | } |
| 143 | Build::Action action; |
| 144 | action.action = Build::Action::Configure; |
| 145 | |
| 146 | Build::Directories& directories = action.parameters.directories; |
| 147 | SC_TRUST_RESULT(Path::join(directories.projectsDirectory, {buildDir.view(), "_Projects"})); |
| 148 | SC_TRUST_RESULT(Path::join(directories.outputsDirectory, {buildDir.view(), "_Outputs"})); |
| 149 | SC_TRUST_RESULT(Path::join(directories.intermediatesDirectory, {buildDir.view(), "_Intermediates"})); |
| 150 | SC_TRUST_RESULT(Path::join(directories.buildCacheDirectory, {buildDir.view(), "_BuildCache"})); |
| 151 | SC_TRUST_RESULT(Path::join(directories.packagesCacheDirectory, {buildDir.view(), "_PackagesCache"})); |
| 152 | SC_TRUST_RESULT(Path::join(directories.packagesInstallDirectory, {buildDir.view(), "_Packages"})); |
| 153 | |
| 154 | directories.libraryDirectory = report.libraryRootDirectory.view(); |
| 155 | directories.projectDirectory = report.libraryRootDirectory.view(); |
| 156 | |
| 157 | if (test_section("Native backend support matrix")) |
| 158 | { |
| 159 | Span<const Build::SupportMatrixEntry> matrix = Build::getNativeBackendSupportMatrix(); |
| 160 | SC_TEST_EXPECT(matrix.sizeInElements() >= 14); |
| 161 | SC_TEST_EXPECT(Build::SupportStatus::toString(Build::SupportStatus::Supported) == "supported"); |
| 162 | SC_TEST_EXPECT(Build::SupportStatus::toString(Build::SupportStatus::NotYet) == "not-yet"); |
| 163 | SC_TEST_EXPECT(Build::SupportTier::toString(Build::SupportTier::Tier2) == "tier2"); |
| 164 | |
| 165 | size_t buildSupportedRows = 0; |
| 166 | for (const Build::SupportMatrixEntry& entry : matrix) |
| 167 | { |
| 168 | SC_TEST_EXPECT(entry.hostMachine.environment == Build::TargetEnvironment::Native); |
| 169 | SC_TEST_EXPECT(entry.targetMachine.environment != Build::TargetEnvironment::Native); |
| 170 | SC_TEST_EXPECT(not entry.validation.isEmpty()); |
| 171 | if (entry.buildSupport == Build::SupportStatus::Supported) |
| 172 | { |
| 173 | buildSupportedRows += 1; |
| 174 | } |
| 175 | } |
| 176 | SC_TEST_EXPECT(buildSupportedRows == matrix.sizeInElements()); |
| 177 | SC_TEST_EXPECT(supportMatrixContains(matrix, Build::Platform::Apple, Build::TargetEnvironment::WindowsGNU, |
| 178 | Build::Architecture::Intel64, Build::SupportStatus::Supported, |
| 179 | Build::SupportStatus::Supported, Build::SupportTier::Tier1, |
| 180 | Build::RunnerSpec::Wine)); |
| 181 | SC_TEST_EXPECT(supportMatrixContains(matrix, Build::Platform::Apple, Build::TargetEnvironment::WindowsGNU, |
| 182 | Build::Architecture::Arm64, Build::SupportStatus::Supported, |
| 183 | Build::SupportStatus::NotYet, Build::SupportTier::Tier1, |
| 184 | Build::RunnerSpec::Wine)); |
| 185 | SC_TEST_EXPECT(supportMatrixContains(matrix, Build::Platform::Apple, Build::TargetEnvironment::LinuxGlibc, |
| 186 | Build::Architecture::Arm64, Build::SupportStatus::Supported, |
| 187 | Build::SupportStatus::NotYet, Build::SupportTier::Tier1, |
nothing calls this directly
no test coverage detected