Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 1 addition & 0 deletions .github/workflows/test.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -56,6 +56,7 @@ jobs:
-scheme RxCode \
-configuration Debug \
-destination platform=macOS \
-testPlan UnitTestPlan \
CODE_SIGNING_ALLOWED=NO \
test | xcpretty

Expand Down
1 change: 1 addition & 0 deletions Packages/Sources/RxCodeChatKit/IMETextView.swift
Original file line number Diff line number Diff line change
Expand Up @@ -52,6 +52,7 @@ struct IMETextView: NSViewRepresentable {
textView.isAutomaticTextReplacementEnabled = false
textView.isAutomaticSpellingCorrectionEnabled = false
textView.smartInsertDeleteEnabled = false
textView.setAccessibilityIdentifier("chat-input-text-view")
textView.textContainerInset = .zero
textView.isHorizontallyResizable = false
textView.isVerticallyResizable = true
Expand Down
3 changes: 3 additions & 0 deletions Packages/Sources/RxCodeChatKit/InputBarView.swift
Original file line number Diff line number Diff line change
Expand Up @@ -253,6 +253,7 @@ struct InputBarView<Accessory: View, TopAccessory: View>: View {
.menuIndicator(.hidden)
.fixedSize()
.help(windowState.sessionPlanMode ? "Plan mode is on — Add menu" : "Add — attach file or toggle plan mode")
.accessibilityIdentifier("composer-add-menu")
.fileImporter(
isPresented: $showFilePicker,
allowedContentTypes: [.item],
Expand Down Expand Up @@ -289,6 +290,7 @@ struct InputBarView<Accessory: View, TopAccessory: View>: View {
}
.buttonStyle(.plain)
.help(String(localized: "Turn off plan mode", bundle: .module))
.accessibilityIdentifier("plan-mode-chip")
}

/// Mirrors `windowState.sessionPlanMode` into a Binding so the Menu's `Toggle`
Expand Down Expand Up @@ -321,6 +323,7 @@ struct InputBarView<Accessory: View, TopAccessory: View>: View {
onImageChipTap: handleImageChipTap
)
.id(textFieldLayoutID)
.accessibilityIdentifier("chat-input")
.onChange(of: windowState.inputText) { oldValue, newValue in
handleInputTextChange(oldValue: oldValue, newValue: newValue)
}
Expand Down
1 change: 1 addition & 0 deletions Packages/Sources/RxCodeChatKit/PlanCardView.swift
Original file line number Diff line number Diff line change
Expand Up @@ -285,6 +285,7 @@ struct PlanCardView: View {
.onHover { isHovered = $0 }
.disabled(isStreaming)
.help(helpText)
.accessibilityIdentifier("plan-card-button")
.animation(.easeInOut(duration: 0.12), value: isHovered)
}

Expand Down
10 changes: 10 additions & 0 deletions Packages/Sources/RxCodeChatKit/PlanSheetView.swift
Original file line number Diff line number Diff line change
Expand Up @@ -353,5 +353,15 @@ public struct PlanSheetView: View {
}
.buttonStyle(.plain)
.disabled(isDisabled)
.accessibilityIdentifier("plan-button-\(accessibilityIDComponent(from: title))")
}

private func accessibilityIDComponent(from title: String) -> String {
title
Comment on lines +356 to +360
.lowercased()
.map { $0.isLetter || $0.isNumber ? String($0) : "-" }
.joined()
.split(separator: "-")
.joined(separator: "-")
}
}
5 changes: 5 additions & 0 deletions Packages/Sources/RxCodeCore/Utilities/AppSupport.swift
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,11 @@ import Foundation
/// `RxCode.<suffix>` so alternate builds never share state with production.
public enum AppSupport {
public static let bundleScopedURL: URL = {
if let override = ProcessInfo.processInfo.environment["RXCODE_APP_SUPPORT_DIR"],
!override.trimmingCharacters(in: .whitespacesAndNewlines).isEmpty {
return URL(fileURLWithPath: override, isDirectory: true)
Comment on lines +9 to +11
}

let root = FileManager.default
.urls(for: .applicationSupportDirectory, in: .userDomainMask)
.first!
Expand Down
120 changes: 116 additions & 4 deletions RxCode.xcodeproj/project.pbxproj
Original file line number Diff line number Diff line change
Expand Up @@ -8,9 +8,11 @@

/* Begin PBXBuildFile section */
33993F0F87CF4DB09F2813A8 /* AppStateProjectSwitchTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4381E755142272EB2DAA9C96 /* AppStateProjectSwitchTests.swift */; };
6E17B0012FC8000100A10001 /* LocalAIProviderAcceptanceTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 6E17B0002FC8000100A10001 /* LocalAIProviderAcceptanceTests.swift */; };
92E180F9B311F3C72D5DE6B7 /* Cocoa.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = A9993BB72A5307039A88B729 /* Cocoa.framework */; };
DCA8CF4A05C959C4A6EB391F /* RxCodeCore in Frameworks */ = {isa = PBXBuildFile; productRef = CCDF9594876099576D4FD46E /* RxCodeCore */; };
DF06CCD12FB4CAB5005991E1 /* ViewInspector in Frameworks */ = {isa = PBXBuildFile; productRef = DF06CCD02FB4CAB5005991E1 /* ViewInspector */; };
DF06DCC72FB8552B005991E1 /* UnitTestPlan.xctestplan in Resources */ = {isa = PBXBuildFile; fileRef = DF06DCC62FB8552B005991E1 /* UnitTestPlan.xctestplan */; };
DFA0CCD12FB4CC01005991E1 /* PlanDecisionTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = DFA0CCC02FB4CC01005991E1 /* PlanDecisionTests.swift */; };
DFA0CCD22FB4CC01005991E1 /* PlanCardViewTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = DFA0CCC12FB4CC01005991E1 /* PlanCardViewTests.swift */; };
DFA0CCD42FB4CC01005991E1 /* RxCodeChatKit in Frameworks */ = {isa = PBXBuildFile; productRef = DFA0CCC32FB4CC01005991E1 /* RxCodeChatKit */; };
Expand All @@ -29,12 +31,23 @@
remoteGlobalIDString = E67335372F7356F600FD26C7;
remoteInfo = RxCode;
};
6E17B0022FC8000100A10001 /* PBXContainerItemProxy */ = {
isa = PBXContainerItemProxy;
containerPortal = E67335302F7356F600FD26C7 /* Project object */;
proxyType = 1;
remoteGlobalIDString = E67335372F7356F600FD26C7;
remoteInfo = RxCode;
};
/* End PBXContainerItemProxy section */

