mirror of
https://github.com/apple/swift.git
synced 2025-12-14 20:36:38 +01:00
127 lines
4.3 KiB
Swift
127 lines
4.3 KiB
Swift
|
|
// REQUIRES: swift_swift_parser, executable_test
|
|
|
|
// RUN: %empty-directory(%t)
|
|
|
|
// RUN: mkdir -p %t/src
|
|
// RUN: mkdir -p %t/bin
|
|
// RUN: mkdir -p %t/lib/tmp
|
|
// RUN: mkdir -p %t/lib/plugins
|
|
// RUN: mkdir -p %t/external
|
|
// RUN: mkdir -p %t/libexec
|
|
|
|
// RUN: split-file %s %t/src
|
|
|
|
//#-- For -plugin-path
|
|
// RUN: %host-build-swift \
|
|
// RUN: -swift-version 5 \
|
|
// RUN: -emit-library -o %t/lib/plugins/%target-library-name(MacroDefinition) \
|
|
// RUN: -module-name MacroDefinition \
|
|
// RUN: -D PLUGIN_PATH \
|
|
// RUN: %t/src/MacroDefinition.swift
|
|
|
|
//#-- For -load-plugin-library
|
|
// RUN: %host-build-swift \
|
|
// RUN: -swift-version 5 \
|
|
// RUN: -emit-library -o %t/lib/tmp/%target-library-name(MacroDefinition) \
|
|
// RUN: -module-name MacroDefinition \
|
|
// RUN: -D LOAD_PLUGIN_LIBRARY \
|
|
// RUN: %t/src/MacroDefinition.swift
|
|
|
|
//#-- For -external-plugin-path
|
|
// RUN: %host-build-swift \
|
|
// RUN: -swift-version 5 \
|
|
// RUN: -emit-library -o %t/external/%target-library-name(MacroDefinition) \
|
|
// RUN: -module-name MacroDefinition \
|
|
// RUN: -D EXTERNAL_PLUGIN_PATH \
|
|
// RUN: %t/src/MacroDefinition.swift
|
|
|
|
//#-- For -load-plugin-executable
|
|
// RUN: %swift-build-c-plugin -o %t/libexec/MacroDefinitionPlugin %t/src/MacroDefinition.c
|
|
|
|
//#-- Expect -load-plugin-library
|
|
// RUN: %target-build-swift %t/src/test.swift \
|
|
// RUN: -module-name test \
|
|
// RUN: -load-plugin-library %t/lib/tmp/%target-library-name(MacroDefinition) \
|
|
// RUN: -plugin-path %t/lib/plugins \
|
|
// RUN: -external-plugin-path %t/external#%swift-plugin-server \
|
|
// RUN: -load-plugin-executable %t/libexec/MacroDefinitionPlugin#MacroDefinition \
|
|
// RUN: -o %t/main1
|
|
// RUN: %target-codesign %t/main1
|
|
// RUN: %target-run %t/main1 | %FileCheck --check-prefix=CHECK_LOAD_PLUGIN_LIBRARY %s
|
|
|
|
//#-- Expect -load-plugin-executable
|
|
// RUN: %target-build-swift %t/src/test.swift \
|
|
// RUN: -module-name test \
|
|
// RUN: -load-plugin-executable %t/libexec/MacroDefinitionPlugin#MacroDefinition \
|
|
// RUN: -plugin-path %t/lib/plugins \
|
|
// RUN: -external-plugin-path %t/external#%swift-plugin-server \
|
|
// RUN: -o %t/main2
|
|
// RUN: %target-codesign %t/main2
|
|
// RUN: %target-run %t/main2 | %FileCheck --check-prefix=CHECK_LOAD_PLUGIN_EXECUTABLE %s
|
|
|
|
//#-- Expect -plugin-path
|
|
// RUN: %target-build-swift %t/src/test.swift \
|
|
// RUN: -module-name test \
|
|
// RUN: -plugin-path %t/lib/plugins \
|
|
// RUN: -load-plugin-library %t/lib/tmp/%target-library-name(MacroDefinition) \
|
|
// RUN: -external-plugin-path %t/external#%swift-plugin-server \
|
|
// RUN: -o %t/main3
|
|
// RUN: %target-codesign %t/main3
|
|
// RUN: %target-run %t/main3 | %FileCheck --check-prefix=CHECK_PLUGIN_PATH %s
|
|
|
|
//#-- Expect -external-plugin-path
|
|
// RUN: %target-build-swift %t/src/test.swift \
|
|
// RUN: -module-name test \
|
|
// RUN: -external-plugin-path %t/external#%swift-plugin-server \
|
|
// RUN: -plugin-path %t/lib/plugins \
|
|
// RUN: -load-plugin-executable %t/libexec/MacroDefinitionPlugin#MacroDefinition \
|
|
// RUN: -o %t/main4
|
|
// RUN: %target-codesign %t/main4
|
|
// RUN: %target-run %t/main4 | %FileCheck --check-prefix=CHECK_EXTERNAL_PLUGIN_PATH %s
|
|
|
|
// CHECK_LOAD_PLUGIN_LIBRARY: load-plugin-library
|
|
// CHECK_LOAD_PLUGIN_EXECUTABLE: load-plugin-executable
|
|
// CHECK_PLUGIN_PATH: plugin-path
|
|
// CHECK_EXTERNAL_PLUGIN_PATH: external-plugin-path
|
|
|
|
//--- test.swift
|
|
@freestanding(expression) macro testMacro() -> String = #externalMacro(module: "MacroDefinition", type: "TestMacro")
|
|
|
|
print(#testMacro)
|
|
|
|
//--- MacroDefinition.swift
|
|
import SwiftSyntax
|
|
import SwiftSyntaxMacros
|
|
|
|
public struct TestMacro: ExpressionMacro {
|
|
public static func expansion(
|
|
of node: some FreestandingMacroExpansionSyntax,
|
|
in context: some MacroExpansionContext
|
|
) throws -> ExprSyntax {
|
|
#if PLUGIN_PATH
|
|
return #""plugin-path""#
|
|
#elseif LOAD_PLUGIN_LIBRARY
|
|
return #""load-plugin-library""#
|
|
#elseif EXTERNAL_PLUGIN_PATH
|
|
return #""external-plugin-path""#
|
|
#endif
|
|
}
|
|
}
|
|
|
|
//--- MacroDefinition.c
|
|
#include "swift-c/MockPlugin/MockPlugin.h"
|
|
|
|
MOCK_PLUGIN([
|
|
{
|
|
"expect": {"getCapability": {}},
|
|
"response": {"getCapabilityResult": {"capability": {"protocolVersion": 1}}}
|
|
},
|
|
{
|
|
"expect": {"expandFreestandingMacro": {
|
|
"macro": {"moduleName": "MacroDefinition", "typeName": "TestMacro"},
|
|
"syntax": {"kind": "expression", "source": "#testMacro"}}},
|
|
"response": {"expandFreestandingMacroResult": {"expandedSource": "\"load-plugin-executable\"", "diagnostics": []}}
|
|
}
|
|
])
|