Skip to content

Commit

Permalink
Merge branch 'master' into weakref
Browse files Browse the repository at this point in the history
  • Loading branch information
rfm committed Dec 31, 2024
2 parents 44a0355 + 46d19b5 commit 5a9eeec
Show file tree
Hide file tree
Showing 6 changed files with 69 additions and 35 deletions.
14 changes: 13 additions & 1 deletion ChangeLog
Original file line number Diff line number Diff line change
@@ -1,3 +1,15 @@
2024-12-31 Richard Frith-Macdonald <rfm@gnu.org>

* Source/NSTimeZone.m: Add GNUSTEP_BUILTIN_TZ environment variable to
force the use of the IANA standard based time zone files we provide
in the distribution rather than the system supplied time zone data.
This allows us to standardise test behavior across different systems.
* Tests/base/NSCalendarDate/TestInfo: set GNUSTEP_BUILTIN_TZ=1
* Tests/base/NSCalendarDate/test02.m: Change from using the MET zone
to using CET for tests since the IANA data has changed to make MET
behave aas CET.
* Tests/base/NSTimeZone/TestInfo: set GNUSTEP_BUILTIN_TZ=1

2024-12-27 Richard Frith-Macdonald <rfm@gnu.org>

* Headers/GNUstepBase/GSIMap.h:
Expand Down Expand Up @@ -28,7 +40,7 @@

* Source/NSURLProtocol.m: fix leaks due to retain loops.
* Source/Additions/NSObject+GNUstepBase.m: fix issues in new
-trackOownership mechanism to log tracked instances at exist and to
-trackOwnership mechanism to log tracked instances at exist and to
handle cases where we track instances of a class and instances of
its subclasses.

Expand Down
24 changes: 16 additions & 8 deletions Source/NSTimeZone.m
Original file line number Diff line number Diff line change
Expand Up @@ -33,6 +33,8 @@
Time zone names can be different from system to system, but usually
the user has already set up his timezone independant of GNUstep, so we
should respect that information.
For testing purposes, the GNUSTEP_BUILTIN_TZ environment variable can
be set to force the system independent data to be used.
We do not use a dictionary for storing time zones, since such a
dictionary would be VERY large (~500K). And we would have to use a
Expand Down Expand Up @@ -2500,17 +2502,23 @@ + (NSString*) _getTimeZoneFile: (NSString *)name
}
GS_MUTEX_UNLOCK(zone_mutex);
}
/* Use the system zone info if possible, otherwise, use our installed
info. */
if (tzdir && [[NSFileManager defaultManager] fileExistsAtPath:
[tzdir stringByAppendingPathComponent: name] isDirectory: &isDir] == YES
&& isDir == NO)

if (NO == [[[[NSProcessInfo processInfo] environment]
objectForKey: @"GNUSTEP_BUILTIN_TZ"] boolValue])
{
dir = tzdir;
/* Use the system zone info if possible, otherwise, use our installed
* info.
*/
if (tzdir && [[NSFileManager defaultManager] fileExistsAtPath:
[tzdir stringByAppendingPathComponent: name] isDirectory: &isDir]
&& isDir == NO)
{
dir = tzdir;
}
}
if (dir == nil)
{
dir = _time_zone_path (ZONES_DIR, nil);
dir = _time_zone_path(ZONES_DIR, nil);
}
return [dir stringByAppendingPathComponent: name];
}
Expand Down Expand Up @@ -3065,7 +3073,7 @@ - (id) initWithName: (NSString*)name data: (NSData*)data

NS_DURING
{
size_t nread;
size_t nread;
union input_buffer *up;

lsp = malloc(sizeof(*lsp));
Expand Down
2 changes: 2 additions & 0 deletions Tests/base/NSCalendarDate/TestInfo
Original file line number Diff line number Diff line change
@@ -0,0 +1,2 @@
# On unix systems force testing using our inbuilt time zone data.
export GNUSTEP_BUILTIN_TZ=1
44 changes: 25 additions & 19 deletions Tests/base/NSCalendarDate/test02.m
Original file line number Diff line number Diff line change
Expand Up @@ -13,7 +13,8 @@ int main()
NSMutableArray *tmpArray;
NSMutableDictionary *myLocale;
NSCalendarDate *myBirthday;
NSCalendarDate *anotherDay;
NSCalendarDate *anotherDay;
NSTimeZone *tz;

myLocale = westernLocale();

Expand Down Expand Up @@ -72,21 +73,26 @@ int main()
[tmpArray addObject: @"PM"];
[myLocale setObject: tmpArray forKey: NSAMPMDesignation];

tz = [NSTimeZone timeZoneWithName: @"CET"];
PASS_EQUAL([tz name], @"CET", "got time zone for dates")

myBirthday = [NSCalendarDate dateWithYear: 1974
month: 11
day: 20
hour: 13
minute: 0
second: 0
timeZone: [NSTimeZone timeZoneWithName: @"MET"]];
month: 11
day: 20
hour: 13
minute: 0
second: 0
timeZone: tz];
PASS_EQUAL([myBirthday timeZone], tz, "myBirthday has expected time zone")