/* Begin PBXFileReference section */
4381E755142272EB2DAA9C96 /* AppStateProjectSwitchTests.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = AppStateProjectSwitchTests.swift; sourceTree = "<group>"; };
6E17B0002FC8000100A10001 /* LocalAIProviderAcceptanceTests.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = LocalAIProviderAcceptanceTests.swift; sourceTree = "<group>"; };
6E17B0032FC8000100A10001 /* RxCodeUITests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = RxCodeUITests.xctest; sourceTree = BUILT_PRODUCTS_DIR; };
6E17B00D2FC8000100A10001 /* UITestplan.xctestplan */ = {isa = PBXFileReference; lastKnownFileType = text; path = UITestplan.xctestplan; sourceTree = "<group>"; };
7321B5E8B81AAB1A2DC0593B /* RxCodeTests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = RxCodeTests.xctest; sourceTree = BUILT_PRODUCTS_DIR; };
A9993BB72A5307039A88B729 /* Cocoa.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Cocoa.framework; path = Platforms/MacOSX.platform/Developer/SDKs/MacOSX15.0.sdk/System/Library/Frameworks/Cocoa.framework; sourceTree = DEVELOPER_DIR; };
DF06DCC62FB8552B005991E1 /* UnitTestPlan.xctestplan */ = {isa = PBXFileReference; lastKnownFileType = text; path = UnitTestPlan.xctestplan; sourceTree = "<group>"; };
DFA0CCC02FB4CC01005991E1 /* PlanDecisionTests.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = PlanDecisionTests.swift; sourceTree = "<group>"; };
DFA0CCC12FB4CC01005991E1 /* PlanCardViewTests.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = PlanCardViewTests.swift; sourceTree = "<group>"; };
DFA0CCD52FB4CC02005991E1 /* HistoryListArchiveFilterTests.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = HistoryListArchiveFilterTests.swift; sourceTree = "<group>"; };
Expand All @@ -61,6 +74,13 @@
);
runOnlyForDeploymentPostprocessing = 0;
};
6E17B0052FC8000100A10001 /* Frameworks */ = {
isa = PBXFrameworksBuildPhase;
buildActionMask = 2147483647;
files = (
);
runOnlyForDeploymentPostprocessing = 0;
};
E67335352F7356F600FD26C7 /* Frameworks */ = {
isa = PBXFrameworksBuildPhase;
buildActionMask = 2147483647;
Expand Down Expand Up @@ -102,10 +122,21 @@
name = Frameworks;
sourceTree = "<group>";
};
6E17B0042FC8000100A10001 /* RxCodeUITests */ = {
isa = PBXGroup;
children = (
6E17B0002FC8000100A10001 /* LocalAIProviderAcceptanceTests.swift */,
);
path = RxCodeUITests;
sourceTree = "<group>";
};
E673352F2F7356F600FD26C7 = {
isa = PBXGroup;
children = (
DF06DCC62FB8552B005991E1 /* UnitTestPlan.xctestplan */,
6E17B00D2FC8000100A10001 /* UITestplan.xctestplan */,
E673353A2F7356F600FD26C7 /* RxCode */,
6E17B0042FC8000100A10001 /* RxCodeUITests */,
E67335392F7356F600FD26C7 /* Products */,
609E8EE085862BD7D5B4012F /* Frameworks */,
1525FE6BFB6F06A3F00B92D3 /* RxCodeTests */,
Expand All @@ -117,6 +148,7 @@
children = (
E67335382F7356F600FD26C7 /* RxCode.app */,
7321B5E8B81AAB1A2DC0593B /* RxCodeTests.xctest */,
6E17B0032FC8000100A10001 /* RxCodeUITests.xctest */,
);
name = Products;
sourceTree = "<group>";
Expand Down Expand Up @@ -147,6 +179,26 @@
productReference = 7321B5E8B81AAB1A2DC0593B /* RxCodeTests.xctest */;
productType = "com.apple.product-type.bundle.unit-test";
};
6E17B0062FC8000100A10001 /* RxCodeUITests */ = {
isa = PBXNativeTarget;
buildConfigurationList = 6E17B0072FC8000100A10001 /* Build configuration list for PBXNativeTarget "RxCodeUITests" */;
buildPhases = (
6E17B0082FC8000100A10001 /* Sources */,
6E17B0052FC8000100A10001 /* Frameworks */,
6E17B0092FC8000100A10001 /* Resources */,
);
buildRules = (
);
dependencies = (
6E17B00A2FC8000100A10001 /* PBXTargetDependency */,
);
name = RxCodeUITests;
packageProductDependencies = (
);
productName = RxCodeUITests;
productReference = 6E17B0032FC8000100A10001 /* RxCodeUITests.xctest */;
productType = "com.apple.product-type.bundle.ui-testing";
};
E67335372F7356F600FD26C7 /* RxCode */ = {
isa = PBXNativeTarget;
buildConfigurationList = E67335432F7356F700FD26C7 /* Build configuration list for PBXNativeTarget "RxCode" */;
Expand Down Expand Up @@ -211,11 +263,19 @@
targets = (
E67335372F7356F600FD26C7 /* RxCode */,
5D74FE7B782850D23F8D9BF7 /* RxCodeTests */,
6E17B0062FC8000100A10001 /* RxCodeUITests */,
);
};
/* End PBXProject section */

/* Begin PBXResourcesBuildPhase section */
6E17B0092FC8000100A10001 /* Resources */ = {
isa = PBXResourcesBuildPhase;
buildActionMask = 2147483647;
files = (
);
runOnlyForDeploymentPostprocessing = 0;
};
AB14AE27D09CB3D7C28C9888 /* Resources */ = {
isa = PBXResourcesBuildPhase;
buildActionMask = 2147483647;
Expand All @@ -227,12 +287,21 @@
isa = PBXResourcesBuildPhase;
buildActionMask = 2147483647;
files = (
DF06DCC72FB8552B005991E1 /* UnitTestPlan.xctestplan in Resources */,
);
runOnlyForDeploymentPostprocessing = 0;
};
/* End PBXResourcesBuildPhase section */

/* Begin PBXSourcesBuildPhase section */
6E17B0082FC8000100A10001 /* Sources */ = {
isa = PBXSourcesBuildPhase;
buildActionMask = 2147483647;
files = (
6E17B0012FC8000100A10001 /* LocalAIProviderAcceptanceTests.swift in Sources */,
);
runOnlyForDeploymentPostprocessing = 0;
};
AEA1371373E1E06A1A8F340A /* Sources */ = {
isa = PBXSourcesBuildPhase;
buildActionMask = 2147483647;
Expand All @@ -254,6 +323,12 @@
/* End PBXSourcesBuildPhase section */

/* Begin PBXTargetDependency section */
6E17B00A2FC8000100A10001 /* PBXTargetDependency */ = {
isa = PBXTargetDependency;
name = RxCode;
target = E67335372F7356F600FD26C7 /* RxCode */;
targetProxy = 6E17B0022FC8000100A10001 /* PBXContainerItemProxy */;
};
BC9DD9CE1DAA92D5D395C09C /* PBXTargetDependency */ = {
isa = PBXTargetDependency;
name = RxCode;
Expand All @@ -269,21 +344,49 @@
BUNDLE_LOADER = "$(TEST_HOST)";
DEVELOPMENT_TEAM = P9KK452K8P;
GENERATE_INFOPLIST_FILE = YES;
MACOSX_DEPLOYMENT_TARGET = 26.2;
MACOSX_DEPLOYMENT_TARGET = 26.0;
PRODUCT_NAME = RxCodeTests;
SDKROOT = macosx;
SWIFT_VERSION = 6.0;
TEST_HOST = "$(BUILT_PRODUCTS_DIR)/RxCode.app/Contents/MacOS/RxCode";
};
name = Debug;
};
6E17B00B2FC8000100A10001 /* Debug */ = {
isa = XCBuildConfiguration;
buildSettings = {
DEVELOPMENT_TEAM = P9KK452K8P;
GENERATE_INFOPLIST_FILE = YES;
MACOSX_DEPLOYMENT_TARGET = 26.0;
PRODUCT_BUNDLE_IDENTIFIER = com.idealapp.RxCodeUITests;
PRODUCT_NAME = "$(TARGET_NAME)";
SDKROOT = macosx;
SWIFT_VERSION = 6.0;
TEST_TARGET_NAME = RxCode;
};
name = Debug;
};
6E17B00C2FC8000100A10001 /* Release */ = {
isa = XCBuildConfiguration;
buildSettings = {
DEVELOPMENT_TEAM = P9KK452K8P;
GENERATE_INFOPLIST_FILE = YES;
MACOSX_DEPLOYMENT_TARGET = 26.0;
PRODUCT_BUNDLE_IDENTIFIER = com.idealapp.RxCodeUITests;
PRODUCT_NAME = "$(TARGET_NAME)";
SDKROOT = macosx;
SWIFT_VERSION = 6.0;
TEST_TARGET_NAME = RxCode;
};
name = Release;
};
AD9E27433C08ABBEF721A8A6 /* Release */ = {
isa = XCBuildConfiguration;
buildSettings = {
BUNDLE_LOADER = "$(TEST_HOST)";
DEVELOPMENT_TEAM = P9KK452K8P;
GENERATE_INFOPLIST_FILE = YES;
MACOSX_DEPLOYMENT_TARGET = 26.2;
MACOSX_DEPLOYMENT_TARGET = 26.0;
PRODUCT_NAME = RxCodeTests;
SDKROOT = macosx;
SWIFT_VERSION = 6.0;
Expand Down Expand Up @@ -345,7 +448,7 @@
GCC_WARN_UNUSED_FUNCTION = YES;
GCC_WARN_UNUSED_VARIABLE = YES;
LOCALIZATION_PREFERS_STRING_CATALOGS = YES;
MACOSX_DEPLOYMENT_TARGET = 26.2;
MACOSX_DEPLOYMENT_TARGET = 15.0;
MTL_ENABLE_DEBUG_INFO = INCLUDE_SOURCE;
MTL_FAST_MATH = YES;
ONLY_ACTIVE_ARCH = YES;
Expand Down Expand Up @@ -403,7 +506,7 @@
GCC_WARN_UNUSED_FUNCTION = YES;
GCC_WARN_UNUSED_VARIABLE = YES;
LOCALIZATION_PREFERS_STRING_CATALOGS = YES;
MACOSX_DEPLOYMENT_TARGET = 26.2;
MACOSX_DEPLOYMENT_TARGET = 15.0;
MTL_ENABLE_DEBUG_INFO = NO;
MTL_FAST_MATH = YES;
SDKROOT = macosx;
Expand Down Expand Up @@ -491,6 +594,15 @@
defaultConfigurationIsVisible = 0;
defaultConfigurationName = Release;
};
6E17B0072FC8000100A10001 /* Build configuration list for PBXNativeTarget "RxCodeUITests" */ = {
isa = XCConfigurationList;
buildConfigurations = (
6E17B00C2FC8000100A10001 /* Release */,
6E17B00B2FC8000100A10001 /* Debug */,
);
defaultConfigurationIsVisible = 0;
defaultConfigurationName = Release;
};
E67335332F7356F600FD26C7 /* Build configuration list for PBXProject "RxCode" */ = {
isa = XCConfigurationList;
buildConfigurations = (
Expand Down

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

22 changes: 20 additions & 2 deletions RxCode.xcodeproj/xcshareddata/xcschemes/RxCode.xcscheme
Original file line number Diff line number Diff line change
Expand Up @@ -27,8 +27,16 @@
buildConfiguration = "Debug"
selectedDebuggerIdentifier = "Xcode.DebuggerFoundation.Debugger.LLDB"
selectedLauncherIdentifier = "Xcode.DebuggerFoundation.Launcher.LLDB"
shouldUseLaunchSchemeArgsEnv = "YES"
shouldAutocreateTestPlan = "YES">
shouldUseLaunchSchemeArgsEnv = "YES">
<TestPlans>
<TestPlanReference
reference = "container:UITestplan.xctestplan"
default = "YES">
</TestPlanReference>
<TestPlanReference
reference = "container:UnitTestPlan.xctestplan">
</TestPlanReference>
</TestPlans>
<Testables>
<TestableReference
skipped = "NO">
Expand All @@ -40,6 +48,16 @@
ReferencedContainer = "container:RxCode.xcodeproj">
</BuildableReference>
</TestableReference>
<TestableReference
skipped = "NO">
<BuildableReference
BuildableIdentifier = "primary"
BlueprintIdentifier = "6E17B0062FC8000100A10001"
BuildableName = "RxCodeUITests.xctest"
BlueprintName = "RxCodeUITests"
ReferencedContainer = "container:RxCode.xcodeproj">
</BuildableReference>
</TestableReference>
</Testables>
</TestAction>
<LaunchAction
Expand Down
2 changes: 1 addition & 1 deletion RxCode/Info.plist
Original file line number Diff line number Diff line change
Expand Up @@ -29,6 +29,6 @@
<key>SUFeedURL</key>
<string>https://update.code.rxlab.app/appcast.xml</string>
<key>SUPublicEDKey</key>
<string>o1+OjC4eJrHnvmfwRxGPhH8OQFD21WYlxkFndh+4J0M=</string>
<string>OOJs50Q9V9lpqBgeRi0ow0YBdiAlmc9uJ3B9hABDsqQ=</string>
</dict>
</plist>
Loading