mirror of
https://github.com/gnustep/libs-base.git
synced 2025-06-01 17:12:03 +00:00
Merge branch 'master' into weakref
This commit is contained in:
commit
5a9eeec452
6 changed files with 69 additions and 35 deletions
14
ChangeLog
14
ChangeLog
|
@ -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>
|
2024-12-27 Richard Frith-Macdonald <rfm@gnu.org>
|
||||||
|
|
||||||
* Headers/GNUstepBase/GSIMap.h:
|
* Headers/GNUstepBase/GSIMap.h:
|
||||||
|
@ -28,7 +40,7 @@
|
||||||
|
|
||||||
* Source/NSURLProtocol.m: fix leaks due to retain loops.
|
* Source/NSURLProtocol.m: fix leaks due to retain loops.
|
||||||
* Source/Additions/NSObject+GNUstepBase.m: fix issues in new
|
* 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
|
handle cases where we track instances of a class and instances of
|
||||||
its subclasses.
|
its subclasses.
|
||||||
|
|
||||||
|
|
|
@ -33,6 +33,8 @@
|
||||||
Time zone names can be different from system to system, but usually
|
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
|
the user has already set up his timezone independant of GNUstep, so we
|
||||||
should respect that information.
|
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
|
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
|
dictionary would be VERY large (~500K). And we would have to use a
|
||||||
|
@ -2500,17 +2502,23 @@ static NSString *zoneDirs[] = {
|
||||||
}
|
}
|
||||||
GS_MUTEX_UNLOCK(zone_mutex);
|
GS_MUTEX_UNLOCK(zone_mutex);
|
||||||
}
|
}
|
||||||
/* Use the system zone info if possible, otherwise, use our installed
|
|
||||||
info. */
|
if (NO == [[[[NSProcessInfo processInfo] environment]
|
||||||
if (tzdir && [[NSFileManager defaultManager] fileExistsAtPath:
|
objectForKey: @"GNUSTEP_BUILTIN_TZ"] boolValue])
|
||||||
[tzdir stringByAppendingPathComponent: name] isDirectory: &isDir] == YES
|
|
||||||
&& isDir == NO)
|
|
||||||
{
|
{
|
||||||
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)
|
if (dir == nil)
|
||||||
{
|
{
|
||||||
dir = _time_zone_path (ZONES_DIR, nil);
|
dir = _time_zone_path(ZONES_DIR, nil);
|
||||||
}
|
}
|
||||||
return [dir stringByAppendingPathComponent: name];
|
return [dir stringByAppendingPathComponent: name];
|
||||||
}
|
}
|
||||||
|
@ -3065,7 +3073,7 @@ getTypeInfo(NSTimeInterval since, GSTimeZone *zone)
|
||||||
|
|
||||||
NS_DURING
|
NS_DURING
|
||||||
{
|
{
|
||||||
size_t nread;
|
size_t nread;
|
||||||
union input_buffer *up;
|
union input_buffer *up;
|
||||||
|
|
||||||
lsp = malloc(sizeof(*lsp));
|
lsp = malloc(sizeof(*lsp));
|
||||||
|
|
|
@ -0,0 +1,2 @@
|
||||||
|
# On unix systems force testing using our inbuilt time zone data.
|
||||||
|
export GNUSTEP_BUILTIN_TZ=1
|
|
@ -13,7 +13,8 @@ int main()
|
||||||
NSMutableArray *tmpArray;
|
NSMutableArray *tmpArray;
|
||||||
NSMutableDictionary *myLocale;
|
NSMutableDictionary *myLocale;
|
||||||
NSCalendarDate *myBirthday;
|
NSCalendarDate *myBirthday;
|
||||||
NSCalendarDate *anotherDay;
|
NSCalendarDate *anotherDay;
|
||||||
|
NSTimeZone *tz;
|
||||||
|
|
||||||
myLocale = westernLocale();
|
myLocale = westernLocale();
|
||||||
|
|
||||||
|
@ -72,21 +73,26 @@ int main()
|
||||||
[tmpArray addObject: @"PM"];
|
[tmpArray addObject: @"PM"];
|
||||||
[myLocale setObject: tmpArray forKey: NSAMPMDesignation];
|
[myLocale setObject: tmpArray forKey: NSAMPMDesignation];
|
||||||
|
|
||||||
|
tz = [NSTimeZone timeZoneWithName: @"CET"];
|
||||||
|
PASS_EQUAL([tz name], @"CET", "got time zone for dates")
|
||||||
|
|
||||||
myBirthday = [NSCalendarDate dateWithYear: 1974
|
myBirthday = [NSCalendarDate dateWithYear: 1974
|
||||||
month: 11
|
month: 11
|
||||||
day: 20
|
day: 20
|
||||||
hour: 13
|
hour: 13
|
||||||
minute: 0
|
minute: 0
|
||||||
second: 0
|
second: 0
|
||||||
timeZone: [NSTimeZone timeZoneWithName: @"MET"]];
|
timeZone: tz];
|
||||||
|
PASS_EQUAL([myBirthday timeZone], tz, "myBirthday has expected time zone")
|
||||||
|
|
||||||
anotherDay = [NSCalendarDate dateWithYear: 1974
|
anotherDay = [NSCalendarDate dateWithYear: 1974
|
||||||
month: 1
|
month: 1
|
||||||
day: 2
|
day: 2
|
||||||
hour: 3
|
hour: 3
|
||||||
minute: 0
|
minute: 0
|
||||||
second: 0
|
second: 0
|
||||||
timeZone: [NSTimeZone timeZoneWithName: @"MET"]];
|
timeZone: tz];
|
||||||
|
PASS_EQUAL([anotherDay timeZone], tz, "anotherDay has expected time zone")
|
||||||
|
|
||||||
PASS([[myBirthday descriptionWithCalendarFormat: @"%%"
|
PASS([[myBirthday descriptionWithCalendarFormat: @"%%"
|
||||||
locale: myLocale] isEqualToString: @"%"],
|
locale: myLocale] isEqualToString: @"%"],
|
||||||
|
@ -168,9 +174,9 @@ int main()
|
||||||
locale: myLocale] isEqualToString: @"1974"],
|
locale: myLocale] isEqualToString: @"1974"],
|
||||||
"%%Y format works in description");
|
"%%Y format works in description");
|
||||||
|
|
||||||
PASS([[myBirthday descriptionWithCalendarFormat: @"%Z"
|
PASS_EQUAL([myBirthday
|
||||||
locale: myLocale] isEqualToString: @"MET"],
|
descriptionWithCalendarFormat: @"%Z" locale: myLocale],
|
||||||
"%%Z format works in description");
|
@"CET", "%%Z format works in description")
|
||||||
|
|
||||||
PASS([[myBirthday descriptionWithCalendarFormat: @"%z"
|
PASS([[myBirthday descriptionWithCalendarFormat: @"%z"
|
||||||
locale: myLocale] isEqualToString: @"+0100"],
|
locale: myLocale] isEqualToString: @"+0100"],
|
||||||
|
@ -192,9 +198,9 @@ int main()
|
||||||
locale: myLocale] isEqualToString: @"13%00%00"],
|
locale: myLocale] isEqualToString: @"13%00%00"],
|
||||||
"%%H%%%%%%M%%%%%%S format works in description");
|
"%%H%%%%%%M%%%%%%S format works in description");
|
||||||
|
|
||||||
PASS([[myBirthday descriptionWithCalendarFormat: @"%H:%M (%Z)"
|
PASS_EQUAL([myBirthday
|
||||||
locale: myLocale] isEqualToString: @"13:00 (MET)"],
|
descriptionWithCalendarFormat: @"%H:%M (%Z)" locale: myLocale],
|
||||||
"%%H%%M format works in description");
|
@"13:00 (CET)", "%%H%%M format works in description")
|
||||||
|
|
||||||
PASS([[myBirthday descriptionWithCalendarFormat: @"%R"
|
PASS([[myBirthday descriptionWithCalendarFormat: @"%R"
|
||||||
locale: myLocale] isEqualToString: @"13:00"],
|
locale: myLocale] isEqualToString: @"13:00"],
|
||||||
|
|
|
@ -0,0 +1,3 @@
|
||||||
|
# On unix systems force testing using our inbuilt time zone data.
|
||||||
|
export GNUSTEP_BUILTIN_TZ=1
|
||||||
|
|
|
@ -9,31 +9,34 @@ int main()
|
||||||
|
|
||||||
current = [NSTimeZone defaultTimeZone];
|
current = [NSTimeZone defaultTimeZone];
|
||||||
PASS(current != nil && [current isKindOfClass: [NSTimeZone class]],
|
PASS(current != nil && [current isKindOfClass: [NSTimeZone class]],
|
||||||
"+defaultTimeZone works");
|
"+defaultTimeZone works")
|
||||||
|
|
||||||
current = [NSTimeZone localTimeZone];
|
current = [NSTimeZone localTimeZone];
|
||||||
PASS(current != nil && [current isKindOfClass: [NSTimeZone class]],
|
PASS(current != nil && [current isKindOfClass: [NSTimeZone class]],
|
||||||
"+localTimeZone works");
|
"+localTimeZone works")
|
||||||
|
|
||||||
current = [NSTimeZone systemTimeZone];
|
current = [NSTimeZone systemTimeZone];
|
||||||
PASS(current != nil && [current isKindOfClass: [NSTimeZone class]],
|
PASS(current != nil && [current isKindOfClass: [NSTimeZone class]],
|
||||||
"+systemTimeZone works");
|
"+systemTimeZone works")
|
||||||
|
|
||||||
current = [NSTimeZone timeZoneForSecondsFromGMT: 900];
|
current = [NSTimeZone timeZoneForSecondsFromGMT: 900];
|
||||||
PASS(current != nil && [current isKindOfClass: [NSTimeZone class]],
|
PASS(current != nil && [current isKindOfClass: [NSTimeZone class]],
|
||||||
"+timeZoneForSecondsFromGMT works");
|
"+timeZoneForSecondsFromGMT: works")
|
||||||
|
|
||||||
current = [NSTimeZone timeZoneForSecondsFromGMT: 90000];
|
current = [NSTimeZone timeZoneForSecondsFromGMT: 90000];
|
||||||
PASS(current == nil,
|
PASS(current == nil,
|
||||||
"+timeZoneForSecondsFromGMT fails for bad offset");
|
"+timeZoneForSecondsFromGMT: fails for bad offset")
|
||||||
|
|
||||||
current = [NSTimeZone timeZoneWithAbbreviation: @"MST"];
|
current = [NSTimeZone timeZoneWithAbbreviation: @"MST"];
|
||||||
PASS(current != nil && [current isKindOfClass: [NSTimeZone class]],
|
PASS(current != nil && [current isKindOfClass: [NSTimeZone class]],
|
||||||
"+timeZoneWithAbbreviation works");
|
"+timeZoneWithAbbreviation: works")
|
||||||
|
|
||||||
current = [NSTimeZone timeZoneWithName: @"GB"];
|
current = [NSTimeZone timeZoneWithName: @"GB"];
|
||||||
PASS(current != nil && [current isKindOfClass: [NSTimeZone class]],
|
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;
|
[arp release]; arp = nil;
|
||||||
return 0;
|
return 0;
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue