Skip to content

Commit 29c6e27

Browse files
committed
Return full name for font instead of user input
1 parent 8092372 commit 29c6e27

2 files changed

Lines changed: 27 additions & 10 deletions

File tree

ShapeScript/EvaluationContext.swift

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -312,15 +312,15 @@ extension EvaluationContext {
312312
guard [".otf", ".ttf", ".ttc"].contains(where: {
313313
name.lowercased().hasSuffix($0)
314314
}) else {
315-
guard CGFont(name as CFString) != nil else {
315+
guard let font = CGFont(name as CFString) else {
316316
var options = [String]()
317317
options += CTFontManagerCopyAvailablePostScriptNames() as? [String] ?? []
318318
options += CTFontManagerCopyAvailableFontFamilyNames() as? [String] ?? []
319319
// TODO: Work around silly race condition where font may have
320320
// been imported by another file in the meantime
321321
throw RuntimeErrorType.unknownFont(name, options: options)
322322
}
323-
return name
323+
return font.fullName as String? ?? name
324324
}
325325
let url = try resolveURL(for: name)
326326
guard let dataProvider = CGDataProvider(url: url as CFURL) else {

ShapeScriptTests/StandardLibraryTests.swift

Lines changed: 25 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -691,29 +691,46 @@ final class StandardLibraryTests: XCTestCase {
691691
XCTAssertNoThrow(try program.evaluate(in: context))
692692
}
693693

694-
func testFontNameMember() throws {
694+
func testFontReturnsFullName() throws {
695695
let program = try parse("""
696696
font "Times"
697-
print font.name
697+
print font
698698
""")
699699
let delegate = TestDelegate()
700700
let context = EvaluationContext(source: program.source, delegate: delegate)
701701
XCTAssertNoThrow(try program.evaluate(in: context))
702+
#if os(iOS)
703+
XCTAssertEqual(delegate.log, ["Times New Roman"])
704+
#elseif os(macOS)
705+
XCTAssertEqual(delegate.log, ["Times Roman"])
706+
#else
702707
XCTAssertEqual(delegate.log, ["Times"])
708+
#endif
709+
}
710+
711+
func testFontNameMember() throws {
712+
let program = try parse("""
713+
font "Arial"
714+
print font.name
715+
""")
716+
let delegate = TestDelegate()
717+
let context = EvaluationContext(source: program.source, delegate: delegate)
718+
XCTAssertNoThrow(try program.evaluate(in: context))
719+
XCTAssertEqual(delegate.log, ["Arial"])
703720
}
704721

705722
func testFontInBlock() throws {
706723
let program = try parse("""
707724
define foo {
708-
font "Times"
725+
font "Arial"
709726
print font
710727
}
711728
foo
712729
""")
713730
let delegate = TestDelegate()
714731
let context = EvaluationContext(source: program.source, delegate: delegate)
715732
XCTAssertNoThrow(try program.evaluate(in: context))
716-
XCTAssertEqual(delegate.log, ["Times"])
733+
XCTAssertEqual(delegate.log, ["Arial"])
717734
}
718735

719736
func testFontInBlockCallScope() throws {
@@ -722,14 +739,14 @@ final class StandardLibraryTests: XCTestCase {
722739
print font
723740
}
724741
group {
725-
font "Times"
742+
font "Arial"
726743
foo
727744
}
728745
""")
729746
let delegate = TestDelegate()
730747
let context = EvaluationContext(source: program.source, delegate: delegate)
731748
XCTAssertNoThrow(try program.evaluate(in: context))
732-
XCTAssertEqual(delegate.log, ["Times"])
749+
XCTAssertEqual(delegate.log, ["Arial"])
733750
}
734751

735752
func testFontInBlockCall() throws {
@@ -738,13 +755,13 @@ final class StandardLibraryTests: XCTestCase {
738755
print font
739756
}
740757
foo {
741-
font "Times"
758+
font "Arial"
742759
}
743760
""")
744761
let delegate = TestDelegate()
745762
let context = EvaluationContext(source: program.source, delegate: delegate)
746763
XCTAssertNoThrow(try program.evaluate(in: context))
747-
XCTAssertEqual(delegate.log, ["Times"])
764+
XCTAssertEqual(delegate.log, ["Arial"])
748765
}
749766

750767
// MARK: Strings

0 commit comments

Comments
 (0)