| // |
| // 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 |
| // |
| // https://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. |
| // |
| |
| using System.IO; |
| |
| namespace org.apache.plc4net.test.codegen |
| { |
| /// <summary> |
| /// Resolves files in the repository checkout that integration-style tests |
| /// need — the real modbus.mspec, the KNX test-suite XML. The test host's |
| /// working directory is the test output directory, several levels below |
| /// the checkout root, so a hard-coded walk-up depth silently misses the |
| /// root when the layout changes. Walking up until a directory containing |
| /// pom.xml and plc4net/ marks the root is robust to that depth. |
| /// </summary> |
| internal static class RepoPaths |
| { |
| /// <summary> |
| /// Root of the PLC4X checkout, or null when the tests run somewhere |
| /// that is not inside a checkout (e.g. a decompiled source tree). |
| /// </summary> |
| public static string? FindRepoRoot() |
| { |
| var dir = new DirectoryInfo(Directory.GetCurrentDirectory()); |
| while (dir != null) |
| { |
| if (File.Exists(Path.Combine(dir.FullName, "pom.xml")) && |
| Directory.Exists(Path.Combine(dir.FullName, "plc4net"))) |
| { |
| return dir.FullName; |
| } |
| dir = dir.Parent; |
| } |
| return null; |
| } |
| } |
| } |