/// <summary> /// Bundles the given <paramref name="tdilUnit"/> and all referenced units. A bundle table is returned /// which contains all mandatory units (and additional resources) to execute the test case. The bundle /// table contains the name of the referenced units as well as each unit content (as byte array). This /// <paramref name="tdilUnit"/> is used and internally declared as main unit. /// </summary> /// <param name="tdilUnit">Reference to the main TDIL unit to pack</param> /// <returns>Created instance of <see cref="UnitBundleTable"/></returns> /// <exception cref="ArgumentNullException">If <paramref name="tdilUnit"/> is NULL</exception> /// <exception cref="ArgumentException">If <paramref name="tdilUnit"/> does not exist</exception> /// <exception cref="UnitBundlerException">If something went wrong during the package process</exception> public UnitBundleTable Bundle(FileInfo tdilUnit) { if (tdilUnit == null) { throw new ArgumentNullException("tdilUnit"); } if (!tdilUnit.Exists) { throw new ArgumentException(string.Format("Given '{0}' does not exist", tdilUnit.FullName)); } string fileContent; try { fileContent = File.ReadAllText(tdilUnit.FullName); } catch (Exception ex) { throw new UnitBundlerException(string.Format("Error on reading file '{0}'", tdilUnit.FullName), ex); } UnitBundleTable unitBundleTable = new UnitBundleTable(); // Convert full qualified includes to file names and add them to the unit bundle table fileContent = ConvertQualifiedIncludesToFilenames(fileContent, unitBundleTable); // TODO Add support of n-th generation inheritance unitBundleTable.AddEntry("main.btc.tdil", fileContent); return(unitBundleTable); }
/// <summary> /// Adds the given <paramref name="unitReference"/>, the corresponding file name and its data to the given /// <paramref name="unitBundleTable"/>. /// </summary> /// <param name="unitReference">Unit reference to process</param> /// <param name="unitBundleTable">Unit bundle table to update</param> /// <returns>The name of the TDIL file</returns> /// <exception cref="UnitBundlerException">If something went wrong</exception> private string AddUnitReferenceToBundleTable(string unitReference, UnitBundleTable unitBundleTable) { UnitName unitName = new UnitName(unitReference); string unitFilePath = iImportPathProvider.GetPath(unitName); try { string unitFileName = Path.GetFileName(unitFilePath); string fileContent = File.ReadAllText(unitFilePath); byte[] unitFileContent = Encoding.UTF8.GetBytes(fileContent); unitBundleTable.AddEntry(unitFileName, unitFileContent); return(unitFileName); } catch (Exception ex) { throw new UnitBundlerException(string.Format("Error on adding unit reference '{0}' to package table", unitReference), ex); } }