| 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980 |
- /*
- * Copyright 2019 Google
- *
- * Licensed 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.
- */
- import Foundation
- /// A set of SDK targets for which to collect code coverage.
- let TARGETS_TO_COLLECT: Set = [
- "Auth_Example_iOS.app",
- "Core_Example_iOS.app",
- "Database_Example_iOS.app",
- "DynamicLinks_Example_iOS.app",
- "InstanceID_Example_iOS.app",
- "Messaging_Example_iOS.app",
- "Storage_Example_iOS.app",
- // TODO(Corrob): Add support for Firestore, Functions, and InAppMessaging.
- ]
- /// Represents a set of metric table updates to upload to the database.
- public struct UploadMetrics: Encodable {
- public var tables: [TableUpdate]
- public init(tables: [TableUpdate]) {
- self.tables = tables
- }
- /// Converts the metric table updates to a JSON format this is compatible with the Java uploader.
- public func json() throws -> String {
- let json = try JSONEncoder().encode(self)
- return String(data: json, encoding: .utf8)!
- }
- }
- /// An update to a metrics table with the new data to uplaod to the database.
- public struct TableUpdate: Encodable {
- public var table_name: String
- public var column_names: [String]
- public var replace_measurements: [[String]]
- public init(table_name: String, column_names: [String], replace_measurements: [[String]]) {
- self.table_name = table_name
- self.column_names = column_names
- self.replace_measurements = replace_measurements
- }
- /// Creates a table update for code coverage by parsing a coverage report from XCov.
- public static func createFrom(coverage: CoverageReport, pullRequest: Int,
- currentTime: String) -> TableUpdate {
- var metrics = [[String]]()
- for target in coverage.targets {
- if TARGETS_TO_COLLECT.contains(target.name) {
- var row = [String]()
- row.append(target.name.components(separatedBy: "_")[0])
- row.append(String(pullRequest))
- row.append(String(target.coverage))
- row.append(currentTime)
- metrics.append(row)
- } else {
- print(
- "WARNING - target \(target.name) is being filtered out from coverage collection. Skipping..."
- )
- }
- }
- let columnNames = ["product_name", "pull_request_id", "coverage_total", "collection_time"]
- return TableUpdate(table_name: "IosCodeCoverage", column_names: columnNames,
- replace_measurements: metrics)
- }
- }
|