anotherDay = [NSCalendarDate dateWithYear: 1974
month: 1
day: 2
hour: 3
minute: 0
second: 0
timeZone: [NSTimeZone timeZoneWithName: @"MET"]];
month: 1
day: 2
hour: 3
minute: 0
second: 0
timeZone: tz];
PASS_EQUAL([anotherDay timeZone], tz, "anotherDay has expected time zone")

PASS([[myBirthday descriptionWithCalendarFormat: @"%%"
locale: myLocale] isEqualToString: @"%"],
Expand Down Expand Up @@ -168,9 +174,9 @@ int main()
locale: myLocale] isEqualToString: @"1974"],
"%%Y format works in description");

PASS([[myBirthday descriptionWithCalendarFormat: @"%Z"
locale: myLocale] isEqualToString: @"MET"],
"%%Z format works in description");
PASS_EQUAL([myBirthday
descriptionWithCalendarFormat: @"%Z" locale: myLocale],
@"CET", "%%Z format works in description")

PASS([[myBirthday descriptionWithCalendarFormat: @"%z"
locale: myLocale] isEqualToString: @"+0100"],
Expand All @@ -192,9 +198,9 @@ int main()
locale: myLocale] isEqualToString: @"13%00%00"],
"%%H%%%%%%M%%%%%%S format works in description");

PASS([[myBirthday descriptionWithCalendarFormat: @"%H:%M (%Z)"
locale: myLocale] isEqualToString: @"13:00 (MET)"],
"%%H%%M format works in description");
PASS_EQUAL([myBirthday
descriptionWithCalendarFormat: @"%H:%M (%Z)" locale: myLocale],
@"13:00 (CET)", "%%H%%M format works in description")

PASS([[myBirthday descriptionWithCalendarFormat: @"%R"
locale: myLocale] isEqualToString: @"13:00"],
Expand Down
3 changes: 3 additions & 0 deletions Tests/base/NSTimeZone/TestInfo
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
# On unix systems force testing using our inbuilt time zone data.
export GNUSTEP_BUILTIN_TZ=1

17 changes: 10 additions & 7 deletions Tests/base/NSTimeZone/create.m
Original file line number Diff line number Diff line change
Expand Up @@ -9,31 +9,34 @@ int main()

current = [NSTimeZone defaultTimeZone];
PASS(current != nil && [current isKindOfClass: [NSTimeZone class]],
"+defaultTimeZone works");
"+defaultTimeZone works")

current = [NSTimeZone localTimeZone];
PASS(current != nil && [current isKindOfClass: [NSTimeZone class]],
"+localTimeZone works");
"+localTimeZone works")

current = [NSTimeZone systemTimeZone];
PASS(current != nil && [current isKindOfClass: [NSTimeZone class]],
"+systemTimeZone works");
"+systemTimeZone works")

current = [NSTimeZone timeZoneForSecondsFromGMT: 900];
PASS(current != nil && [current isKindOfClass: [NSTimeZone class]],
"+timeZoneForSecondsFromGMT works");
"+timeZoneForSecondsFromGMT: works")

current = [NSTimeZone timeZoneForSecondsFromGMT: 90000];
PASS(current == nil,
"+timeZoneForSecondsFromGMT fails for bad offset");
"+timeZoneForSecondsFromGMT: fails for bad offset")

current = [NSTimeZone timeZoneWithAbbreviation: @"MST"];
PASS(current != nil && [current isKindOfClass: [NSTimeZone class]],
"+timeZoneWithAbbreviation works");
"+timeZoneWithAbbreviation: works")

current = [NSTimeZone timeZoneWithName: @"GB"];
PASS(current != nil && [current isKindOfClass: [NSTimeZone class]],
"+timeZoneWithName works");
"+timeZoneWithName: works")

current = [NSTimeZone timeZoneWithName: @"MET"];
PASS_EQUAL([current name], @"MET", "+timeZoneWithName: preserved name")

[arp release]; arp = nil;
return 0;
Expand Down

0 comments on commit 5a9eeec

Please sign in to comment.